• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2021 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "gn/pointer_set.h"
6 #include "util/test/test.h"
7 
8 struct Foo {
9   int x;
10 };
11 
12 static const Foo kFoo1[1] = {{1}};
13 static const Foo kFoo2[1] = {{2}};
14 static const Foo kFoo3[1] = {{3}};
15 
16 static const std::initializer_list<const Foo*> kFullList = {kFoo1, kFoo2,
17                                                             kFoo3};
18 
19 using TestPointerSet = PointerSet<const Foo>;
20 
TEST(PointerSet,DefaultConstruction)21 TEST(PointerSet, DefaultConstruction) {
22   TestPointerSet set;
23   EXPECT_TRUE(set.empty());
24   EXPECT_EQ(0u, set.size());
25   EXPECT_FALSE(set.contains(kFoo1));
26 }
27 
TEST(PointerSet,RangeConstruction)28 TEST(PointerSet, RangeConstruction) {
29   TestPointerSet set(kFullList.begin(), kFullList.end());
30   EXPECT_FALSE(set.empty());
31   EXPECT_EQ(3u, set.size());
32   EXPECT_TRUE(set.contains(kFoo1));
33   EXPECT_TRUE(set.contains(kFoo2));
34   EXPECT_TRUE(set.contains(kFoo3));
35 }
36 
TEST(PointerSet,CopyConstruction)37 TEST(PointerSet, CopyConstruction) {
38   TestPointerSet set1(kFullList.begin(), kFullList.end());
39   TestPointerSet set2(set1);
40   set1.clear();
41   EXPECT_TRUE(set1.empty());
42   EXPECT_FALSE(set2.empty());
43   EXPECT_EQ(3u, set2.size());
44   EXPECT_TRUE(set2.contains(kFoo1));
45   EXPECT_TRUE(set2.contains(kFoo2));
46   EXPECT_TRUE(set2.contains(kFoo3));
47 }
48 
TEST(PointerSet,MoveConstruction)49 TEST(PointerSet, MoveConstruction) {
50   TestPointerSet set1(kFullList.begin(), kFullList.end());
51   TestPointerSet set2(std::move(set1));
52   EXPECT_TRUE(set1.empty());
53   EXPECT_FALSE(set2.empty());
54   EXPECT_EQ(3u, set2.size());
55   EXPECT_TRUE(set2.contains(kFoo1));
56   EXPECT_TRUE(set2.contains(kFoo2));
57   EXPECT_TRUE(set2.contains(kFoo3));
58 }
59 
TEST(PointerSet,Add)60 TEST(PointerSet, Add) {
61   TestPointerSet set;
62   EXPECT_TRUE(set.add(kFoo1));
63   EXPECT_EQ(1u, set.size());
64   EXPECT_TRUE(set.contains(kFoo1));
65 
66   EXPECT_FALSE(set.add(kFoo1));
67   EXPECT_EQ(1u, set.size());
68   EXPECT_TRUE(set.contains(kFoo1));
69 
70   EXPECT_TRUE(set.add(kFoo2));
71   EXPECT_EQ(2u, set.size());
72   EXPECT_TRUE(set.contains(kFoo1));
73   EXPECT_TRUE(set.contains(kFoo2));
74 
75   EXPECT_FALSE(set.add(kFoo1));
76   EXPECT_FALSE(set.add(kFoo2));
77 
78   EXPECT_TRUE(set.add(kFoo3));
79   EXPECT_EQ(3u, set.size());
80   EXPECT_TRUE(set.contains(kFoo1));
81   EXPECT_TRUE(set.contains(kFoo2));
82   EXPECT_TRUE(set.contains(kFoo3));
83 
84   EXPECT_FALSE(set.add(kFoo1));
85   EXPECT_FALSE(set.add(kFoo2));
86   EXPECT_FALSE(set.add(kFoo3));
87 }
88 
TEST(PointerSet,Erase)89 TEST(PointerSet, Erase) {
90   TestPointerSet set(kFullList.begin(), kFullList.end());
91   EXPECT_EQ(3u, set.size());
92 
93   EXPECT_TRUE(set.erase(kFoo1));
94   EXPECT_EQ(2u, set.size());
95   EXPECT_FALSE(set.contains(kFoo1));
96   EXPECT_FALSE(set.erase(kFoo1));
97   EXPECT_EQ(2u, set.size());
98 
99   EXPECT_TRUE(set.erase(kFoo2));
100   EXPECT_EQ(1u, set.size());
101   EXPECT_FALSE(set.contains(kFoo2));
102   EXPECT_FALSE(set.erase(kFoo2));
103   EXPECT_EQ(1u, set.size());
104 
105   EXPECT_TRUE(set.erase(kFoo3));
106   EXPECT_EQ(0u, set.size());
107   EXPECT_FALSE(set.contains(kFoo3));
108   EXPECT_FALSE(set.erase(kFoo3));
109   EXPECT_EQ(0u, set.size());
110 }
111 
TEST(PointerSet,RangeInsert)112 TEST(PointerSet, RangeInsert) {
113   TestPointerSet set;
114   set.insert(kFullList.begin(), kFullList.end());
115   EXPECT_EQ(3u, set.size());
116   EXPECT_TRUE(set.contains(kFoo1));
117   EXPECT_TRUE(set.contains(kFoo2));
118   EXPECT_TRUE(set.contains(kFoo3));
119 
120   set.insert(kFullList.begin(), kFullList.end());
121   EXPECT_EQ(3u, set.size());
122 }
123 
TEST(PointerSet,InsertOther)124 TEST(PointerSet, InsertOther) {
125   TestPointerSet set1(kFullList.begin(), kFullList.end());
126   TestPointerSet set2;
127   set2.add(kFoo1);
128   set1.insert(set2);
129   EXPECT_EQ(3u, set1.size());
130   EXPECT_EQ(1u, set2.size());
131 
132   set1.clear();
133   set1.add(kFoo1);
134   set2.clear();
135   set2.add(kFoo3);
136   set1.insert(set2);
137   EXPECT_EQ(2u, set1.size());
138   EXPECT_EQ(1u, set2.size());
139   EXPECT_TRUE(set1.contains(kFoo1));
140   EXPECT_TRUE(set1.contains(kFoo3));
141 }
142 
TEST(PointerSet,IntersectionWith)143 TEST(PointerSet, IntersectionWith) {
144   TestPointerSet set1;
145   TestPointerSet set2;
146 
147   set1.add(kFoo1);
148   set2.add(kFoo3);
149 
150   TestPointerSet set = set1.intersection_with(set2);
151   EXPECT_TRUE(set.empty());
152 
153   set1.add(kFoo2);
154   set2.add(kFoo2);
155 
156   set = set1.intersection_with(set2);
157   EXPECT_FALSE(set.empty());
158   EXPECT_EQ(1u, set.size());
159   EXPECT_TRUE(set.contains(kFoo2));
160 
161   set1.insert(kFullList.begin(), kFullList.end());
162   set2 = set1;
163   set = set1.intersection_with(set2);
164   EXPECT_EQ(3u, set.size());
165   EXPECT_EQ(set1, set);
166   EXPECT_EQ(set2, set);
167 }
168