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

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'coding/coding_tests/bwt_coder_tests.cpp')
-rw-r--r--coding/coding_tests/bwt_coder_tests.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/coding/coding_tests/bwt_coder_tests.cpp b/coding/coding_tests/bwt_coder_tests.cpp
new file mode 100644
index 0000000000..28965a54e9
--- /dev/null
+++ b/coding/coding_tests/bwt_coder_tests.cpp
@@ -0,0 +1,82 @@
+#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;
+}
+
+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, EncodeDecode(params, s), (blockSize));
+ }
+
+ string const strings[] = {"", "mississippi", "again and again and again"};
+ for (auto const & s : strings)
+ 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