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:
Diffstat (limited to 'tests/gtests/blenlib/BLI_set_test.cc')
-rw-r--r--tests/gtests/blenlib/BLI_set_test.cc203
1 files changed, 203 insertions, 0 deletions
diff --git a/tests/gtests/blenlib/BLI_set_test.cc b/tests/gtests/blenlib/BLI_set_test.cc
new file mode 100644
index 00000000000..5baf069557e
--- /dev/null
+++ b/tests/gtests/blenlib/BLI_set_test.cc
@@ -0,0 +1,203 @@
+#include "testing/testing.h"
+#include "BLI_set.h"
+#include "BLI_vector.h"
+
+using BLI::Set;
+using BLI::Vector;
+using IntSet = Set<int>;
+
+TEST(set, Defaultconstructor)
+{
+ IntSet set;
+ EXPECT_EQ(set.size(), 0);
+}
+
+TEST(set, ContainsNotExistant)
+{
+ IntSet set;
+ EXPECT_FALSE(set.contains(3));
+}
+
+TEST(set, ContainsExistant)
+{
+ IntSet set;
+ EXPECT_FALSE(set.contains(5));
+ set.add(5);
+ EXPECT_TRUE(set.contains(5));
+}
+
+TEST(set, AddMany)
+{
+ IntSet set;
+ for (int i = 0; i < 100; i++) {
+ set.add(i);
+ }
+
+ for (int i = 50; i < 100; i++) {
+ EXPECT_TRUE(set.contains(i));
+ }
+ for (int i = 100; i < 150; i++) {
+ EXPECT_FALSE(set.contains(i));
+ }
+}
+
+TEST(set, InitializerListConstructor)
+{
+ IntSet set = {4, 5, 6};
+ EXPECT_EQ(set.size(), 3);
+ EXPECT_TRUE(set.contains(4));
+ EXPECT_TRUE(set.contains(5));
+ EXPECT_TRUE(set.contains(6));
+ EXPECT_FALSE(set.contains(2));
+ EXPECT_FALSE(set.contains(3));
+}
+
+TEST(set, CopyConstructor)
+{
+ IntSet set = {3};
+ EXPECT_TRUE(set.contains(3));
+ EXPECT_FALSE(set.contains(4));
+
+ IntSet set2 = set;
+ set2.add(4);
+ EXPECT_TRUE(set2.contains(3));
+ EXPECT_TRUE(set2.contains(4));
+
+ EXPECT_FALSE(set.contains(4));
+}
+
+TEST(set, MoveConstructor)
+{
+ IntSet set = {1, 2, 3};
+ EXPECT_EQ(set.size(), 3);
+ IntSet set2 = std::move(set);
+ EXPECT_EQ(set.size(), 0);
+ EXPECT_EQ(set2.size(), 3);
+}
+
+TEST(set, Remove)
+{
+ IntSet set = {3, 4, 5};
+ EXPECT_TRUE(set.contains(3));
+ EXPECT_TRUE(set.contains(4));
+ EXPECT_TRUE(set.contains(5));
+ set.remove(4);
+ EXPECT_TRUE(set.contains(3));
+ EXPECT_FALSE(set.contains(4));
+ EXPECT_TRUE(set.contains(5));
+ set.remove(3);
+ EXPECT_FALSE(set.contains(3));
+ EXPECT_FALSE(set.contains(4));
+ EXPECT_TRUE(set.contains(5));
+ set.remove(5);
+ EXPECT_FALSE(set.contains(3));
+ EXPECT_FALSE(set.contains(4));
+ EXPECT_FALSE(set.contains(5));
+}
+
+TEST(set, RemoveMany)
+{
+ IntSet set;
+ for (uint i = 0; i < 1000; i++) {
+ set.add(i);
+ }
+ for (uint i = 100; i < 1000; i++) {
+ set.remove(i);
+ }
+ for (uint i = 900; i < 1000; i++) {
+ set.add(i);
+ }
+
+ for (uint i = 0; i < 1000; i++) {
+ if (i < 100 || i >= 900) {
+ EXPECT_TRUE(set.contains(i));
+ }
+ else {
+ EXPECT_FALSE(set.contains(i));
+ }
+ }
+}
+
+TEST(set, Intersects)
+{
+ IntSet a = {3, 4, 5, 6};
+ IntSet b = {1, 2, 5};
+ EXPECT_TRUE(IntSet::Intersects(a, b));
+ EXPECT_FALSE(IntSet::Disjoint(a, b));
+}
+
+TEST(set, Disjoint)
+{
+ IntSet a = {5, 6, 7, 8};
+ IntSet b = {2, 3, 4, 9};
+ EXPECT_FALSE(IntSet::Intersects(a, b));
+ EXPECT_TRUE(IntSet::Disjoint(a, b));
+}
+
+TEST(set, AddMultiple)
+{
+ IntSet a;
+ a.add_multiple({5, 7});
+ EXPECT_TRUE(a.contains(5));
+ EXPECT_TRUE(a.contains(7));
+ EXPECT_FALSE(a.contains(4));
+ a.add_multiple({2, 4, 7});
+ EXPECT_TRUE(a.contains(4));
+ EXPECT_TRUE(a.contains(2));
+ EXPECT_EQ(a.size(), 4);
+}
+
+TEST(set, AddMultipleNew)
+{
+ IntSet a;
+ a.add_multiple_new({5, 6});
+ EXPECT_TRUE(a.contains(5));
+ EXPECT_TRUE(a.contains(6));
+}
+
+TEST(set, ToSmallVector)
+{
+ IntSet a = {5, 2, 8};
+ BLI::Vector<int> vec = a.to_small_vector();
+ EXPECT_EQ(vec.size(), 3);
+ EXPECT_TRUE(vec.contains(5));
+ EXPECT_TRUE(vec.contains(2));
+ EXPECT_TRUE(vec.contains(8));
+}
+
+TEST(set, Iterator)
+{
+ IntSet set = {1, 3, 2, 5, 4};
+ BLI::Vector<int> vec;
+ for (int value : set) {
+ vec.append(value);
+ }
+ EXPECT_EQ(vec.size(), 5);
+ EXPECT_TRUE(vec.contains(1));
+ EXPECT_TRUE(vec.contains(3));
+ EXPECT_TRUE(vec.contains(2));
+ EXPECT_TRUE(vec.contains(5));
+ EXPECT_TRUE(vec.contains(4));
+}
+
+TEST(set, OftenAddRemove)
+{
+ IntSet set;
+ for (int i = 0; i < 100; i++) {
+ set.add(42);
+ EXPECT_EQ(set.size(), 1);
+ set.remove(42);
+ EXPECT_EQ(set.size(), 0);
+ }
+}
+
+TEST(set, UniquePtrValues)
+{
+ Set<std::unique_ptr<int>> set;
+ set.add_new(std::unique_ptr<int>(new int()));
+ auto value1 = std::unique_ptr<int>(new int());
+ set.add_new(std::move(value1));
+ set.add(std::unique_ptr<int>(new int()));
+
+ EXPECT_EQ(set.size(), 3);
+}