diff options
author | swarmer <swarmer@yandex-team.ru> | 2022-02-10 16:46:31 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:46:31 +0300 |
commit | 317da38588b7898a99fd9168571408123350012b (patch) | |
tree | 25eebc31526019ad39a6c1b13f492963d97ba439 /util/generic/serialized_enum_ut.cpp | |
parent | 3b2241461d41d41ba1a706b0750c4f0f55c344f6 (diff) | |
download | ydb-317da38588b7898a99fd9168571408123350012b.tar.gz |
Restoring authorship annotation for <swarmer@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'util/generic/serialized_enum_ut.cpp')
-rw-r--r-- | util/generic/serialized_enum_ut.cpp | 218 |
1 files changed, 109 insertions, 109 deletions
diff --git a/util/generic/serialized_enum_ut.cpp b/util/generic/serialized_enum_ut.cpp index 3a94e1d471..0c1b276a38 100644 --- a/util/generic/serialized_enum_ut.cpp +++ b/util/generic/serialized_enum_ut.cpp @@ -1,120 +1,120 @@ -#include "serialized_enum.h" - +#include "serialized_enum.h" + #include <library/cpp/testing/unittest/registar.h> - -#include <util/generic/deque.h> -#include <util/generic/map.h> -#include <util/generic/typelist.h> -#include <util/generic/vector.h> - -Y_UNIT_TEST_SUITE(TestSerializedEnum) { - Y_UNIT_TEST(RepresentationTypes) { - using namespace NEnumSerializationRuntime::NDetail; - - static_assert(TIsPromotable<int, int>::value, "int -> int"); - static_assert(TIsPromotable<char, int>::value, "char -> int"); - static_assert(TIsPromotable<unsigned short, unsigned long>::value, "unsigned short -> unsigned long"); - static_assert(TIsPromotable<i64, long long>::value, "i64 -> long long"); - static_assert(!TIsPromotable<ui64, ui8>::value, "ui64 -> ui8"); - static_assert(!TIsPromotable<i64, short>::value, "i64 -> short"); - - enum EEmpty { - }; + +#include <util/generic/deque.h> +#include <util/generic/map.h> +#include <util/generic/typelist.h> +#include <util/generic/vector.h> + +Y_UNIT_TEST_SUITE(TestSerializedEnum) { + Y_UNIT_TEST(RepresentationTypes) { + using namespace NEnumSerializationRuntime::NDetail; + + static_assert(TIsPromotable<int, int>::value, "int -> int"); + static_assert(TIsPromotable<char, int>::value, "char -> int"); + static_assert(TIsPromotable<unsigned short, unsigned long>::value, "unsigned short -> unsigned long"); + static_assert(TIsPromotable<i64, long long>::value, "i64 -> long long"); + static_assert(!TIsPromotable<ui64, ui8>::value, "ui64 -> ui8"); + static_assert(!TIsPromotable<i64, short>::value, "i64 -> short"); + + enum EEmpty { + }; UNIT_ASSERT_C((TTypeList<int, unsigned>::THave<typename TSelectEnumRepresentationType<EEmpty>::TType>::value), "empty enum using signed or unsigned integer underlying type"); - - using TRepresentationTypeList = TTypeList<int, unsigned, long long, unsigned long long>; - - enum class ERegular { - One = 1, - Two = 2, - Five = 5, - }; + + using TRepresentationTypeList = TTypeList<int, unsigned, long long, unsigned long long>; + + enum class ERegular { + One = 1, + Two = 2, + Five = 5, + }; UNIT_ASSERT(TRepresentationTypeList::THave<typename TSelectEnumRepresentationType<ERegular>::TType>::value); - + enum class ESmall: unsigned char { - Six = 6, - }; + Six = 6, + }; UNIT_ASSERT(TRepresentationTypeList::THave<typename TSelectEnumRepresentationType<ESmall>::TType>::value); - + enum class EHugeUnsigned: ui64 { - Value = 0, - }; + Value = 0, + }; UNIT_ASSERT(TRepresentationTypeList::THave<typename TSelectEnumRepresentationType<EHugeUnsigned>::TType>::value); - + enum class EHugeSigned: i64 { - Value = -2, - }; + Value = -2, + }; UNIT_ASSERT(TRepresentationTypeList::THave<typename TSelectEnumRepresentationType<EHugeSigned>::TType>::value); - } - - Y_UNIT_TEST(MappedArrayView) { + } + + Y_UNIT_TEST(MappedArrayView) { enum class ETestEnum: signed char { - Zero = 0, - One = 1, - Two = 2, - Three = 3, - Four = 4, - Eleven = 11, - }; - const TVector<int> values = {1, 2, 3, 0, 0, 0, 11, 0, 0, 0, 0, 0, 2}; - const auto view = ::NEnumSerializationRuntime::TMappedArrayView<ETestEnum>{values}; - - UNIT_ASSERT_VALUES_EQUAL(view.size(), values.size()); - UNIT_ASSERT_VALUES_EQUAL(view.empty(), false); - UNIT_ASSERT_EQUAL(*view.begin(), ETestEnum::One); - UNIT_ASSERT_EQUAL(view[6], ETestEnum::Eleven); - UNIT_ASSERT_EXCEPTION(view.at(-1), std::out_of_range); - UNIT_ASSERT_VALUES_EQUAL(sizeof(view[4]), sizeof(signed char)); - UNIT_ASSERT_VALUES_EQUAL(sizeof(values[4]), sizeof(int)); - for (const ETestEnum e : view) { - UNIT_ASSERT_UNEQUAL(e, ETestEnum::Four); - } - - const TVector<ETestEnum> typedValues = {ETestEnum::One, ETestEnum::Two, ETestEnum::Three, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Eleven, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Two}; - UNIT_ASSERT_EQUAL(typedValues, view.Materialize()); - - const TDeque<ETestEnum> typedValuesDeque{typedValues.begin(), typedValues.end()}; - UNIT_ASSERT_EQUAL(typedValuesDeque, view.Materialize<TDeque>()); - } - - Y_UNIT_TEST(MappedDictView) { + Zero = 0, + One = 1, + Two = 2, + Three = 3, + Four = 4, + Eleven = 11, + }; + const TVector<int> values = {1, 2, 3, 0, 0, 0, 11, 0, 0, 0, 0, 0, 2}; + const auto view = ::NEnumSerializationRuntime::TMappedArrayView<ETestEnum>{values}; + + UNIT_ASSERT_VALUES_EQUAL(view.size(), values.size()); + UNIT_ASSERT_VALUES_EQUAL(view.empty(), false); + UNIT_ASSERT_EQUAL(*view.begin(), ETestEnum::One); + UNIT_ASSERT_EQUAL(view[6], ETestEnum::Eleven); + UNIT_ASSERT_EXCEPTION(view.at(-1), std::out_of_range); + UNIT_ASSERT_VALUES_EQUAL(sizeof(view[4]), sizeof(signed char)); + UNIT_ASSERT_VALUES_EQUAL(sizeof(values[4]), sizeof(int)); + for (const ETestEnum e : view) { + UNIT_ASSERT_UNEQUAL(e, ETestEnum::Four); + } + + const TVector<ETestEnum> typedValues = {ETestEnum::One, ETestEnum::Two, ETestEnum::Three, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Eleven, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Zero, ETestEnum::Two}; + UNIT_ASSERT_EQUAL(typedValues, view.Materialize()); + + const TDeque<ETestEnum> typedValuesDeque{typedValues.begin(), typedValues.end()}; + UNIT_ASSERT_EQUAL(typedValuesDeque, view.Materialize<TDeque>()); + } + + Y_UNIT_TEST(MappedDictView) { enum class ETestEnum: unsigned short { - Zero = 0, - One = 1, - Two = 2, - Three = 3, - Four = 4, - Eleven = 11, - Fake = (unsigned short)(-1), - }; - const TMap<unsigned, unsigned> map = {{0, 1}, {1, 2}, {2, 4}, {3, 8}, {4, 16}, {11, 2048}}; - const auto view = ::NEnumSerializationRuntime::NDetail::TMappedDictView<ETestEnum, unsigned, unsigned, decltype(map)>{map}; - - UNIT_ASSERT_VALUES_EQUAL(view.size(), map.size()); - UNIT_ASSERT_VALUES_EQUAL(map.empty(), false); - - UNIT_ASSERT_EQUAL(view.begin()->first, ETestEnum::Zero); - UNIT_ASSERT_VALUES_EQUAL(view.begin()->second, 1u); - - UNIT_ASSERT_VALUES_EQUAL(view.contains(ETestEnum::Fake), false); - UNIT_ASSERT_VALUES_EQUAL(view.contains(ETestEnum::Four), true); - - UNIT_ASSERT_EXCEPTION(view.at(ETestEnum::Fake), std::out_of_range); - UNIT_ASSERT_NO_EXCEPTION(view.at(ETestEnum::Eleven)); - - UNIT_ASSERT_VALUES_EQUAL(view.at(ETestEnum::Three), 8u); - - unsigned mask = 0; - unsigned sum = 0; - for (const auto e : view) { - mask |= e.second; - sum += e.second; - } - UNIT_ASSERT_VALUES_EQUAL(mask, 2079); - UNIT_ASSERT_VALUES_EQUAL(sum, 2079); - - const TMap<ETestEnum, unsigned> materialized = view.Materialize<TMap>(); - UNIT_ASSERT_VALUES_EQUAL(materialized.size(), map.size()); - UNIT_ASSERT_VALUES_EQUAL(materialized.at(ETestEnum::Four), 16); - } -} + Zero = 0, + One = 1, + Two = 2, + Three = 3, + Four = 4, + Eleven = 11, + Fake = (unsigned short)(-1), + }; + const TMap<unsigned, unsigned> map = {{0, 1}, {1, 2}, {2, 4}, {3, 8}, {4, 16}, {11, 2048}}; + const auto view = ::NEnumSerializationRuntime::NDetail::TMappedDictView<ETestEnum, unsigned, unsigned, decltype(map)>{map}; + + UNIT_ASSERT_VALUES_EQUAL(view.size(), map.size()); + UNIT_ASSERT_VALUES_EQUAL(map.empty(), false); + + UNIT_ASSERT_EQUAL(view.begin()->first, ETestEnum::Zero); + UNIT_ASSERT_VALUES_EQUAL(view.begin()->second, 1u); + + UNIT_ASSERT_VALUES_EQUAL(view.contains(ETestEnum::Fake), false); + UNIT_ASSERT_VALUES_EQUAL(view.contains(ETestEnum::Four), true); + + UNIT_ASSERT_EXCEPTION(view.at(ETestEnum::Fake), std::out_of_range); + UNIT_ASSERT_NO_EXCEPTION(view.at(ETestEnum::Eleven)); + + UNIT_ASSERT_VALUES_EQUAL(view.at(ETestEnum::Three), 8u); + + unsigned mask = 0; + unsigned sum = 0; + for (const auto e : view) { + mask |= e.second; + sum += e.second; + } + UNIT_ASSERT_VALUES_EQUAL(mask, 2079); + UNIT_ASSERT_VALUES_EQUAL(sum, 2079); + + const TMap<ETestEnum, unsigned> materialized = view.Materialize<TMap>(); + UNIT_ASSERT_VALUES_EQUAL(materialized.size(), map.size()); + UNIT_ASSERT_VALUES_EQUAL(materialized.at(ETestEnum::Four), 16); + } +} |