#include "singleton.h" #include Y_UNIT_TEST_SUITE(TestSingleton) { struct THuge { char Buf[1000000]; int V = 1234; }; Y_UNIT_TEST(TestHuge) { UNIT_ASSERT_VALUES_EQUAL(*HugeSingleton(), 0); UNIT_ASSERT_VALUES_EQUAL(HugeSingleton()->V, 1234); } struct TWithParams { explicit TWithParams(const ui32 data1 = 0, const TString& data2 = TString()) : Data1(data1) , Data2(data2) { } ui32 Data1; TString Data2; }; Y_UNIT_TEST(TestConstructorParamsOrder) { UNIT_ASSERT_VALUES_EQUAL(Singleton(10, "123123")->Data1, 10); UNIT_ASSERT_VALUES_EQUAL(Singleton(20, "123123")->Data1, 10); UNIT_ASSERT_VALUES_EQUAL(Singleton(10, "456456")->Data2, "123123"); } Y_UNIT_TEST(TestInstantiationWithConstructorParams) { UNIT_ASSERT_VALUES_EQUAL(Singleton(10)->Data1, 10); UNIT_ASSERT_VALUES_EQUAL(HugeSingleton(20, "123123")->Data2, "123123"); { const auto value = SingletonWithPriority(30, "456")->Data1; UNIT_ASSERT_VALUES_EQUAL(value, 30); } { const auto value = HugeSingletonWithPriority(40, "789")->Data2; UNIT_ASSERT_VALUES_EQUAL(value, "789"); } UNIT_ASSERT_VALUES_EQUAL(Default().Data1, 0); } } // Y_UNIT_TEST_SUITE(TestSingleton)