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

index_builder_test.cpp « indexer_tests « indexer - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a4a7c8702710e39c4faab60126df67300c78656e (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "../../testing/testing.hpp"

#include "../index.hpp"
#include "../index_builder.hpp"
#include "../classif_routine.hpp"
#include "../features_vector.hpp"
#include "../../defines.hpp"
#include "../../platform/platform.hpp"
#include "../../coding/file_container.hpp"
#include "../../base/stl_add.hpp"


UNIT_TEST(BuildIndexTest)
{
  Platform & p = GetPlatform();
  classificator::Read(p.ReadPathForFile("drawing_rules.bin"),
                      p.ReadPathForFile("classificator.txt"),
                      p.ReadPathForFile("visibility.txt"));

  FilesContainerR originalContainer(p.WritablePathForFile("minsk-pass" DATA_FILE_EXTENSION));

  // Build index.
  vector<char> serialIndex;
  {
    FeaturesVector featuresVector(originalContainer);
    MemWriter<vector<char> > serialWriter(serialIndex);
    indexer::BuildIndex(ScaleIndexBase::NUM_BUCKETS, featuresVector, serialWriter, "build_index_test");
  }

  // Create a new mwm file.
  string const fileName = "build_index_test" DATA_FILE_EXTENSION;
  FileWriter::DeleteFileX(fileName);

  // Copy original mwm file and replace index in it.
  {
    FilesContainerW containerWriter(fileName);
    vector<string> tags;
    originalContainer.ForEachTag(MakeBackInsertFunctor(tags));
    for (size_t i = 0; i < tags.size(); ++i)
    {
      if (tags[i] != INDEX_FILE_TAG)
      {
        FileReader reader = originalContainer.GetReader(tags[i]);
        size_t const sz = static_cast<size_t>(reader.Size());
        if (sz > 0)
        {
          vector<char> data(sz);
          reader.Read(0, &data[0], sz);
          containerWriter.Append(data, tags[i]);
        }
      }
    }
    containerWriter.Append(serialIndex, INDEX_FILE_TAG);
  }

  {
    // Check that index actually works.
    Index<FileReader>::Type index;
    index.Add(fileName);

    // Make sure that index is actually parsed.
    index.ForEachInScale(NoopFunctor(), 15);
  }

  // Clean after the test.
  FileWriter::DeleteFileX(fileName);
}