1 /*
2 * test_rel_list.cc: Part of GNU CSSC.
3 *
4 * Copyright (C) 2010, 2011, 2014, 2019 Free Software Foundation, Inc.
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * Unit tests for rel_list.h.
20 *
21 */
22 #include "rel_list.h"
23 #include <gtest/gtest.h>
24
25
TEST(RelListTest,NullConstructor)26 TEST(RelListTest, NullConstructor)
27 {
28 release_list x;
29 ASSERT_TRUE(x.empty());
30 ASSERT_FALSE(x.valid());
31 }
32
TEST(RelListTest,StringConstructor)33 TEST(RelListTest, StringConstructor)
34 {
35 const release_list x("2,4");
36 ASSERT_TRUE(x.valid());
37 ASSERT_FALSE(x.empty());
38
39 ASSERT_FALSE(x.member(release(1)));
40 ASSERT_TRUE(x.member(release(2)));
41 ASSERT_FALSE(x.member(release(3)));
42 ASSERT_TRUE(x.member(release(4)));
43 ASSERT_FALSE(x.member(release(5)));
44 }
45
TEST(RelListTest,RefConstructor)46 TEST(RelListTest, RefConstructor)
47 {
48 const release_list y("2,4");
49 ASSERT_TRUE(y.valid());
50 ASSERT_FALSE(y.empty());
51
52 const release_list x(y);
53 ASSERT_TRUE(x.valid());
54 ASSERT_FALSE(x.empty());
55
56 ASSERT_FALSE(x.member(release(1)));
57 ASSERT_TRUE(x.member(release(2)));
58 ASSERT_FALSE(x.member(release(3)));
59 ASSERT_TRUE(x.member(release(4)));
60 ASSERT_FALSE(x.member(release(5)));
61 }
62
TEST(RelListTest,Membership)63 TEST(RelListTest, Membership)
64 {
65 const release_list y("2,4");
66 ASSERT_FALSE(y.member(release(1)));
67 ASSERT_TRUE(y.member(release(2)));
68 ASSERT_FALSE(y.member(release(3)));
69 ASSERT_TRUE(y.member(release(4)));
70 ASSERT_FALSE(y.member(release(5)));
71 }
72
TEST(RelListTest,MembershipOreder)73 TEST(RelListTest, MembershipOreder)
74 {
75 const release_list y("4,2");
76 ASSERT_FALSE(y.member(release(1)));
77 ASSERT_TRUE(y.member(release(2)));
78 ASSERT_FALSE(y.member(release(3)));
79 ASSERT_TRUE(y.member(release(4)));
80 ASSERT_FALSE(y.member(release(5)));
81 }
82
83
84
TEST(RLMerge,MergeBothEmpty)85 TEST(RLMerge, MergeBothEmpty)
86 {
87 release_list x, y;
88 ASSERT_TRUE(x.empty());
89 ASSERT_TRUE(y.empty());
90 x.merge(y);
91 ASSERT_TRUE(x.empty());
92 ASSERT_TRUE(y.empty());
93 }
94
TEST(RLMerge,MergeOntoEmpty)95 TEST(RLMerge, MergeOntoEmpty)
96 {
97 release_list x;
98 release_list y("2,4");
99
100 ASSERT_TRUE(y.valid());
101
102 ASSERT_TRUE(x.empty());
103 x.merge(y);
104 ASSERT_FALSE(x.empty());
105
106 ASSERT_TRUE(x.member(release(2)));
107 ASSERT_TRUE(x.member(release(4)));
108 ASSERT_FALSE(x.member(release(3)));
109 }
110
TEST(RLMerge,MergeDisjoint)111 TEST(RLMerge, MergeDisjoint)
112 {
113 release_list x, y("2,6");
114 x.merge(y);
115
116 ASSERT_TRUE(x.member(release(2)));
117 ASSERT_TRUE(x.member(release(6)));
118
119 // Make sure we didn't destroy the original.
120 ASSERT_TRUE(y.member(release(2)));
121 ASSERT_TRUE(y.member(release(6)));
122 }
123
TEST(RLMerge,MergeInterior)124 TEST(RLMerge, MergeInterior)
125 {
126 release_list x("2,6"), y("4");
127 x.merge(y);
128
129 ASSERT_TRUE(x.member(release(2)));
130 ASSERT_TRUE(x.member(release(4)));
131 ASSERT_TRUE(x.member(release(6)));
132 ASSERT_FALSE(x.member(release(3)));
133 }
134
TEST(RLMerge,MergeNoOp)135 TEST(RLMerge, MergeNoOp)
136 {
137 release_list x("2,6"), y("6,2");
138 x.merge(y);
139
140 ASSERT_TRUE(x.member(release(2)));
141 ASSERT_TRUE(x.member(release(6)));
142 }
143
144
145
TEST(RLRemove,BothEmpty)146 TEST(RLRemove, BothEmpty)
147 {
148 release_list x, y;
149 ASSERT_TRUE(x.empty());
150 ASSERT_TRUE(y.empty());
151 x.remove(y);
152 ASSERT_TRUE(x.empty());
153 ASSERT_TRUE(y.empty());
154 }
155
TEST(RLRemove,RhsEmpty)156 TEST(RLRemove, RhsEmpty)
157 {
158 release_list x("4,8"), y;
159 ASSERT_FALSE(x.empty());
160 ASSERT_TRUE(y.empty());
161 x.remove(y);
162 ASSERT_TRUE(y.empty());
163 ASSERT_TRUE(x.member(release(4)));
164 ASSERT_TRUE(x.member(release(8)));
165 }
166
TEST(RLRemove,LhsEmpty)167 TEST(RLRemove, LhsEmpty)
168 {
169 release_list x("4,8"), y;
170 ASSERT_FALSE(x.empty());
171 ASSERT_TRUE(y.empty());
172 y.remove(x);
173 ASSERT_TRUE(y.empty());
174 ASSERT_TRUE(x.member(release(4)));
175 ASSERT_TRUE(x.member(release(8)));
176 }
177
TEST(RLRemove,Identical)178 TEST(RLRemove, Identical)
179 {
180 const char *content = "4,8";
181 release_list x(content), y(content);
182 ASSERT_FALSE(x.empty());
183 ASSERT_FALSE(y.empty());
184 y.remove(x);
185 ASSERT_TRUE(y.empty());
186 }
187
TEST(RLRemove,RemoveSome)188 TEST(RLRemove, RemoveSome)
189 {
190 release_list x("4,6,8"), y("6");
191 ASSERT_FALSE(x.empty());
192 ASSERT_FALSE(y.empty());
193 x.remove(y);
194 ASSERT_TRUE(x.member(release(4)));
195 ASSERT_TRUE(x.member(release(8)));
196 ASSERT_FALSE(x.member(release(6)));
197 ASSERT_TRUE(y.member(release(6)));
198 }
199
TEST(RLRemove,RemoveAll)200 TEST(RLRemove, RemoveAll)
201 {
202 release_list x("4,6,8");
203 ASSERT_FALSE(x.empty());
204 ASSERT_TRUE(x.member(release(4)));
205 ASSERT_TRUE(x.member(release(6)));
206 ASSERT_TRUE(x.member(release(8)));
207 x.remove(release_list("4"));
208 ASSERT_FALSE(x.empty());
209 ASSERT_TRUE(x.member(release(6)));
210 ASSERT_TRUE(x.member(release(8)));
211 x.remove(release_list("6"));
212 ASSERT_FALSE(x.empty());
213 ASSERT_TRUE(x.member(release(8)));
214 x.remove(release_list("8"));
215 ASSERT_TRUE(x.empty());
216 ASSERT_FALSE(x.member(release(8)));
217 }
218