/*
* SonarQube
* Copyright (C) 2009-2017 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.duplications.index;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.util.Arrays;
import org.junit.Test;
public class DataUtilsTest {
@Test
public void testSort() {
int[] expected = new int[200];
int[] actual = new int[expected.length];
for (int i = 0; i < expected.length; i++) {
expected[i] = (int) (Math.random() * 900);
actual[i] = expected[i];
}
Arrays.sort(expected);
DataUtils.sort(new SimpleSortable(actual, actual.length));
assertThat(actual, equalTo(expected));
}
@Test
public void testSearch() {
int[] a = new int[] { 1, 2, 4, 4, 4, 5, 0 };
SimpleSortable sortable = new SimpleSortable(a, a.length - 1);
// search 4
a[a.length - 1] = 4;
assertThat(DataUtils.binarySearch(sortable), is(2));
// search 5
a[a.length - 1] = 5;
assertThat(DataUtils.binarySearch(sortable), is(5));
// search -5
a[a.length - 1] = -5;
assertThat(DataUtils.binarySearch(sortable), is(0));
// search 10
a[a.length - 1] = 10;
assertThat(DataUtils.binarySearch(sortable), is(6));
// search 3
a[a.length - 1] = 3;
assertThat(DataUtils.binarySearch(sortable), is(2));
}
class SimpleSortable implements DataUtils.Sortable {
private final int[] a;
private final int size;
public SimpleSortable(int[] a, int size) {
this.a = a;
this.size = size;
}
public int size() {
return size;
}
public void swap(int i, int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
public boolean isLess(int i, int j) {
return a[i] < a[j];
}
}
}