tor-browser

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

entropy_coder_test.cc (1853B)


      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 // TODO(deymo): Move these tests to dec_ans.h and common.h
      7 
      8 #include <stdint.h>
      9 
     10 #include "lib/jxl/base/random.h"
     11 #include "lib/jxl/dec_ans.h"
     12 #include "lib/jxl/pack_signed.h"
     13 #include "lib/jxl/testing.h"
     14 
     15 namespace jxl {
     16 namespace {
     17 
     18 TEST(EntropyCoderTest, PackUnpack) {
     19  for (int32_t i = -31; i < 32; ++i) {
     20    uint32_t packed = PackSigned(i);
     21    EXPECT_LT(packed, 63u);
     22    int32_t unpacked = UnpackSigned(packed);
     23    EXPECT_EQ(i, unpacked);
     24  }
     25 }
     26 
     27 struct MockBitReader {
     28  uint32_t nbits, bits;
     29  void Consume(uint32_t nbits) {}
     30  uint32_t PeekBits(uint32_t n) const {
     31    EXPECT_EQ(n, nbits);
     32    return bits;
     33  }
     34 };
     35 
     36 void HybridUintRoundtrip(HybridUintConfig config, size_t limit = 1 << 24) {
     37  Rng rng(0);
     38  constexpr size_t kNumIntegers = 1 << 20;
     39  std::vector<uint32_t> integers(kNumIntegers);
     40  std::vector<uint32_t> token(kNumIntegers);
     41  std::vector<uint32_t> nbits(kNumIntegers);
     42  std::vector<uint32_t> bits(kNumIntegers);
     43  for (size_t i = 0; i < kNumIntegers; i++) {
     44    integers[i] = rng.UniformU(0, limit + 1);
     45    config.Encode(integers[i], &token[i], &nbits[i], &bits[i]);
     46  }
     47  for (size_t i = 0; i < kNumIntegers; i++) {
     48    MockBitReader br{nbits[i], bits[i]};
     49    EXPECT_EQ(integers[i],
     50              ANSSymbolReader::ReadHybridUintConfig(config, token[i], &br));
     51  }
     52 }
     53 
     54 TEST(HybridUintTest, Test000) {
     55  HybridUintRoundtrip(HybridUintConfig{0, 0, 0});
     56 }
     57 TEST(HybridUintTest, Test411) {
     58  HybridUintRoundtrip(HybridUintConfig{4, 1, 1});
     59 }
     60 TEST(HybridUintTest, Test420) {
     61  HybridUintRoundtrip(HybridUintConfig{4, 2, 0});
     62 }
     63 TEST(HybridUintTest, Test421) {
     64  HybridUintRoundtrip(HybridUintConfig{4, 2, 1}, 256);
     65 }
     66 
     67 }  // namespace
     68 }  // namespace jxl