Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2020-06-09 11:10:56 +0300
committerJacques Lucke <jacques@blender.org>2020-06-09 11:15:43 +0300
commitd8678e02ecec9375bec1dcf1388c6fc8b4ce3ad2 (patch)
tree6e7d2a7452091877f73d413d830e6cb12e86745f /tests/gtests/blenlib/BLI_vector_set_test.cc
parent50258d55e7c1360274d40e303386cf70b16c8b2f (diff)
BLI: generally improve C++ data structures
The main focus here was to improve the docs significantly. Furthermore, I reimplemented `Set`, `Map` and `VectorSet`. They are now (usually) faster, simpler and more customizable. I also rewrote `Stack` to make it more efficient by avoiding unnecessary copies. Thanks to everyone who helped with constructive feedback. Approved by brecht and sybren. Differential Revision: https://developer.blender.org/D7931
Diffstat (limited to 'tests/gtests/blenlib/BLI_vector_set_test.cc')
-rw-r--r--tests/gtests/blenlib/BLI_vector_set_test.cc96
1 files changed, 60 insertions, 36 deletions
diff --git a/tests/gtests/blenlib/BLI_vector_set_test.cc b/tests/gtests/blenlib/BLI_vector_set_test.cc
index bfdd47ccb13..87162c9920a 100644
--- a/tests/gtests/blenlib/BLI_vector_set_test.cc
+++ b/tests/gtests/blenlib/BLI_vector_set_test.cc
@@ -1,19 +1,19 @@
+#include "BLI_strict_flags.h"
#include "BLI_vector_set.hh"
#include "testing/testing.h"
using BLI::VectorSet;
-using IntVectorSet = VectorSet<int>;
TEST(vector_set, DefaultConstructor)
{
- IntVectorSet set;
+ VectorSet<int> set;
EXPECT_EQ(set.size(), 0);
EXPECT_TRUE(set.is_empty());
}
TEST(vector_set, InitializerListConstructor_WithoutDuplicates)
{
- IntVectorSet set = {1, 4, 5};
+ VectorSet<int> set = {1, 4, 5};
EXPECT_EQ(set.size(), 3);
EXPECT_EQ(set[0], 1);
EXPECT_EQ(set[1], 4);
@@ -22,7 +22,7 @@ TEST(vector_set, InitializerListConstructor_WithoutDuplicates)
TEST(vector_set, InitializerListConstructor_WithDuplicates)
{
- IntVectorSet set = {1, 3, 3, 2, 1, 5};
+ VectorSet<int> set = {1, 3, 3, 2, 1, 5};
EXPECT_EQ(set.size(), 4);
EXPECT_EQ(set[0], 1);
EXPECT_EQ(set[1], 3);
@@ -32,37 +32,37 @@ TEST(vector_set, InitializerListConstructor_WithDuplicates)
TEST(vector_set, Copy)
{
- IntVectorSet set1 = {1, 2, 3};
- IntVectorSet set2 = set1;
+ VectorSet<int> set1 = {1, 2, 3};
+ VectorSet<int> set2 = set1;
EXPECT_EQ(set1.size(), 3);
EXPECT_EQ(set2.size(), 3);
- EXPECT_EQ(set1.index(2), 1);
- EXPECT_EQ(set2.index(2), 1);
+ EXPECT_EQ(set1.index_of(2), 1);
+ EXPECT_EQ(set2.index_of(2), 1);
}
TEST(vector_set, CopyAssignment)
{
- IntVectorSet set1 = {1, 2, 3};
- IntVectorSet set2 = {};
+ VectorSet<int> set1 = {1, 2, 3};
+ VectorSet<int> set2 = {};
set2 = set1;
EXPECT_EQ(set1.size(), 3);
EXPECT_EQ(set2.size(), 3);
- EXPECT_EQ(set1.index(2), 1);
- EXPECT_EQ(set2.index(2), 1);
+ EXPECT_EQ(set1.index_of(2), 1);
+ EXPECT_EQ(set2.index_of(2), 1);
}
TEST(vector_set, Move)
{
- IntVectorSet set1 = {1, 2, 3};
- IntVectorSet set2 = std::move(set1);
+ VectorSet<int> set1 = {1, 2, 3};
+ VectorSet<int> set2 = std::move(set1);
EXPECT_EQ(set1.size(), 0);
EXPECT_EQ(set2.size(), 3);
}
TEST(vector_set, MoveAssignment)
{
- IntVectorSet set1 = {1, 2, 3};
- IntVectorSet set2 = {};
+ VectorSet<int> set1 = {1, 2, 3};
+ VectorSet<int> set2 = {};
set2 = std::move(set1);
EXPECT_EQ(set1.size(), 0);
EXPECT_EQ(set2.size(), 3);
@@ -70,7 +70,7 @@ TEST(vector_set, MoveAssignment)
TEST(vector_set, AddNewIncreasesSize)
{
- IntVectorSet set;
+ VectorSet<int> set;
EXPECT_TRUE(set.is_empty());
EXPECT_EQ(set.size(), 0);
set.add(5);
@@ -80,57 +80,81 @@ TEST(vector_set, AddNewIncreasesSize)
TEST(vector_set, AddExistingDoesNotIncreaseSize)
{
- IntVectorSet set;
+ VectorSet<int> set;
EXPECT_EQ(set.size(), 0);
- set.add(5);
+ EXPECT_TRUE(set.add(5));
EXPECT_EQ(set.size(), 1);
- set.add(5);
+ EXPECT_FALSE(set.add(5));
EXPECT_EQ(set.size(), 1);
}
TEST(vector_set, Index)
{
- IntVectorSet set = {3, 6, 4};
- EXPECT_EQ(set.index(6), 1);
- EXPECT_EQ(set.index(3), 0);
- EXPECT_EQ(set.index(4), 2);
+ VectorSet<int> set = {3, 6, 4};
+ EXPECT_EQ(set.index_of(6), 1);
+ EXPECT_EQ(set.index_of(3), 0);
+ EXPECT_EQ(set.index_of(4), 2);
}
TEST(vector_set, IndexTry)
{
- IntVectorSet set = {3, 6, 4};
- EXPECT_EQ(set.index_try(5), -1);
- EXPECT_EQ(set.index_try(3), 0);
- EXPECT_EQ(set.index_try(6), 1);
- EXPECT_EQ(set.index_try(2), -1);
+ VectorSet<int> set = {3, 6, 4};
+ EXPECT_EQ(set.index_of_try(5), -1);
+ EXPECT_EQ(set.index_of_try(3), 0);
+ EXPECT_EQ(set.index_of_try(6), 1);
+ EXPECT_EQ(set.index_of_try(2), -1);
}
-TEST(vector_set, Remove)
+TEST(vector_set, RemoveContained)
{
- IntVectorSet set = {4, 5, 6, 7};
+ VectorSet<int> set = {4, 5, 6, 7};
EXPECT_EQ(set.size(), 4);
- set.remove(5);
+ set.remove_contained(5);
EXPECT_EQ(set.size(), 3);
EXPECT_EQ(set[0], 4);
EXPECT_EQ(set[1], 7);
EXPECT_EQ(set[2], 6);
- set.remove(6);
+ set.remove_contained(6);
EXPECT_EQ(set.size(), 2);
EXPECT_EQ(set[0], 4);
EXPECT_EQ(set[1], 7);
- set.remove(4);
+ set.remove_contained(4);
EXPECT_EQ(set.size(), 1);
EXPECT_EQ(set[0], 7);
- set.remove(7);
+ set.remove_contained(7);
EXPECT_EQ(set.size(), 0);
}
+TEST(vector_set, AddMultipleTimes)
+{
+ VectorSet<int> set;
+ for (int i = 0; i < 100; i++) {
+ EXPECT_FALSE(set.contains(i * 13));
+ set.add(i * 12);
+ set.add(i * 13);
+ EXPECT_TRUE(set.contains(i * 13));
+ }
+}
+
TEST(vector_set, UniquePtrValue)
{
VectorSet<std::unique_ptr<int>> set;
set.add_new(std::unique_ptr<int>(new int()));
set.add(std::unique_ptr<int>(new int()));
- set.index_try(std::unique_ptr<int>(new int()));
+ set.index_of_try(std::unique_ptr<int>(new int()));
std::unique_ptr<int> value = set.pop();
UNUSED_VARS(value);
}
+
+TEST(vector_set, Remove)
+{
+ VectorSet<int> set;
+ EXPECT_TRUE(set.add(5));
+ EXPECT_TRUE(set.contains(5));
+ EXPECT_FALSE(set.remove(6));
+ EXPECT_TRUE(set.contains(5));
+ EXPECT_TRUE(set.remove(5));
+ EXPECT_FALSE(set.contains(5));
+ EXPECT_FALSE(set.remove(5));
+ EXPECT_FALSE(set.contains(5));
+}