Organic Maps sources as of 02.04.2025 (fad26bbf22ac3da75e01e62aa01e5c8e11861005)

To expand with full Organic Maps and Maps.ME commits history run:
  git remote add om-historic [om-historic.git repo url]
  git fetch --tags om-historic
  git replace squashed-history historic-commits
This commit is contained in:
Konstantin Pastbin
2025-04-13 16:37:30 +07:00
commit e3e4a1985a
12931 changed files with 13195100 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
#include "testing/testing.hpp"
#include "coding/bwt_coder.hpp"
#include "coding/reader.hpp"
#include "coding/writer.hpp"
#include <algorithm>
#include <iterator>
#include <random>
#include <string>
using namespace coding;
using namespace std;
namespace
{
string EncodeDecode(BWTCoder::Params const & params, string const & s)
{
vector<uint8_t> data;
{
MemWriter<decltype(data)> sink(data);
BWTCoder::EncodeAndWrite(params, sink, s.size(), reinterpret_cast<uint8_t const *>(s.data()));
}
string result;
{
MemReader reader(data.data(), data.size());
ReaderSource<MemReader> source(reader);
BWTCoder::ReadAndDecode(source, back_inserter(result));
}
return result;
}
string EncodeDecodeBlock(string const & s)
{
vector<uint8_t> data;
{
MemWriter<decltype(data)> sink(data);
BWTCoder::EncodeAndWriteBlock(sink, s.size(), reinterpret_cast<uint8_t const *>(s.data()));
}
string result;
{
MemReader reader(data.data(), data.size());
ReaderSource<MemReader> source(reader);
auto const buffer = BWTCoder::ReadAndDecodeBlock(source);
result.assign(buffer.begin(), buffer.end());
}
return result;
}
UNIT_TEST(BWTEncoder_Smoke)
{
for (size_t blockSize = 1; blockSize < 100; ++blockSize)
{
BWTCoder::Params params;
params.m_blockSize = blockSize;
string const s = "abracadabra";
TEST_EQUAL(s, EncodeDecodeBlock(s), ());
TEST_EQUAL(s, EncodeDecode(params, s), (blockSize));
}
string const strings[] = {"", "mississippi", "again and again and again"};
for (auto const & s : strings)
{
TEST_EQUAL(s, EncodeDecodeBlock(s), ());
TEST_EQUAL(s, EncodeDecode(BWTCoder::Params{}, s), ());
}
}
UNIT_TEST(BWT_Large)
{
string s;
for (size_t i = 0; i < 10000; ++i)
s += "mississippi";
TEST_EQUAL(s, EncodeDecode(BWTCoder::Params{}, s), ());
}
UNIT_TEST(BWT_AllBytes)
{
int kSeed = 42;
int kMin = 1;
int kMax = 1000;
mt19937 engine(kSeed);
uniform_int_distribution<int> uid(kMin, kMax);
string s;
for (size_t i = 0; i < 256; ++i)
{
auto const count = uid(engine);
ASSERT_GREATER_OR_EQUAL(count, kMin, ());
ASSERT_LESS_OR_EQUAL(count, kMax, ());
for (int j = 0; j < count; ++j)
s.push_back(static_cast<uint8_t>(i));
}
shuffle(s.begin(), s.end(), engine);
TEST_EQUAL(s, EncodeDecode(BWTCoder::Params{}, s), ());
}
} // namespace