diff options
author | Yuri Gorshenin <y@maps.me> | 2017-06-20 16:11:46 +0300 |
---|---|---|
committer | Yuri Gorshenin <mipt.vi002@gmail.com> | 2017-07-05 16:41:38 +0300 |
commit | f30a26682dea84584e6865890934cba7755d09c9 (patch) | |
tree | eb84755e68c5882bbc2632f54f5ced8d9a2a7f98 /ugc/ugc_tests | |
parent | f5bdec0ba48a300b4c5718da3fbbc932531ffb09 (diff) |
[ugc] Basic SerDes.
Diffstat (limited to 'ugc/ugc_tests')
-rw-r--r-- | ugc/ugc_tests/CMakeLists.txt | 10 | ||||
-rw-r--r-- | ugc/ugc_tests/serdes_tests.cpp | 117 |
2 files changed, 127 insertions, 0 deletions
diff --git a/ugc/ugc_tests/CMakeLists.txt b/ugc/ugc_tests/CMakeLists.txt new file mode 100644 index 0000000000..6156b432cd --- /dev/null +++ b/ugc/ugc_tests/CMakeLists.txt @@ -0,0 +1,10 @@ +project(ugc_tests) + +set( + SRC + serdes_tests.cpp +) + +omim_add_test(${PROJECT_NAME} ${SRC}) +omim_link_libraries(${PROJECT_NAME} platform coding geometry base) +link_qt5_core(${PROJECT_NAME}) diff --git a/ugc/ugc_tests/serdes_tests.cpp b/ugc/ugc_tests/serdes_tests.cpp new file mode 100644 index 0000000000..5e13420555 --- /dev/null +++ b/ugc/ugc_tests/serdes_tests.cpp @@ -0,0 +1,117 @@ +#include "testing/testing.hpp" + +#include "ugc/serdes.hpp" +#include "ugc/types.hpp" + +#include "coding/reader.hpp" +#include "coding/writer.hpp" + +#include <chrono> +#include <cstdint> +#include <vector> + +using namespace std; +using namespace ugc; + +namespace +{ +using Buffer = vector<uint8_t>; +using Ser = Serializer<MemWriter<Buffer>>; +using Des = DeserializerV0<ReaderSource<MemReader>>; + +chrono::hours FromDays(uint32_t days) +{ + return std::chrono::hours(days * 24); +} + +Rating GetTestRating() +{ + vector<RatingRecord> records; + records.emplace_back("music" /* key */, 5.0 /* value */); + records.emplace_back("service" /* key */, 4.0 /* value */); + + return Rating(records, 4.5 /* aggValue */); +} + +UGC GetTestUGC() +{ + Rating rating; + rating.m_ratings.emplace_back("food" /* key */, 4.0 /* value */); + rating.m_ratings.emplace_back("service" /* key */, 5.0 /* value */); + rating.m_ratings.emplace_back("music" /* key */, 5.0 /* value */); + rating.m_aggValue = 4.5; + + vector<Review> reviews; + reviews.emplace_back(20 /* id */, Text("Damn good coffee", StringUtf8Multilang::kEnglishCode), + Author(UID(987654321 /* hi */, 123456789 /* lo */), "Cole"), + 5.0 /* rating */, Review::Sentiment::Positive, + Review::Time(FromDays(10))); + reviews.emplace_back(67812 /* id */, + Text("Clean place, reasonably priced", StringUtf8Multilang::kDefaultCode), + Author(UID(0 /* hi */, 315 /* lo */), "Cooper"), 5.0 /* rating */, + Review::Sentiment::Positive, Review::Time(FromDays(1))); + + vector<Attribute> attributes; + attributes.emplace_back("best-drink", "Coffee"); + + return UGC(rating, reviews, attributes); +} + +MemWriter<Buffer> MakeSink(Buffer & buffer) +{ + return MemWriter<Buffer>(buffer); +} + +ReaderSource<MemReader> MakeSource(Buffer const & buffer) +{ + MemReader reader(buffer.data(), buffer.size()); + return ReaderSource<MemReader>(reader); +} + +UNIT_TEST(SerDes_Rating) +{ + auto const expectedRating = GetTestRating(); + TEST_EQUAL(expectedRating, expectedRating, ()); + + HeaderV0 header; + + Buffer buffer; + + { + auto sink = MakeSink(buffer); + Ser(sink, header)(expectedRating); + } + + Rating actualRating({} /* ratings */, {} /* aggValue */); + + { + auto source = MakeSource(buffer); + Des(source, header)(actualRating); + } + + TEST_EQUAL(expectedRating, actualRating, ()); +} + +UNIT_TEST(SerDes_UGC) +{ + auto const expectedUGC = GetTestUGC(); + TEST_EQUAL(expectedUGC, expectedUGC, ()); + + HeaderV0 header; + + Buffer buffer; + + { + auto sink = MakeSink(buffer); + Ser(sink, header)(expectedUGC); + } + + UGC actualUGC({} /* rating */, {} /* reviews */, {} /* attributes */); + { + auto source = MakeSource(buffer); + Des(source, header)(actualUGC); + } + + TEST_EQUAL(expectedUGC, actualUGC, ()); +} +} // namespace |