mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
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:
57
coding/coding_tests/file_sort_test.cpp
Normal file
57
coding/coding_tests/file_sort_test.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
#include "testing/testing.hpp"
|
||||
|
||||
#include "coding/file_sort.hpp"
|
||||
#include "coding/write_to_sink.hpp"
|
||||
#include "coding/reader.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <random>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace
|
||||
{
|
||||
void TestFileSorter(vector<uint32_t> & data, char const * tmpFileName, size_t bufferSize)
|
||||
{
|
||||
vector<char> serial;
|
||||
typedef MemWriter<vector<char> > MemWriterType;
|
||||
MemWriterType writer(serial);
|
||||
typedef WriterFunctor<MemWriterType> OutT;
|
||||
OutT out(writer);
|
||||
FileSorter<uint32_t, OutT> sorter(bufferSize, tmpFileName, out);
|
||||
for (size_t i = 0; i < data.size(); ++i)
|
||||
sorter.Add(data[i]);
|
||||
sorter.SortAndFinish();
|
||||
|
||||
TEST_EQUAL(serial.size(), data.size() * sizeof(data[0]), ());
|
||||
sort(data.begin(), data.end());
|
||||
MemReader reader(&serial[0], serial.size());
|
||||
TEST_EQUAL(reader.Size(), data.size() * sizeof(data[0]), ());
|
||||
vector<uint32_t> result(data.size());
|
||||
reader.Read(0, &result[0], reader.Size());
|
||||
TEST_EQUAL(result, data, ());
|
||||
}
|
||||
}
|
||||
|
||||
UNIT_TEST(FileSorter_Smoke)
|
||||
{
|
||||
vector<uint32_t> data;
|
||||
data.push_back(2);
|
||||
data.push_back(3);
|
||||
data.push_back(1);
|
||||
|
||||
TestFileSorter(data, "file_sorter_test_smoke.tmp", 10);
|
||||
}
|
||||
|
||||
UNIT_TEST(FileSorter_Random)
|
||||
{
|
||||
mt19937 rng(0);
|
||||
vector<uint32_t> data(1000);
|
||||
for (size_t i = 0; i < data.size(); ++i)
|
||||
data[i] = ((i + 1 % 100) ? rng() : data[i - 20]);
|
||||
|
||||
TestFileSorter(data, "file_sorter_test_random.tmp", data.size() / 10);
|
||||
}
|
||||
Reference in New Issue
Block a user