compact_vector_ut.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include <library/cpp/testing/unittest/registar.h>
  2. #include "compact_vector.h"
  3. Y_UNIT_TEST_SUITE(TCompactVectorTest) {
  4. Y_UNIT_TEST(TestSimple1) {
  5. }
  6. Y_UNIT_TEST(TestSimple) {
  7. TCompactVector<ui32> vector;
  8. for (ui32 i = 0; i < 10000; ++i) {
  9. vector.PushBack(i + 20);
  10. UNIT_ASSERT_VALUES_EQUAL(i + 1, vector.Size());
  11. }
  12. for (ui32 i = 0; i < 10000; ++i) {
  13. UNIT_ASSERT_VALUES_EQUAL(i + 20, vector[i]);
  14. }
  15. }
  16. Y_UNIT_TEST(TestInsert) {
  17. TCompactVector<ui32> vector;
  18. for (ui32 i = 0; i < 10; ++i) {
  19. vector.PushBack(i + 2);
  20. }
  21. vector.Insert(vector.Begin(), 99);
  22. UNIT_ASSERT_VALUES_EQUAL(11u, vector.Size());
  23. UNIT_ASSERT_VALUES_EQUAL(99u, vector[0]);
  24. for (ui32 i = 0; i < 10; ++i) {
  25. UNIT_ASSERT_VALUES_EQUAL(i + 2, vector[i + 1]);
  26. }
  27. vector.Insert(vector.Begin() + 3, 77);
  28. UNIT_ASSERT_VALUES_EQUAL(12u, vector.Size());
  29. UNIT_ASSERT_VALUES_EQUAL(99u, vector[0]);
  30. UNIT_ASSERT_VALUES_EQUAL(2u, vector[1]);
  31. UNIT_ASSERT_VALUES_EQUAL(3u, vector[2]);
  32. UNIT_ASSERT_VALUES_EQUAL(77u, vector[3]);
  33. UNIT_ASSERT_VALUES_EQUAL(4u, vector[4]);
  34. UNIT_ASSERT_VALUES_EQUAL(5u, vector[5]);
  35. UNIT_ASSERT_VALUES_EQUAL(11u, vector[11]);
  36. }
  37. Y_UNIT_TEST(TestInitializerListConstructor) {
  38. TCompactVector<ui32> vector = { 4, 8, 10, 3, 5};
  39. UNIT_ASSERT_VALUES_EQUAL(5u, vector.Size());
  40. UNIT_ASSERT_VALUES_EQUAL(4u, vector[0]);
  41. UNIT_ASSERT_VALUES_EQUAL(8u, vector[1]);
  42. UNIT_ASSERT_VALUES_EQUAL(10u, vector[2]);
  43. UNIT_ASSERT_VALUES_EQUAL(3u, vector[3]);
  44. UNIT_ASSERT_VALUES_EQUAL(5u, vector[4]);
  45. }
  46. Y_UNIT_TEST(TestIteratorConstructor) {
  47. TVector<ui32> origVector = { 4, 8, 10, 3, 5};
  48. TCompactVector<ui32> vector(origVector.begin(), origVector.end());
  49. UNIT_ASSERT_VALUES_EQUAL(5u, vector.Size());
  50. UNIT_ASSERT_VALUES_EQUAL(4u, vector[0]);
  51. UNIT_ASSERT_VALUES_EQUAL(8u, vector[1]);
  52. UNIT_ASSERT_VALUES_EQUAL(10u, vector[2]);
  53. UNIT_ASSERT_VALUES_EQUAL(3u, vector[3]);
  54. UNIT_ASSERT_VALUES_EQUAL(5u, vector[4]);
  55. }
  56. Y_UNIT_TEST(TestInitializerListCopyOperator) {
  57. TCompactVector<double> vector = { 4, 8, 10, 3, 5};
  58. UNIT_ASSERT_VALUES_EQUAL(5u, vector.Size());
  59. vector = { 11, 17, 23 };
  60. UNIT_ASSERT_VALUES_EQUAL(3u, vector.Size());
  61. UNIT_ASSERT_VALUES_EQUAL(11.0, vector[0]);
  62. UNIT_ASSERT_VALUES_EQUAL(17.0, vector[1]);
  63. UNIT_ASSERT_VALUES_EQUAL(23.0, vector[2]);
  64. }
  65. Y_UNIT_TEST(TestMoveConstructor) {
  66. TCompactVector<ui32> vector = { 4, 8, 10, 3, 5};
  67. auto it = vector.Begin();
  68. TCompactVector<ui32> vector2(std::move(vector));
  69. UNIT_ASSERT_VALUES_EQUAL(it, vector2.begin());
  70. UNIT_ASSERT_VALUES_EQUAL(5u, vector2.Size());
  71. UNIT_ASSERT_VALUES_EQUAL(4u, vector2[0]);
  72. UNIT_ASSERT_VALUES_EQUAL(8u, vector2[1]);
  73. UNIT_ASSERT_VALUES_EQUAL(10u, vector2[2]);
  74. UNIT_ASSERT_VALUES_EQUAL(3u, vector2[3]);
  75. UNIT_ASSERT_VALUES_EQUAL(5u, vector2[4]);
  76. }
  77. Y_UNIT_TEST(TestReverseIterators) {
  78. TCompactVector<std::string> vector = {
  79. "мама",
  80. "мыла",
  81. "раму"
  82. };
  83. TCompactVector<std::string> reverseVector(vector.rbegin(), vector.rend());
  84. UNIT_ASSERT_VALUES_EQUAL(3u, reverseVector.Size());
  85. UNIT_ASSERT_VALUES_EQUAL("раму", reverseVector[0]);
  86. UNIT_ASSERT_VALUES_EQUAL("мыла", reverseVector[1]);
  87. UNIT_ASSERT_VALUES_EQUAL("мама", reverseVector[2]);
  88. }
  89. Y_UNIT_TEST(TestErase) {
  90. TCompactVector<std::string> vector = {
  91. "мама",
  92. "утром",
  93. "мыла",
  94. "раму"
  95. };
  96. vector.erase(vector.begin() + 1);
  97. UNIT_ASSERT_VALUES_EQUAL(3u, vector.Size());
  98. UNIT_ASSERT_VALUES_EQUAL("мама", vector[0]);
  99. UNIT_ASSERT_VALUES_EQUAL("мыла", vector[1]);
  100. UNIT_ASSERT_VALUES_EQUAL("раму", vector[2]);
  101. }
  102. Y_UNIT_TEST(TestCopyAssignmentOperator) {
  103. TCompactVector<std::string> vector;
  104. const TCompactVector<std::string> vector2 = {
  105. "мама",
  106. "мыла",
  107. "раму"
  108. };
  109. vector = vector2;
  110. UNIT_ASSERT_VALUES_EQUAL(3u, vector.Size());
  111. UNIT_ASSERT_VALUES_EQUAL("мама", vector[0]);
  112. UNIT_ASSERT_VALUES_EQUAL("мыла", vector[1]);
  113. UNIT_ASSERT_VALUES_EQUAL("раму", vector[2]);
  114. UNIT_ASSERT_VALUES_EQUAL(vector[0], vector2[0]);
  115. UNIT_ASSERT_VALUES_EQUAL(vector[1], vector2[1]);
  116. UNIT_ASSERT_VALUES_EQUAL(vector[2], vector2[2]);
  117. }
  118. }