public void setChunkSize(Vector3i chunkSize) { this.chunkFilterSize = new Vector3i(TeraMath.ceilPowerOfTwo(chunkSize.x) - 1, TeraMath.ceilPowerOfTwo(chunkSize.y) - 1, TeraMath.ceilPowerOfTwo(chunkSize.z) - 1); this.chunkPower = new Vector3i(TeraMath.sizeOfPower(chunkSize.x), TeraMath.sizeOfPower(chunkSize.y), TeraMath.sizeOfPower(chunkSize.z)); Vector3i blockMin = new Vector3i(); blockMin.sub(offset); blockMin.mul(chunkSize.x, chunkSize.y, chunkSize.z); Vector3i blockSize = chunkRegion.size(); blockSize.mul(chunkSize.x, chunkSize.y, chunkSize.z); this.blockRegion = Region3i.createFromMinAndSize(blockMin, blockSize); }
/** * Tests TeraMath.ceilPowerOfTwo for inputs that are * powers of two themselves, or are have a distance of 1 to a power of two. * * @param currentPowerOfTwo The power of two used to produce the input * @param nextPowerOfTwo The next power of two, sometimes used as expected output */ private void testCeilPowerOfTwo(int currentPowerOfTwo, int nextPowerOfTwo) { assertEquals("input " + currentPowerOfTwo, currentPowerOfTwo, TeraMath.ceilPowerOfTwo(currentPowerOfTwo) ); int expectedValue = (currentPowerOfTwo == 1) ? 0 : (currentPowerOfTwo == 2) ? 1 : currentPowerOfTwo; assertEquals("input " + currentPowerOfTwo + " - 1", expectedValue, TeraMath.ceilPowerOfTwo(currentPowerOfTwo - 1) ); assertEquals("input " + currentPowerOfTwo + " + 1", nextPowerOfTwo, TeraMath.ceilPowerOfTwo(currentPowerOfTwo + 1) ); }
@Test public void testCeilPowerOfTwo() { List<Integer> powersOfTwo = generateAllPowersOfTwo(); for (int i = 1; i < powersOfTwo.size(); i++) { //test inputs on and around powers of two. Skips tests on zero testCeilPowerOfTwo(powersOfTwo.get(i - 1), powersOfTwo.get(i)); } int largestIntegerPowerOfTwo = powersOfTwo.get(powersOfTwo.size() - 1); //test other boundary values assertEquals("0", 0, TeraMath.ceilPowerOfTwo(0)); assertEquals("-1", 0, TeraMath.ceilPowerOfTwo(0)); assertEquals("Integer.MIN_VALUE", 0, TeraMath.ceilPowerOfTwo(Integer.MIN_VALUE)); assertEquals("Integer.MAX_VALUE", 0, TeraMath.ceilPowerOfTwo(Integer.MAX_VALUE)); assertEquals("Largest integer power of two + 1", 0, TeraMath.ceilPowerOfTwo(largestIntegerPowerOfTwo + 1)); }