summaryrefslogtreecommitdiffstats
path: root/library/cpp/containers/compact_vector/compact_vector_ut.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'library/cpp/containers/compact_vector/compact_vector_ut.cpp')
-rw-r--r--library/cpp/containers/compact_vector/compact_vector_ut.cpp74
1 files changed, 51 insertions, 23 deletions
diff --git a/library/cpp/containers/compact_vector/compact_vector_ut.cpp b/library/cpp/containers/compact_vector/compact_vector_ut.cpp
index e576ac3a956..f9fd43d0c79 100644
--- a/library/cpp/containers/compact_vector/compact_vector_ut.cpp
+++ b/library/cpp/containers/compact_vector/compact_vector_ut.cpp
@@ -70,7 +70,7 @@ Y_UNIT_TEST_SUITE(TCompactVectorTest) {
}
Y_UNIT_TEST(TestInitializerListConstructor) {
- TCompactVector<ui32> vector = { 4, 8, 10, 3, 5};
+ TCompactVector<ui32> vector = {4, 8, 10, 3, 5};
UNIT_ASSERT_VALUES_EQUAL(5u, vector.Size());
UNIT_ASSERT_VALUES_EQUAL(4u, vector[0]);
@@ -81,7 +81,7 @@ Y_UNIT_TEST_SUITE(TCompactVectorTest) {
}
Y_UNIT_TEST(TestIteratorConstructor) {
- TVector<ui32> origVector = { 4, 8, 10, 3, 5};
+ TVector<ui32> origVector = {4, 8, 10, 3, 5};
TCompactVector<ui32> vector(origVector.begin(), origVector.end());
UNIT_ASSERT_VALUES_EQUAL(5u, vector.Size());
@@ -93,10 +93,10 @@ Y_UNIT_TEST_SUITE(TCompactVectorTest) {
}
Y_UNIT_TEST(TestInitializerListCopyOperator) {
- TCompactVector<double> vector = { 4, 8, 10, 3, 5};
+ TCompactVector<double> vector = {4, 8, 10, 3, 5};
UNIT_ASSERT_VALUES_EQUAL(5u, vector.Size());
- vector = { 11, 17, 23 };
+ vector = {11, 17, 23};
UNIT_ASSERT_VALUES_EQUAL(3u, vector.Size());
UNIT_ASSERT_VALUES_EQUAL(11.0, vector[0]);
@@ -105,7 +105,7 @@ Y_UNIT_TEST_SUITE(TCompactVectorTest) {
}
Y_UNIT_TEST(TestMoveConstructor) {
- TCompactVector<ui32> vector = { 4, 8, 10, 3, 5};
+ TCompactVector<ui32> vector = {4, 8, 10, 3, 5};
auto it = vector.Begin();
TCompactVector<ui32> vector2(std::move(vector));
@@ -122,10 +122,9 @@ Y_UNIT_TEST_SUITE(TCompactVectorTest) {
Y_UNIT_TEST(TestReverseIterators) {
TCompactVector<std::string> vector = {
- "мама",
- "мыла",
- "раму"
- };
+ "мама",
+ "мыла",
+ "раму"};
TCompactVector<std::string> reverseVector(vector.rbegin(), vector.rend());
UNIT_ASSERT_VALUES_EQUAL(3u, reverseVector.Size());
@@ -137,11 +136,10 @@ Y_UNIT_TEST_SUITE(TCompactVectorTest) {
Y_UNIT_TEST(TestErase) {
TCompactVector<std::string> vector = {
- "мама",
- "утром",
- "мыла",
- "раму"
- };
+ "мама",
+ "утром",
+ "мыла",
+ "раму"};
vector.erase(vector.begin() + 1);
UNIT_ASSERT_VALUES_EQUAL(3u, vector.Size());
@@ -154,10 +152,9 @@ Y_UNIT_TEST_SUITE(TCompactVectorTest) {
Y_UNIT_TEST(TestCopyAssignmentOperator) {
TCompactVector<std::string> vector;
const TCompactVector<std::string> vector2 = {
- "мама",
- "мыла",
- "раму"
- };
+ "мама",
+ "мыла",
+ "раму"};
vector = vector2;
@@ -174,12 +171,43 @@ Y_UNIT_TEST_SUITE(TCompactVectorTest) {
Y_UNIT_TEST(TestComparison) {
// UNIT_ASSERT_VALUES_EQUAL needs a specialization for Out(), so we just use bool assertions
- TCompactVector<int> vector {1, 2, 3};
- TCompactVector<int> vector2 {1, 2};
- UNIT_ASSERT(vector != vector2); // diff size
+ TCompactVector<int> vector{1, 2, 3};
+ TCompactVector<int> vector2{1, 2};
+ UNIT_ASSERT(vector != vector2); // diff size
vector2.emplace_back(4);
- UNIT_ASSERT(vector != vector2); // diff values
+ UNIT_ASSERT(vector != vector2); // diff values
vector2.back() = 3;
UNIT_ASSERT(vector == vector2);
}
-}
+
+ Y_UNIT_TEST(TestReserve) {
+ TCompactVector vector = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+ UNIT_ASSERT_LT(vector.Capacity(), 100);
+ vector.reserve(100);
+ UNIT_ASSERT_GE(vector.Capacity(), 100);
+
+ UNIT_ASSERT_VALUES_EQUAL(vector.size(), 10);
+
+ for (size_t i = 0; i < 10; ++i) {
+ UNIT_ASSERT_VALUES_EQUAL(vector[i], i);
+ }
+ }
+
+ Y_UNIT_TEST(TestReserveWithMovableType) {
+ TCompactVector<TVector<int>> vector;
+ vector.EmplaceBack(TVector({1, 2, 3}));
+ vector.EmplaceBack(TVector({2, 4, 5, 6, 7}));
+
+ const int* ptr1 = vector[0].data();
+ const int* ptr2 = vector[1].data();
+ const size_t oldCapacity = vector.Capacity();
+
+ vector.Reserve(2 * oldCapacity);
+
+ UNIT_ASSERT_GE(vector.Capacity(), 2 * oldCapacity);
+
+ // check that values have been mooved, not copied
+ UNIT_ASSERT_VALUES_EQUAL(ptr1, vector[0].data());
+ UNIT_ASSERT_VALUES_EQUAL(ptr2, vector[1].data());
+ }
+} // Y_UNIT_TEST_SUITE(TCompactVectorTest)