1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This file contains the unit tests for the bit utilities.
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/bits.h"
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "testing/gtest/include/gtest/gtest.h"
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace base {
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace bits {
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(BitsTest, Log2Floor) {
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(-1, Log2Floor(0));
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0, Log2Floor(1));
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(1, Log2Floor(2));
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(1, Log2Floor(3));
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(2, Log2Floor(4));
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  for (int i = 3; i < 31; ++i) {
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    unsigned int value = 1U << i;
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(i, Log2Floor(value));
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(i, Log2Floor(value + 1));
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(i, Log2Floor(value + 2));
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(i - 1, Log2Floor(value - 1));
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(i - 1, Log2Floor(value - 2));
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(31, Log2Floor(0xffffffffU));
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(BitsTest, Log2Ceiling) {
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(-1, Log2Ceiling(0));
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0, Log2Ceiling(1));
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(1, Log2Ceiling(2));
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(2, Log2Ceiling(3));
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(2, Log2Ceiling(4));
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  for (int i = 3; i < 31; ++i) {
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    unsigned int value = 1U << i;
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(i, Log2Ceiling(value));
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(i + 1, Log2Ceiling(value + 1));
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(i + 1, Log2Ceiling(value + 2));
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(i, Log2Ceiling(value - 1));
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(i, Log2Ceiling(value - 2));
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(32, Log2Ceiling(0xffffffffU));
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace bits
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace base
49