tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

bits_test.cc (3087B)


      1 // Copyright (c) the JPEG XL Project Authors. All rights reserved.
      2 //
      3 // Use of this source code is governed by a BSD-style
      4 // license that can be found in the LICENSE file.
      5 
      6 #include "lib/jxl/base/bits.h"
      7 
      8 #include <cstddef>
      9 #include <cstdint>
     10 
     11 #include "lib/jxl/testing.h"
     12 
     13 namespace jxl {
     14 namespace {
     15 
     16 TEST(BitsTest, TestNumZeroBits) {
     17  // Zero input is well-defined.
     18  EXPECT_EQ(32u, Num0BitsAboveMS1Bit(0u));
     19  EXPECT_EQ(64u, Num0BitsAboveMS1Bit(0ull));
     20  EXPECT_EQ(32u, Num0BitsBelowLS1Bit(0u));
     21  EXPECT_EQ(64u, Num0BitsBelowLS1Bit(0ull));
     22 
     23  EXPECT_EQ(31u, Num0BitsAboveMS1Bit(1u));
     24  EXPECT_EQ(30u, Num0BitsAboveMS1Bit(2u));
     25  EXPECT_EQ(63u, Num0BitsAboveMS1Bit(1ull));
     26  EXPECT_EQ(62u, Num0BitsAboveMS1Bit(2ull));
     27 
     28  EXPECT_EQ(0u, Num0BitsBelowLS1Bit(1u));
     29  EXPECT_EQ(0u, Num0BitsBelowLS1Bit(1ull));
     30  EXPECT_EQ(1u, Num0BitsBelowLS1Bit(2u));
     31  EXPECT_EQ(1u, Num0BitsBelowLS1Bit(2ull));
     32 
     33  EXPECT_EQ(0u, Num0BitsAboveMS1Bit(0x80000000u));
     34  EXPECT_EQ(0u, Num0BitsAboveMS1Bit(0x8000000000000000ull));
     35  EXPECT_EQ(31u, Num0BitsBelowLS1Bit(0x80000000u));
     36  EXPECT_EQ(63u, Num0BitsBelowLS1Bit(0x8000000000000000ull));
     37 }
     38 
     39 TEST(BitsTest, TestFloorLog2) {
     40  // for input = [1, 7]
     41  const size_t expected[7] = {0, 1, 1, 2, 2, 2, 2};
     42  for (uint32_t i = 1; i <= 7; ++i) {
     43    EXPECT_EQ(expected[i - 1], FloorLog2Nonzero(i)) << " " << i;
     44    EXPECT_EQ(expected[i - 1], FloorLog2Nonzero(static_cast<uint64_t>(i)))
     45        << " " << i;
     46  }
     47 
     48  EXPECT_EQ(11u, FloorLog2Nonzero(0x00000fffu));  // 4095
     49  EXPECT_EQ(12u, FloorLog2Nonzero(0x00001000u));  // 4096
     50  EXPECT_EQ(12u, FloorLog2Nonzero(0x00001001u));  // 4097
     51 
     52  EXPECT_EQ(31u, FloorLog2Nonzero(0x80000000u));
     53  EXPECT_EQ(31u, FloorLog2Nonzero(0x80000001u));
     54  EXPECT_EQ(31u, FloorLog2Nonzero(0xFFFFFFFFu));
     55 
     56  EXPECT_EQ(31u, FloorLog2Nonzero(0x80000000ull));
     57  EXPECT_EQ(31u, FloorLog2Nonzero(0x80000001ull));
     58  EXPECT_EQ(31u, FloorLog2Nonzero(0xFFFFFFFFull));
     59 
     60  EXPECT_EQ(63u, FloorLog2Nonzero(0x8000000000000000ull));
     61  EXPECT_EQ(63u, FloorLog2Nonzero(0x8000000000000001ull));
     62  EXPECT_EQ(63u, FloorLog2Nonzero(0xFFFFFFFFFFFFFFFFull));
     63 }
     64 
     65 TEST(BitsTest, TestCeilLog2) {
     66  // for input = [1, 7]
     67  const size_t expected[7] = {0, 1, 2, 2, 3, 3, 3};
     68  for (uint32_t i = 1; i <= 7; ++i) {
     69    EXPECT_EQ(expected[i - 1], CeilLog2Nonzero(i)) << " " << i;
     70    EXPECT_EQ(expected[i - 1], CeilLog2Nonzero(static_cast<uint64_t>(i)))
     71        << " " << i;
     72  }
     73 
     74  EXPECT_EQ(12u, CeilLog2Nonzero(0x00000fffu));  // 4095
     75  EXPECT_EQ(12u, CeilLog2Nonzero(0x00001000u));  // 4096
     76  EXPECT_EQ(13u, CeilLog2Nonzero(0x00001001u));  // 4097
     77 
     78  EXPECT_EQ(31u, CeilLog2Nonzero(0x80000000u));
     79  EXPECT_EQ(32u, CeilLog2Nonzero(0x80000001u));
     80  EXPECT_EQ(32u, CeilLog2Nonzero(0xFFFFFFFFu));
     81 
     82  EXPECT_EQ(31u, CeilLog2Nonzero(0x80000000ull));
     83  EXPECT_EQ(32u, CeilLog2Nonzero(0x80000001ull));
     84  EXPECT_EQ(32u, CeilLog2Nonzero(0xFFFFFFFFull));
     85 
     86  EXPECT_EQ(63u, CeilLog2Nonzero(0x8000000000000000ull));
     87  EXPECT_EQ(64u, CeilLog2Nonzero(0x8000000000000001ull));
     88  EXPECT_EQ(64u, CeilLog2Nonzero(0xFFFFFFFFFFFFFFFFull));
     89 }
     90 
     91 }  // namespace
     92 }  // namespace jxl