/*********************************************************************************************************************** * Copyright (C) 2010-2013 by the Stratosphere project (http://stratosphere.eu) * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. **********************************************************************************************************************/ package eu.stratosphere.pact.runtime.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import org.junit.Test; public class MathUtilTest { @Test public void testLog2Computation() { assertEquals(0, MathUtils.log2floor(1)); assertEquals(1, MathUtils.log2floor(2)); assertEquals(1, MathUtils.log2floor(3)); assertEquals(2, MathUtils.log2floor(4)); assertEquals(2, MathUtils.log2floor(5)); assertEquals(2, MathUtils.log2floor(7)); assertEquals(3, MathUtils.log2floor(8)); assertEquals(3, MathUtils.log2floor(9)); assertEquals(4, MathUtils.log2floor(16)); assertEquals(4, MathUtils.log2floor(17)); assertEquals(13, MathUtils.log2floor((0x1 << 13) + 1)); assertEquals(30, MathUtils.log2floor(Integer.MAX_VALUE)); assertEquals(31, MathUtils.log2floor(-1)); try { MathUtils.log2floor(0); fail(); } catch (ArithmeticException aex) {} } @Test public void testRoundDownToPowerOf2() { assertEquals(0, MathUtils.roundDownToPowerOf2(0)); assertEquals(1, MathUtils.roundDownToPowerOf2(1)); assertEquals(2, MathUtils.roundDownToPowerOf2(2)); assertEquals(2, MathUtils.roundDownToPowerOf2(3)); assertEquals(4, MathUtils.roundDownToPowerOf2(4)); assertEquals(4, MathUtils.roundDownToPowerOf2(5)); assertEquals(4, MathUtils.roundDownToPowerOf2(6)); assertEquals(4, MathUtils.roundDownToPowerOf2(7)); assertEquals(8, MathUtils.roundDownToPowerOf2(8)); assertEquals(8, MathUtils.roundDownToPowerOf2(9)); assertEquals(8, MathUtils.roundDownToPowerOf2(15)); assertEquals(16, MathUtils.roundDownToPowerOf2(16)); assertEquals(16, MathUtils.roundDownToPowerOf2(17)); assertEquals(16, MathUtils.roundDownToPowerOf2(31)); assertEquals(32, MathUtils.roundDownToPowerOf2(32)); assertEquals(32, MathUtils.roundDownToPowerOf2(33)); assertEquals(32, MathUtils.roundDownToPowerOf2(42)); assertEquals(32, MathUtils.roundDownToPowerOf2(63)); assertEquals(64, MathUtils.roundDownToPowerOf2(64)); assertEquals(64, MathUtils.roundDownToPowerOf2(125)); assertEquals(16384, MathUtils.roundDownToPowerOf2(25654)); assertEquals(33554432, MathUtils.roundDownToPowerOf2(34366363)); assertEquals(33554432, MathUtils.roundDownToPowerOf2(63463463)); assertEquals(1073741824, MathUtils.roundDownToPowerOf2(1852987883)); assertEquals(1073741824, MathUtils.roundDownToPowerOf2(Integer.MAX_VALUE)); } }