libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

entropy_coder_test.cc (1847B)


      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) {
     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