aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/binsaver/ut_util
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/binsaver/ut_util
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/binsaver/ut_util')
-rw-r--r--library/cpp/binsaver/ut_util/README.md1
-rw-r--r--library/cpp/binsaver/ut_util/ut_util.cpp1
-rw-r--r--library/cpp/binsaver/ut_util/ut_util.h71
-rw-r--r--library/cpp/binsaver/ut_util/ya.make14
4 files changed, 87 insertions, 0 deletions
diff --git a/library/cpp/binsaver/ut_util/README.md b/library/cpp/binsaver/ut_util/README.md
new file mode 100644
index 0000000000..41641cd1e1
--- /dev/null
+++ b/library/cpp/binsaver/ut_util/README.md
@@ -0,0 +1 @@
+Library for testing BinSaver serialization. \ No newline at end of file
diff --git a/library/cpp/binsaver/ut_util/ut_util.cpp b/library/cpp/binsaver/ut_util/ut_util.cpp
new file mode 100644
index 0000000000..4cd8daa931
--- /dev/null
+++ b/library/cpp/binsaver/ut_util/ut_util.cpp
@@ -0,0 +1 @@
+#include "ut_util.h"
diff --git a/library/cpp/binsaver/ut_util/ut_util.h b/library/cpp/binsaver/ut_util/ut_util.h
new file mode 100644
index 0000000000..52e7bcf8e1
--- /dev/null
+++ b/library/cpp/binsaver/ut_util/ut_util.h
@@ -0,0 +1,71 @@
+#pragma once
+
+#include <library/cpp/binsaver/bin_saver.h>
+#include <library/cpp/binsaver/mem_io.h>
+#include <library/cpp/binsaver/util_stream_io.h>
+
+#include <library/cpp/testing/unittest/registar.h>
+
+#include <util/generic/vector.h>
+#include <util/stream/buffer.h>
+
+#include <functional>
+
+
+/* comparerChecksInside == true means comparer uses UNIT_ASSERT... inside itself
+ * comparerChecksInside == false means comparer returns if its arguments are equal
+ */
+
+template <class T, class TComparer = std::equal_to<T>, bool comparerChecksInside = false>
+void UnitTestCheckWithComparer(const T& lhs, const T& rhs, const TComparer& comparer) {
+ if constexpr (comparerChecksInside) {
+ comparer(lhs, rhs);
+ } else {
+ UNIT_ASSERT(comparer(lhs, rhs));
+ }
+}
+
+
+/* comparerChecksInside == true means comparer uses UNIT_ASSERT... inside itself
+ * comparerChecksInside == false means comparer returns true if its arguments are equal
+ */
+
+template <typename T, typename TComparer = std::equal_to<T>, bool comparerChecksInside = false>
+void TestBinSaverSerializationToBuffer(const T& original, const TComparer& comparer = TComparer()) {
+ TBufferOutput out;
+ {
+ TYaStreamOutput yaOut(out);
+
+ IBinSaver f(yaOut, false, false);
+ f.Add(0, const_cast<T*>(&original));
+ }
+ TBufferInput in(out.Buffer());
+ T restored;
+ {
+ TYaStreamInput yaIn(in);
+ IBinSaver f(yaIn, true, false);
+ f.Add(0, &restored);
+ }
+ UnitTestCheckWithComparer<T, TComparer, comparerChecksInside>(original, restored, comparer);
+}
+
+template <typename T, typename TComparer = std::equal_to<T>, bool comparerChecksInside = false>
+void TestBinSaverSerializationToVector(const T& original, const TComparer& comparer = TComparer()) {
+ TVector<char> out;
+ SerializeToMem(&out, *const_cast<T*>(&original));
+ T restored;
+ SerializeFromMem(&out, restored);
+ UnitTestCheckWithComparer<T, TComparer, comparerChecksInside>(original, restored, comparer);
+
+ TVector<TVector<char>> out2D;
+ SerializeToMem(&out2D, *const_cast<T*>(&original));
+ T restored2D;
+ SerializeFromMem(&out2D, restored2D);
+ UnitTestCheckWithComparer<T, TComparer, comparerChecksInside>(original, restored2D, comparer);
+}
+
+template <typename T, typename TComparer = std::equal_to<T>, bool comparerChecksInside = false>
+void TestBinSaverSerialization(const T& original, const TComparer& comparer = TComparer()) {
+ TestBinSaverSerializationToBuffer<T, TComparer, comparerChecksInside>(original, comparer);
+ TestBinSaverSerializationToVector<T, TComparer, comparerChecksInside>(original, comparer);
+}
diff --git a/library/cpp/binsaver/ut_util/ya.make b/library/cpp/binsaver/ut_util/ya.make
new file mode 100644
index 0000000000..7e60f13ef3
--- /dev/null
+++ b/library/cpp/binsaver/ut_util/ya.make
@@ -0,0 +1,14 @@
+LIBRARY()
+
+OWNER(gulin)
+
+SRCS(
+ ut_util.cpp
+)
+
+PEERDIR(
+ library/cpp/binsaver
+ library/cpp/testing/unittest
+)
+
+END()