Updated BinUtil and CoordinatePacker

- Added packing 2 ints into a long to CoordinatePacker
- Added iPowerOf2(int) to BinUtil
This commit is contained in:
2020-08-06 21:36:45 +03:00
parent b9dc25096f
commit 1362dab2c1
6 changed files with 173 additions and 3 deletions

View File

@@ -0,0 +1,72 @@
/*******************************************************************************
* Optica
* Copyright (C) 2020 Wind Corporation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*******************************************************************************/
package ru.windcorp.optica.util;
import static org.junit.Assert.assertEquals;
import java.util.Random;
import org.junit.Test;
import ru.windcorp.optica.common.util.BinUtil;
public class BinUtilIsPowerOf2Test {
@Test
public void cornerCases() {
test(-1);
test(0);
test(1);
test(15);
test(16);
test(17);
test(1 << 30);
test(Integer.MAX_VALUE);
test(Integer.MIN_VALUE);
}
@Test
public void random() {
Random random = new Random(0);
for (int x = 0; x < 10000; ++x) {
test(x);
}
for (int i = 0; i < 10000; ++i) {
test(random.nextInt());
}
}
void test(int x) {
assertEquals("Round, x = " + x, referenceIsPowerOf2(x), BinUtil.isPowerOf2(x));
}
boolean referenceIsPowerOf2(int x) {
for (int power = 1; power > 0; power *= 2) {
if (x == power) {
return true;
}
}
return false;
}
}

View File

@@ -25,7 +25,7 @@ import org.junit.Test;
import ru.windcorp.optica.common.util.BinUtil;
public class BinUtilTest {
public class BinUtilRoundTest {
@Test
public void cornerCases() {

View File

@@ -0,0 +1,69 @@
/*******************************************************************************
* Optica
* Copyright (C) 2020 Wind Corporation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*******************************************************************************/
package ru.windcorp.optica.util;
import static org.junit.Assert.assertEquals;
import java.util.Random;
import org.junit.Test;
import ru.windcorp.optica.common.util.CoordinatePacker;
public class CoordinatePacker2Test {
@Test
public void cornerCases() {
check(0, 0);
check(0, 42);
check(42, 0);
check(1, 1);
check(-1, -1);
for (int a : new int[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}) {
for (int b : new int[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}) {
check(a, b);
}
}
}
@Test
public void randomValues() {
Random random = new Random(0);;
for (int i = 0; i < 1000000; ++i) {
check(
random.nextInt(),
random.nextInt()
);
}
}
private void check(int a, int b) {
long packed = CoordinatePacker.pack2IntsIntoLong(a, b);
int unpackedA = CoordinatePacker.unpack2IntsFromLong(packed, 0);
int unpackedB = CoordinatePacker.unpack2IntsFromLong(packed, 1);
assertEquals(a, unpackedA);
assertEquals(b, unpackedB);
}
}

View File

@@ -25,7 +25,7 @@ import org.junit.Test;
import ru.windcorp.optica.common.util.CoordinatePacker;
public class CoordinatePackerTest {
public class CoordinatePacker3Test {
@Test
public void cornerCases() {