/
renath
/
organicmaps
Обзор
Документация
Войти
/
renath
/
organicmaps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
libs/coding/coding_tests/elias_coder_test.cpp
62 строки
1 KB
Alexander Borsuk
clang-format
24 июл 2025, 15:48
24 июл 2025, 15:48
15b66d5
Код
Авторство
О чём код?
#include "testing/testing.hpp" #include "coding/bit_streams.hpp" #include "coding/elias_coder.hpp" #include "coding/reader.hpp" #include "coding/writer.hpp" #include "base/bits.hpp" #include <cstdint> #include <string> #include <vector> namespace { template <typename TCoder> void TestCoder(std::string const & name) { using TBuffer = std::vector<uint8_t>; using TWriter = MemWriter<TBuffer>; uint64_t const kMask = 0xfedcba9876543210; TBuffer buf; { TWriter w(buf); BitWriter<TWriter> bits(w); for (int i = 0; i <= 64; ++i) { uint64_t const mask = bits::GetFullMask(i); uint64_t const value = kMask & mask; if (value == 0) TEST(!TCoder::Encode(bits, value), (name, i)); else TEST(TCoder::Encode(bits, value), (name, i)); } } { MemReader r(buf.data(), buf.size()); ReaderSource<MemReader> src(r); BitReader<ReaderSource<MemReader>> bits(src); for (int i = 0; i <= 64; ++i) { uint64_t const mask = bits::GetFullMask(i); uint64_t const expected = kMask & mask; if (expected == 0) continue; TEST_EQUAL(expected, TCoder::Decode(bits), (name, i)); } } } UNIT_TEST(EliasCoder_Gamma) { TestCoder<coding::GammaCoder>("Gamma"); } UNIT_TEST(EliasCoder_Delta) { TestCoder<coding::DeltaCoder>("Delta"); } } // namespace