/* * Copyright 2009, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // This file contains the unit tests for the bit utilities. #include "base/cross/bits.h" #include "tests/common/win/testing_common.h" namespace o3d { namespace base { namespace bits { TEST(Bits, TestLog2Floor) { EXPECT_EQ(-1, Log2Floor(0)); EXPECT_EQ(0, Log2Floor(1)); EXPECT_EQ(1, Log2Floor(2)); EXPECT_EQ(1, Log2Floor(3)); EXPECT_EQ(2, Log2Floor(4)); for (unsigned int i = 3; i < 31; ++i) { unsigned int value = 1U << i; EXPECT_EQ(i, Log2Floor(value)); EXPECT_EQ(i, Log2Floor(value + 1)); EXPECT_EQ(i, Log2Floor(value + 2)); EXPECT_EQ(i - 1, Log2Floor(value - 1)); EXPECT_EQ(i - 1, Log2Floor(value - 2)); } EXPECT_EQ(31, Log2Floor(0xffffffffU)); } TEST(Bits, TestLog2Ceiling) { EXPECT_EQ(-1, Log2Ceiling(0)); EXPECT_EQ(0, Log2Ceiling(1)); EXPECT_EQ(1, Log2Ceiling(2)); EXPECT_EQ(2, Log2Ceiling(3)); EXPECT_EQ(2, Log2Ceiling(4)); for (unsigned int i = 3; i < 31; ++i) { unsigned int value = 1U << i; EXPECT_EQ(i, Log2Ceiling(value)); EXPECT_EQ(i + 1, Log2Ceiling(value + 1)); EXPECT_EQ(i + 1, Log2Ceiling(value + 2)); EXPECT_EQ(i, Log2Ceiling(value - 1)); EXPECT_EQ(i, Log2Ceiling(value - 2)); } EXPECT_EQ(32, Log2Ceiling(0xffffffffU)); } } // namespace bits } // namespace base } // namespace o3d