mapfindptr_ut.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "string.h"
  2. #include "hash.h"
  3. #include <library/cpp/testing/unittest/registar.h>
  4. #include <map>
  5. #include "mapfindptr.h"
  6. Y_UNIT_TEST_SUITE(TMapFindPtrTest) {
  7. struct TTestMap: std::map<int, TString>, TMapOps<TTestMap> {};
  8. Y_UNIT_TEST(TestDerivedClass) {
  9. TTestMap a;
  10. a[42] = "cat";
  11. UNIT_ASSERT(a.FindPtr(42));
  12. UNIT_ASSERT_EQUAL(*a.FindPtr(42), "cat");
  13. UNIT_ASSERT_EQUAL(a.FindPtr(0), nullptr);
  14. //test mutation
  15. if (TString* p = a.FindPtr(42)) {
  16. *p = "dog";
  17. }
  18. UNIT_ASSERT(a.FindPtr(42));
  19. UNIT_ASSERT_EQUAL(*a.FindPtr(42), "dog");
  20. //test const-overloaded functions too
  21. const TTestMap& b = a;
  22. UNIT_ASSERT(b.FindPtr(42) && *b.FindPtr(42) == "dog");
  23. UNIT_ASSERT_EQUAL(b.FindPtr(0), nullptr);
  24. UNIT_ASSERT_STRINGS_EQUAL(b.Value(42, "cat"), "dog");
  25. UNIT_ASSERT_STRINGS_EQUAL(b.Value(0, "alien"), "alien");
  26. }
  27. Y_UNIT_TEST(TestTemplateFind) {
  28. THashMap<TString, int> m;
  29. m[TString("x")] = 2;
  30. UNIT_ASSERT(m.FindPtr(TStringBuf("x")));
  31. UNIT_ASSERT_EQUAL(*m.FindPtr(TStringBuf("x")), 2);
  32. }
  33. Y_UNIT_TEST(TestValue) {
  34. TTestMap a;
  35. a[1] = "lol";
  36. UNIT_ASSERT_VALUES_EQUAL(a.Value(1, "123"), "lol");
  37. UNIT_ASSERT_VALUES_EQUAL(a.Value(2, "123"), "123");
  38. UNIT_ASSERT_VALUES_EQUAL(a.Value(2, "123"sv), "123"sv);
  39. }
  40. Y_UNIT_TEST(TestValueRef) {
  41. TTestMap a;
  42. a[1] = "lol";
  43. const TString str123 = "123";
  44. TString str1234 = "1234";
  45. UNIT_ASSERT_VALUES_EQUAL(a.ValueRef(1, str123), "lol");
  46. UNIT_ASSERT_VALUES_EQUAL(a.ValueRef(2, str123), "123");
  47. UNIT_ASSERT_VALUES_EQUAL(a.ValueRef(3, str1234), "1234");
  48. }
  49. }