Welcome to mirror list, hosted at ThFree Co, Russian Federation.

file_sort_test.cpp « coding_tests « coding - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 51f75f28bfd69c1a28506eacde757c80c02b0733 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "testing/testing.hpp"

#include "coding/file_sort.hpp"
#include "coding/write_to_sink.hpp"
#include "coding/reader.hpp"

#include "std/random.hpp"

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);
}