singleton_ut.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "singleton.h"
  2. #include <library/cpp/testing/unittest/registar.h>
  3. Y_UNIT_TEST_SUITE(TestSingleton) {
  4. struct THuge {
  5. char Buf[1000000];
  6. int V = 1234;
  7. };
  8. Y_UNIT_TEST(TestHuge) {
  9. UNIT_ASSERT_VALUES_EQUAL(*HugeSingleton<int>(), 0);
  10. UNIT_ASSERT_VALUES_EQUAL(HugeSingleton<THuge>()->V, 1234);
  11. }
  12. struct TWithParams {
  13. explicit TWithParams(const ui32 data1 = 0, const TString& data2 = TString())
  14. : Data1(data1)
  15. , Data2(data2)
  16. {
  17. }
  18. ui32 Data1;
  19. TString Data2;
  20. };
  21. Y_UNIT_TEST(TestConstructorParamsOrder) {
  22. UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(10, "123123")->Data1, 10);
  23. UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(20, "123123")->Data1, 10);
  24. UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(10, "456456")->Data2, "123123");
  25. }
  26. Y_UNIT_TEST(TestInstantiationWithConstructorParams) {
  27. UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(10)->Data1, 10);
  28. UNIT_ASSERT_VALUES_EQUAL(HugeSingleton<TWithParams>(20, "123123")->Data2, "123123");
  29. {
  30. const auto value = SingletonWithPriority<TWithParams, 12312>(30, "456")->Data1;
  31. UNIT_ASSERT_VALUES_EQUAL(value, 30);
  32. }
  33. {
  34. const auto value = HugeSingletonWithPriority<TWithParams, 12311>(40, "789")->Data2;
  35. UNIT_ASSERT_VALUES_EQUAL(value, "789");
  36. }
  37. UNIT_ASSERT_VALUES_EQUAL(Default<TWithParams>().Data1, 0);
  38. }
  39. } // Y_UNIT_TEST_SUITE(TestSingleton)