aboutsummaryrefslogtreecommitdiffstats
path: root/library
diff options
context:
space:
mode:
authorepar <epar@yandex-team.ru>2022-02-10 16:50:02 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:50:02 +0300
commit5787a7ada46a9bc3f730ce62b840338025f911d9 (patch)
tree5d5cb817648f650d76cf1076100726fd9b8448e8 /library
parent904f1af50fdd9aae658a7b5688b5a497044c4584 (diff)
downloadydb-5787a7ada46a9bc3f730ce62b840338025f911d9.tar.gz
Restoring authorship annotation for <epar@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library')
-rw-r--r--library/cpp/scheme/scheme.h18
-rw-r--r--library/cpp/scheme/scheme_cast.h466
-rw-r--r--library/cpp/scheme/scimpl.h6
-rw-r--r--library/cpp/scheme/tests/ut/scheme_cast_ut.cpp224
4 files changed, 357 insertions, 357 deletions
diff --git a/library/cpp/scheme/scheme.h b/library/cpp/scheme/scheme.h
index 47cbb354c4..3d7c59f3c9 100644
--- a/library/cpp/scheme/scheme.h
+++ b/library/cpp/scheme/scheme.h
@@ -91,14 +91,14 @@ namespace NSc {
inline TValue& operator=(TStringBuf t);
inline TValue& operator=(const char* t);
- inline TValue& operator=(TValue& v) &;
- inline TValue& operator=(const TValue& v) &;
- inline TValue& operator=(TValue&& v) & noexcept;
-
- inline TValue& operator=(TValue& v) && = delete;
- inline TValue& operator=(const TValue& v) && = delete;
- inline TValue& operator=(TValue&& v) && = delete;
-
+ inline TValue& operator=(TValue& v) &;
+ inline TValue& operator=(const TValue& v) &;
+ inline TValue& operator=(TValue&& v) & noexcept;
+
+ inline TValue& operator=(TValue& v) && = delete;
+ inline TValue& operator=(const TValue& v) && = delete;
+ inline TValue& operator=(TValue&& v) && = delete;
+
public:
template <class T> // ui16 or TStringBuf
inline TValue& operator[](const T& idx) {
@@ -531,7 +531,7 @@ namespace NSc {
}
#include "scimpl.h"
-#include "scheme_cast.h"
+#include "scheme_cast.h"
#ifdef _MSC_VER
#pragma warning(default : 4521 4522)
diff --git a/library/cpp/scheme/scheme_cast.h b/library/cpp/scheme/scheme_cast.h
index 083123b38d..00839e8017 100644
--- a/library/cpp/scheme/scheme_cast.h
+++ b/library/cpp/scheme/scheme_cast.h
@@ -1,321 +1,321 @@
-#pragma once
-
-#include <util/generic/set.h>
-#include <util/generic/vector.h>
-#include <util/generic/map.h>
-#include <util/generic/hash.h>
-#include <util/generic/hash_set.h>
-#include <util/string/cast.h>
-#include <util/generic/yexception.h>
-
+#pragma once
+
+#include <util/generic/set.h>
+#include <util/generic/vector.h>
+#include <util/generic/map.h>
+#include <util/generic/hash.h>
+#include <util/generic/hash_set.h>
+#include <util/string/cast.h>
+#include <util/generic/yexception.h>
+
#include "scheme.h"
-
-namespace NJsonConverters {
- class IJsonSerializable {
+
+namespace NJsonConverters {
+ class IJsonSerializable {
public:
virtual NSc::TValue ToTValue() const = 0;
virtual void FromTValue(const NSc::TValue&, const bool validate) = 0;
-
+
const TString ToJson(const bool sort = false) const {
return ToTValue().ToJson(sort);
};
-
+
void FromJson(const TStringBuf& json, const bool validate = false) {
NSc::TValue v = NSc::TValue::FromJson(json);
FromTValue(v, validate);
}
-
+
virtual ~IJsonSerializable(){};
- };
+ };
//////////////////////////////////////////////////////////////////////
// fwd declarations
//////////////////////////////////////////////////////////////////////
-
+
//TVector
- template <typename T, typename A>
+ template <typename T, typename A>
NSc::TValue ToTValue(const TVector<T, A>& x);
- template <typename T, typename A>
+ template <typename T, typename A>
void FromTValue(const NSc::TValue& x, TVector<T, A>& out, const bool validate);
-
+
//THashMap
- template <class Key, class T, class HashFcn, class EqualKey, class Alloc>
+ template <class Key, class T, class HashFcn, class EqualKey, class Alloc>
NSc::TValue ToTValue(const THashMap<Key, T, HashFcn, EqualKey, Alloc>& x);
- template <class Key, class T, class HashFcn, class EqualKey, class Alloc>
+ template <class Key, class T, class HashFcn, class EqualKey, class Alloc>
void FromTValue(const NSc::TValue& x, THashMap<Key, T, HashFcn, EqualKey, Alloc>& out, const bool validate);
-
+
//TMap
- template <class K, class V, class Less, class A>
+ template <class K, class V, class Less, class A>
NSc::TValue ToTValue(const TMap<K, V, Less, A>& x);
- template <class K, class V, class Less, class A>
+ template <class K, class V, class Less, class A>
void FromTValue(const NSc::TValue& x, TMap<K, V, Less, A>& out, const bool validate);
-
+
//THashSet
- template <class V, class H, class E, class A>
+ template <class V, class H, class E, class A>
NSc::TValue ToTValue(const THashSet<V, H, E, A>& x);
- template <class V, class H, class E, class A>
+ template <class V, class H, class E, class A>
void FromTValue(const NSc::TValue& x, THashSet<V, H, E, A>& out, const bool validate);
-
+
//TSet
- template <class K, class L, class A>
+ template <class K, class L, class A>
NSc::TValue ToTValue(const TSet<K, L, A>& x);
- template <class K, class L, class A>
+ template <class K, class L, class A>
void FromTValue(const NSc::TValue& x, TSet<K, L, A>& out, const bool validate);
-
+
//std::pair
- template <class T1, class T2>
+ template <class T1, class T2>
NSc::TValue ToTValue(const std::pair<T1, T2>& x);
- template <class T1, class T2>
+ template <class T1, class T2>
void FromTValue(const NSc::TValue& x, std::pair<T1, T2>& out, const bool validate);
-
+
//////////////////////////////////////////////////////////////////////
// simple From, To helpers
//////////////////////////////////////////////////////////////////////
template <typename T, bool HasSerializer>
- struct TValueAndStrokaConv {};
-
+ struct TValueAndStrokaConv {};
+
template <typename T>
- struct TValueAndStrokaConv<T, 0> {
- static NSc::TValue ToTValue(const T& x) {
- return NSc::TValue(x);
- }
-
- static void FromTValue(const NSc::TValue& x, T& out, const bool) {
- out = x;
- }
-
+ struct TValueAndStrokaConv<T, 0> {
+ static NSc::TValue ToTValue(const T& x) {
+ return NSc::TValue(x);
+ }
+
+ static void FromTValue(const NSc::TValue& x, T& out, const bool) {
+ out = x;
+ }
+
static TString ToString(const T& x) {
- return ::ToString(x);
- }
-
- static void FromString(const TStringBuf& str, T& res, const bool) {
- res = ::FromString<T>(str);
- }
- };
-
+ return ::ToString(x);
+ }
+
+ static void FromString(const TStringBuf& str, T& res, const bool) {
+ res = ::FromString<T>(str);
+ }
+ };
+
template <typename T>
struct TValueAndStrokaConv<T, 1> {
- static NSc::TValue ToTValue(const T& x) {
- return x.ToTValue();
- }
-
- static void FromTValue(const NSc::TValue& x, T& out, const bool validate) {
- out.FromTValue(x, validate);
- }
-
+ static NSc::TValue ToTValue(const T& x) {
+ return x.ToTValue();
+ }
+
+ static void FromTValue(const NSc::TValue& x, T& out, const bool validate) {
+ out.FromTValue(x, validate);
+ }
+
static TString ToString(const T& x) {
- return x.ToJson();
- }
-
- static void FromString(const TStringBuf& str, T& res, const bool validate) {
- res.FromJson(str, validate);
- }
- };
-
- template <typename T>
- NSc::TValue ToTValue(const T& x) {
+ return x.ToJson();
+ }
+
+ static void FromString(const TStringBuf& str, T& res, const bool validate) {
+ res.FromJson(str, validate);
+ }
+ };
+
+ template <typename T>
+ NSc::TValue ToTValue(const T& x) {
return TValueAndStrokaConv<T, std::is_base_of<IJsonSerializable, T>::value>::ToTValue(x);
- }
-
- template <typename T>
- void FromTValue(const NSc::TValue& x, T& out, const bool validate) {
+ }
+
+ template <typename T>
+ void FromTValue(const NSc::TValue& x, T& out, const bool validate) {
return TValueAndStrokaConv<T, std::is_base_of<IJsonSerializable, T>::value>::FromTValue(x, out, validate);
- }
-
- template <typename T>
- T FromTValue(const NSc::TValue& x, const bool validate) {
- T ret;
- FromTValue(x, ret, validate);
- return ret;
- }
-
- template <typename T>
+ }
+
+ template <typename T>
+ T FromTValue(const NSc::TValue& x, const bool validate) {
+ T ret;
+ FromTValue(x, ret, validate);
+ return ret;
+ }
+
+ template <typename T>
TString ToString(const T& x) {
return TValueAndStrokaConv<T, std::is_base_of<IJsonSerializable, T>::value>::ToString(x);
- }
-
- template <typename T>
- void FromString(const TStringBuf& str, T& res, const bool validate) {
+ }
+
+ template <typename T>
+ void FromString(const TStringBuf& str, T& res, const bool validate) {
return TValueAndStrokaConv<T, std::is_base_of<IJsonSerializable, T>::value>::FromString(str, res, validate);
- }
-
- template <typename T>
- T FromString(const TStringBuf& str, bool validate) {
- T ret;
- FromString(str, ret, validate);
- return ret;
- }
-
- namespace NPrivate {
- template <typename T>
- NSc::TValue ToTValueDict(const T& dict) {
- NSc::TValue out;
- out.SetDict();
- for (typename T::const_iterator it = dict.begin(); it != dict.end(); ++it) {
- out[ToString(it->first)] = NJsonConverters::ToTValue(it->second);
- }
- return out;
- }
-
- template <typename T>
- void FromTValueDict(const NSc::TValue& x, T& out, bool validate) {
- typedef typename T::key_type TKey;
- typedef typename T::mapped_type TMapped;
- if (validate)
+ }
+
+ template <typename T>
+ T FromString(const TStringBuf& str, bool validate) {
+ T ret;
+ FromString(str, ret, validate);
+ return ret;
+ }
+
+ namespace NPrivate {
+ template <typename T>
+ NSc::TValue ToTValueDict(const T& dict) {
+ NSc::TValue out;
+ out.SetDict();
+ for (typename T::const_iterator it = dict.begin(); it != dict.end(); ++it) {
+ out[ToString(it->first)] = NJsonConverters::ToTValue(it->second);
+ }
+ return out;
+ }
+
+ template <typename T>
+ void FromTValueDict(const NSc::TValue& x, T& out, bool validate) {
+ typedef typename T::key_type TKey;
+ typedef typename T::mapped_type TMapped;
+ if (validate)
Y_ENSURE(x.IsDict() || x.IsNull(), "not valid input scheme");
- out.clear();
- if (x.IsDict()) {
- const NSc::TDict& dict = x.GetDict();
+ out.clear();
+ if (x.IsDict()) {
+ const NSc::TDict& dict = x.GetDict();
for (const auto& it : dict) {
TKey key = NJsonConverters::FromString<TKey>(it.first, validate);
TMapped val = NJsonConverters::FromTValue<TMapped>(it.second, validate);
out.insert(std::pair<TKey, TMapped>(key, val));
- }
- }
- }
-
- template <typename T>
- NSc::TValue ToTValueSet(const T& set) {
- NSc::TValue out;
- out.SetDict();
- for (typename T::const_iterator it = set.begin(); it != set.end(); ++it) {
- out[ToString(*it)] = NSc::Null();
- }
- return out;
- }
-
- template <typename T>
- void FromTValueSet(const NSc::TValue& x, T& out, const bool validate) {
- typedef typename T::key_type TKey;
- if (validate)
+ }
+ }
+ }
+
+ template <typename T>
+ NSc::TValue ToTValueSet(const T& set) {
+ NSc::TValue out;
+ out.SetDict();
+ for (typename T::const_iterator it = set.begin(); it != set.end(); ++it) {
+ out[ToString(*it)] = NSc::Null();
+ }
+ return out;
+ }
+
+ template <typename T>
+ void FromTValueSet(const NSc::TValue& x, T& out, const bool validate) {
+ typedef typename T::key_type TKey;
+ if (validate)
Y_ENSURE(x.IsDict() || x.IsNull(), "not valid input scheme");
- out.clear();
- if (x.IsDict()) {
- const NSc::TDict& dict = x.GetDict();
+ out.clear();
+ if (x.IsDict()) {
+ const NSc::TDict& dict = x.GetDict();
for (const auto& it : dict) {
- TKey key;
+ TKey key;
NJsonConverters::FromString<TKey>(it.first, key, validate);
- out.insert(key);
- }
- }
- }
- }
-
+ out.insert(key);
+ }
+ }
+ }
+ }
+
//////////////////////////////////////////////////////////////////////
// TVector
//////////////////////////////////////////////////////////////////////
- template <typename T, typename A>
+ template <typename T, typename A>
NSc::TValue ToTValue(const TVector<T, A>& x) {
- NSc::TValue out;
- out.SetArray();
+ NSc::TValue out;
+ out.SetArray();
for (typename TVector<T, A>::const_iterator it = x.begin(); it != x.end(); ++it)
- out.Push(NJsonConverters::ToTValue(*it));
- return out;
- }
-
- template <typename T, typename A>
+ out.Push(NJsonConverters::ToTValue(*it));
+ return out;
+ }
+
+ template <typename T, typename A>
void FromTValue(const NSc::TValue& x, TVector<T, A>& out, const bool validate) {
- if (validate)
+ if (validate)
Y_ENSURE(x.IsArray() || x.IsNull(), "not valid input scheme");
- out.clear();
- if (x.IsArray()) {
- const NSc::TArray& arr = x.GetArray();
- out.reserve(arr.size());
+ out.clear();
+ if (x.IsArray()) {
+ const NSc::TArray& arr = x.GetArray();
+ out.reserve(arr.size());
for (const auto& it : arr) {
- T val;
+ T val;
NJsonConverters::FromTValue(it, val, validate);
- out.push_back(val);
- }
- }
- }
-
+ out.push_back(val);
+ }
+ }
+ }
+
//////////////////////////////////////////////////////////////////////
// THashMap & TMap
//////////////////////////////////////////////////////////////////////
- template <class Key, class T, class HashFcn, class EqualKey, class Alloc>
+ template <class Key, class T, class HashFcn, class EqualKey, class Alloc>
NSc::TValue ToTValue(const THashMap<Key, T, HashFcn, EqualKey, Alloc>& x) {
- return NPrivate::ToTValueDict(x);
- }
-
- template <class Key, class T, class HashFcn, class EqualKey, class Alloc>
+ return NPrivate::ToTValueDict(x);
+ }
+
+ template <class Key, class T, class HashFcn, class EqualKey, class Alloc>
void FromTValue(const NSc::TValue& x, THashMap<Key, T, HashFcn, EqualKey, Alloc>& out, const bool validate) {
- NPrivate::FromTValueDict(x, out, validate);
- }
-
- template <class K, class V, class Less, class A>
+ NPrivate::FromTValueDict(x, out, validate);
+ }
+
+ template <class K, class V, class Less, class A>
NSc::TValue ToTValue(const TMap<K, V, Less, A>& x) {
- return NPrivate::ToTValueDict(x);
- }
-
- template <class K, class V, class Less, class A>
+ return NPrivate::ToTValueDict(x);
+ }
+
+ template <class K, class V, class Less, class A>
void FromTValue(const NSc::TValue& x, TMap<K, V, Less, A>& out, const bool validate) {
- NPrivate::FromTValueDict(x, out, validate);
- }
-
+ NPrivate::FromTValueDict(x, out, validate);
+ }
+
//////////////////////////////////////////////////////////////////////
// THashSet & TSet
//////////////////////////////////////////////////////////////////////
- template <class V, class H, class E, class A>
+ template <class V, class H, class E, class A>
NSc::TValue ToTValue(const THashSet<V, H, E, A>& x) {
- return NPrivate::ToTValueSet(x);
- }
-
- template <class V, class H, class E, class A>
+ return NPrivate::ToTValueSet(x);
+ }
+
+ template <class V, class H, class E, class A>
void FromTValue(const NSc::TValue& x, THashSet<V, H, E, A>& out, const bool validate) {
- NPrivate::FromTValueSet(x, out, validate);
- }
-
- template <class K, class L, class A>
+ NPrivate::FromTValueSet(x, out, validate);
+ }
+
+ template <class K, class L, class A>
NSc::TValue ToTValue(const TSet<K, L, A>& x) {
- return NPrivate::ToTValueSet(x);
- }
-
- template <class K, class L, class A>
+ return NPrivate::ToTValueSet(x);
+ }
+
+ template <class K, class L, class A>
void FromTValue(const NSc::TValue& x, TSet<K, L, A>& out, const bool validate) {
- NPrivate::FromTValueSet(x, out, validate);
- }
-
+ NPrivate::FromTValueSet(x, out, validate);
+ }
+
//////////////////////////////////////////////////////////////////////
// std::pair
//////////////////////////////////////////////////////////////////////
- template <class T1, class T2>
+ template <class T1, class T2>
NSc::TValue ToTValue(const std::pair<T1, T2>& x) {
- NSc::TValue out;
- out.SetArray();
- out.Push(NJsonConverters::ToTValue(x.first));
- out.Push(NJsonConverters::ToTValue(x.second));
- return out;
- }
-
- template <class T1, class T2>
+ NSc::TValue out;
+ out.SetArray();
+ out.Push(NJsonConverters::ToTValue(x.first));
+ out.Push(NJsonConverters::ToTValue(x.second));
+ return out;
+ }
+
+ template <class T1, class T2>
void FromTValue(const NSc::TValue& x, std::pair<T1, T2>& out, const bool validate) {
- if (validate)
+ if (validate)
Y_ENSURE(x.IsArray() || x.IsNull(), "not valid input scheme");
- if (x.IsArray()) {
- const NSc::TArray& arr = x.GetArray();
- if (arr.size() == 2) {
- T1 val0;
- T2 val1;
- NJsonConverters::FromTValue(arr[0], val0, validate);
- NJsonConverters::FromTValue(arr[1], val1, validate);
- out.first = val0;
- out.second = val1;
- }
- }
- }
-
+ if (x.IsArray()) {
+ const NSc::TArray& arr = x.GetArray();
+ if (arr.size() == 2) {
+ T1 val0;
+ T2 val1;
+ NJsonConverters::FromTValue(arr[0], val0, validate);
+ NJsonConverters::FromTValue(arr[1], val1, validate);
+ out.first = val0;
+ out.second = val1;
+ }
+ }
+ }
+
//////////////////////////////////////////////////////////////////////
// global user functions
//////////////////////////////////////////////////////////////////////
- template <typename T>
+ template <typename T>
TString ToJson(const T& val, const bool sort = false) {
- return NJsonConverters::ToTValue(val).ToJson(sort);
- }
-
- template <typename T>
- T FromJson(const TStringBuf& json, bool validate = false) {
- NSc::TValue v = NSc::TValue::FromJson(json);
- T ret;
- NJsonConverters::FromTValue(v, ret, validate);
- return ret;
- }
-}
+ return NJsonConverters::ToTValue(val).ToJson(sort);
+ }
+
+ template <typename T>
+ T FromJson(const TStringBuf& json, bool validate = false) {
+ NSc::TValue v = NSc::TValue::FromJson(json);
+ T ret;
+ NJsonConverters::FromTValue(v, ret, validate);
+ return ret;
+ }
+}
diff --git a/library/cpp/scheme/scimpl.h b/library/cpp/scheme/scimpl.h
index 089817372d..4f68f16290 100644
--- a/library/cpp/scheme/scimpl.h
+++ b/library/cpp/scheme/scimpl.h
@@ -517,7 +517,7 @@ namespace NSc {
return SetString(t);
}
- TValue& TValue::operator=(TValue& v) & {
+ TValue& TValue::operator=(TValue& v) & {
if (!Same(*this, v)) {
//Extend TheCore lifetime not to trigger possible v deletion via parent-child chain
auto tmpCore = TheCore;
@@ -527,7 +527,7 @@ namespace NSc {
return *this;
}
- TValue& TValue::operator=(const TValue& v) & {
+ TValue& TValue::operator=(const TValue& v) & {
if (!Same(*this, v)) {
//Extend TheCore lifetime not to trigger possible v deletion via parent-child chain
auto tmpCore = TheCore;
@@ -537,7 +537,7 @@ namespace NSc {
return *this;
}
- TValue& TValue::operator=(TValue&& v) & noexcept {
+ TValue& TValue::operator=(TValue&& v) & noexcept {
if (!Same(*this, v)) {
//Extend TheCore lifetime not to trigger possible v deletion via parent-child chain
auto tmpCore = TheCore;
diff --git a/library/cpp/scheme/tests/ut/scheme_cast_ut.cpp b/library/cpp/scheme/tests/ut/scheme_cast_ut.cpp
index 43b2270559..4f907157e9 100644
--- a/library/cpp/scheme/tests/ut/scheme_cast_ut.cpp
+++ b/library/cpp/scheme/tests/ut/scheme_cast_ut.cpp
@@ -1,94 +1,94 @@
#include <library/cpp/scheme/scheme.h>
#include <library/cpp/scheme/scheme_cast.h>
-
+
#include <library/cpp/testing/unittest/registar.h>
-
-#include <util/stream/null.h>
-#include <util/string/subst.h>
-#include <util/string/util.h>
-
-using namespace NJsonConverters;
-
+
+#include <util/stream/null.h>
+#include <util/string/subst.h>
+#include <util/string/util.h>
+
+using namespace NJsonConverters;
+
using TVI = TVector<int>;
using THI = THashMap<int, int>;
using TMI = TMap<int, int>;
using THSI = THashSet<int>;
using TSI = TSet<int>;
using TPI = std::pair<int, int>;
-
+
Y_UNIT_TEST_SUITE(TSchemeCastTest) {
Y_UNIT_TEST(TestYVector) {
- TVI v;
- for (int i = 0; i < 3; ++i)
- v.push_back(i);
-
- UNIT_ASSERT_VALUES_EQUAL("[0,1,2]", ToJson(v));
-
- TVI y(FromJson<TVI>(ToJson(v)));
- UNIT_ASSERT_VALUES_EQUAL(v.size(), y.size());
+ TVI v;
+ for (int i = 0; i < 3; ++i)
+ v.push_back(i);
+
+ UNIT_ASSERT_VALUES_EQUAL("[0,1,2]", ToJson(v));
+
+ TVI y(FromJson<TVI>(ToJson(v)));
+ UNIT_ASSERT_VALUES_EQUAL(v.size(), y.size());
UNIT_ASSERT(std::equal(v.begin(), v.end(), y.begin()));
- }
-
+ }
+
Y_UNIT_TEST(TestYHash) {
- THI h;
- for (int i = 0; i < 3; ++i)
+ THI h;
+ for (int i = 0; i < 3; ++i)
h[i] = i * i;
-
+
const TString etalon = "{\"0\":0,\"1\":1,\"2\":4}";
- UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(h, true));
-
- THI h2(FromJson<THI>(ToJson(h)));
- UNIT_ASSERT_VALUES_EQUAL(ToJson(h2, true), ToJson(h, true));
- }
-
+ UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(h, true));
+
+ THI h2(FromJson<THI>(ToJson(h)));
+ UNIT_ASSERT_VALUES_EQUAL(ToJson(h2, true), ToJson(h, true));
+ }
+
Y_UNIT_TEST(TestYMap) {
- TMI h;
- for (int i = 0; i < 3; ++i)
+ TMI h;
+ for (int i = 0; i < 3; ++i)
h[i] = i * i;
-
+
const TString etalon = "{\"0\":0,\"1\":1,\"2\":4}";
- UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(h, true));
-
- TMI h2(FromJson<TMI>(ToJson(h)));
- UNIT_ASSERT_VALUES_EQUAL(ToJson(h2, true), ToJson(h, true));
- }
-
+ UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(h, true));
+
+ TMI h2(FromJson<TMI>(ToJson(h)));
+ UNIT_ASSERT_VALUES_EQUAL(ToJson(h2, true), ToJson(h, true));
+ }
+
Y_UNIT_TEST(TestYHashSet) {
- THSI h;
- for (int i = 0; i < 3; ++i)
+ THSI h;
+ for (int i = 0; i < 3; ++i)
h.insert(i * i);
-
+
const TString etalon = "{\"0\":null,\"1\":null,\"4\":null}";
- UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(h, true));
-
- THSI h2(FromJson<THSI>(ToJson(h)));
- UNIT_ASSERT_VALUES_EQUAL(ToJson(h2, true), ToJson(h, true));
- }
-
+ UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(h, true));
+
+ THSI h2(FromJson<THSI>(ToJson(h)));
+ UNIT_ASSERT_VALUES_EQUAL(ToJson(h2, true), ToJson(h, true));
+ }
+
Y_UNIT_TEST(TestYSet) {
- TSI h;
- for (int i = 0; i < 3; ++i)
+ TSI h;
+ for (int i = 0; i < 3; ++i)
h.insert(i * i);
-
+
const TString etalon = "{\"0\":null,\"1\":null,\"4\":null}";
- UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(h, true));
-
- TSI h2(FromJson<TSI>(ToJson(h)));
- UNIT_ASSERT_VALUES_EQUAL(ToJson(h2, true), ToJson(h, true));
- }
-
+ UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(h, true));
+
+ TSI h2(FromJson<TSI>(ToJson(h)));
+ UNIT_ASSERT_VALUES_EQUAL(ToJson(h2, true), ToJson(h, true));
+ }
+
Y_UNIT_TEST(TestTPair) {
TPI p(1, 1);
-
+
const TString etalon = "[1,1]";
- UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(p, true));
-
- TPI p2(FromJson<TPI>(ToJson(p)));
- UNIT_ASSERT_VALUES_EQUAL(ToJson(p2, true), ToJson(p, true));
- }
-
- struct TCustom: public IJsonSerializable {
- int A, B;
+ UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(p, true));
+
+ TPI p2(FromJson<TPI>(ToJson(p)));
+ UNIT_ASSERT_VALUES_EQUAL(ToJson(p2, true), ToJson(p, true));
+ }
+
+ struct TCustom: public IJsonSerializable {
+ int A, B;
TCustom()
: A(0)
, B(0){};
@@ -98,65 +98,65 @@ Y_UNIT_TEST_SUITE(TSchemeCastTest) {
{
}
NSc::TValue ToTValue() const override {
- NSc::TValue res;
- res["a"] = A;
- res["b"] = B;
- return res;
- }
+ NSc::TValue res;
+ res["a"] = A;
+ res["b"] = B;
+ return res;
+ }
void FromTValue(const NSc::TValue& v, const bool) override {
- A = v["a"].GetNumber();
- B = v["b"].GetNumber();
- }
-
+ A = v["a"].GetNumber();
+ B = v["b"].GetNumber();
+ }
+
bool operator<(const TCustom& rhs) const {
- return A < rhs.A;
- }
- };
-
+ return A < rhs.A;
+ }
+ };
+
Y_UNIT_TEST(TestTCustom) {
- TCustom x(2, 3);
-
+ TCustom x(2, 3);
+
const TString etalon = "{\"a\":2,\"b\":3}";
- UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(x, true));
-
- TCustom x2(FromJson<TCustom>(ToJson(x)));
- UNIT_ASSERT_VALUES_EQUAL(ToJson(x2, true), ToJson(x, true));
- }
-
+ UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(x, true));
+
+ TCustom x2(FromJson<TCustom>(ToJson(x)));
+ UNIT_ASSERT_VALUES_EQUAL(ToJson(x2, true), ToJson(x, true));
+ }
+
Y_UNIT_TEST(TestVectorOfPairs) {
typedef TVector<TPI> TVPI;
- TVPI v;
-
- for (int i = 0; i < 3; ++i)
+ TVPI v;
+
+ for (int i = 0; i < 3; ++i)
v.push_back(TPI(i, i * i));
-
+
const TString etalon = "[[0,0],[1,1],[2,4]]";
- UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(v, true));
-
- TVPI v2(FromJson<TVPI>(ToJson(v)));
- UNIT_ASSERT_VALUES_EQUAL(ToJson(v2, true), ToJson(v, true));
- }
-
+ UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(v, true));
+
+ TVPI v2(FromJson<TVPI>(ToJson(v)));
+ UNIT_ASSERT_VALUES_EQUAL(ToJson(v2, true), ToJson(v, true));
+ }
+
Y_UNIT_TEST(TestSetOfCustom) {
typedef TSet<TCustom> TSC;
- TSC s;
+ TSC s;
s.insert(TCustom(2, 3));
-
+
const TString etalon = "{\"{\\\"a\\\":2,\\\"b\\\":3}\":null}";
- UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(s, true));
-
- TSC s2(FromJson<TSC>(ToJson(s)));
- UNIT_ASSERT_VALUES_EQUAL(ToJson(s2, true), ToJson(s, true));
- }
-
+ UNIT_ASSERT_VALUES_EQUAL(etalon, ToJson(s, true));
+
+ TSC s2(FromJson<TSC>(ToJson(s)));
+ UNIT_ASSERT_VALUES_EQUAL(ToJson(s2, true), ToJson(s, true));
+ }
+
Y_UNIT_TEST(TestExceptions) {
- NSc::TValue v = 1;
+ NSc::TValue v = 1;
const TString json = v.ToJson();
- UNIT_ASSERT_EXCEPTION(FromJson<TVI>(json, true), yexception);
- UNIT_ASSERT_EXCEPTION(FromJson<THI>(json, true), yexception);
- UNIT_ASSERT_EXCEPTION(FromJson<TMI>(json, true), yexception);
- UNIT_ASSERT_EXCEPTION(FromJson<THSI>(json, true), yexception);
- UNIT_ASSERT_EXCEPTION(FromJson<TSI>(json, true), yexception);
- UNIT_ASSERT_EXCEPTION(FromJson<TPI>(json, true), yexception);
- }
-};
+ UNIT_ASSERT_EXCEPTION(FromJson<TVI>(json, true), yexception);
+ UNIT_ASSERT_EXCEPTION(FromJson<THI>(json, true), yexception);
+ UNIT_ASSERT_EXCEPTION(FromJson<TMI>(json, true), yexception);
+ UNIT_ASSERT_EXCEPTION(FromJson<THSI>(json, true), yexception);
+ UNIT_ASSERT_EXCEPTION(FromJson<TSI>(json, true), yexception);
+ UNIT_ASSERT_EXCEPTION(FromJson<TPI>(json, true), yexception);
+ }
+};