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