#include #include "tune.h" struct TDefaultStructA { }; struct TDefaultStructB { }; struct TDefaults { using TStructA = TDefaultStructA; using TStructB = TDefaultStructB; static constexpr ui32 Param1 = 42; static constexpr ui32 Param2 = 42; }; DeclareTuneTypeParam(TweakStructA, TStructA); DeclareTuneTypeParam(TweakStructB, TStructB); DeclareTuneValueParam(TweakParam1, ui32, Param1); DeclareTuneValueParam(TweakParam2, ui32, Param2); Y_UNIT_TEST_SUITE(TestTuning) { Y_UNIT_TEST(Defaults) { using TTuned = TTune; using TunedA = TTuned::TStructA; using TunedB = TTuned::TStructB; auto sameA = std::is_same::value; auto sameB = std::is_same::value; auto param1 = TTuned::Param1; auto param2 = TTuned::Param2; UNIT_ASSERT(sameA); UNIT_ASSERT(sameB); UNIT_ASSERT_EQUAL(param1, 42); UNIT_ASSERT_EQUAL(param2, 42); } Y_UNIT_TEST(TuneStructA) { struct TMyStruct { }; using TTuned = TTune>; using TunedA = TTuned::TStructA; using TunedB = TTuned::TStructB; //auto sameA = std::is_same::value; auto sameB = std::is_same::value; auto param1 = TTuned::Param1; auto param2 = TTuned::Param2; auto sameA = std::is_same::value; UNIT_ASSERT(sameA); UNIT_ASSERT(sameB); UNIT_ASSERT_EQUAL(param1, 42); UNIT_ASSERT_EQUAL(param2, 42); } Y_UNIT_TEST(TuneParam1) { using TTuned = TTune>; using TunedA = TTuned::TStructA; using TunedB = TTuned::TStructB; auto sameA = std::is_same::value; auto sameB = std::is_same::value; auto param1 = TTuned::Param1; auto param2 = TTuned::Param2; UNIT_ASSERT(sameA); UNIT_ASSERT(sameB); UNIT_ASSERT_EQUAL(param1, 24); UNIT_ASSERT_EQUAL(param2, 42); } Y_UNIT_TEST(TuneStructAAndParam1) { struct TMyStruct { }; using TTuned = TTune, TweakParam1<24>>; using TunedA = TTuned::TStructA; using TunedB = TTuned::TStructB; //auto sameA = std::is_same::value; auto sameB = std::is_same::value; auto param1 = TTuned::Param1; auto param2 = TTuned::Param2; auto sameA = std::is_same::value; UNIT_ASSERT(sameA); UNIT_ASSERT(sameB); UNIT_ASSERT_EQUAL(param1, 24); UNIT_ASSERT_EQUAL(param2, 42); } Y_UNIT_TEST(TuneParam1AndStructA) { struct TMyStruct { }; using TTuned = TTune, TweakStructA>; using TunedA = TTuned::TStructA; using TunedB = TTuned::TStructB; //auto sameA = std::is_same::value; auto sameB = std::is_same::value; auto param1 = TTuned::Param1; auto param2 = TTuned::Param2; auto sameA = std::is_same::value; UNIT_ASSERT(sameA); UNIT_ASSERT(sameB); UNIT_ASSERT_EQUAL(param1, 24); UNIT_ASSERT_EQUAL(param2, 42); } }