Skip to content

Commit 7ff93a4

Browse files
committed
Unit tests for ScopedVector
1 parent f7966f7 commit 7ff93a4

File tree

2 files changed

+226
-0
lines changed

2 files changed

+226
-0
lines changed

test/unit/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,3 +251,11 @@ target_sources(StopTest
251251

252252
target_link_libraries(StopTest OpenSMT gtest gtest_main)
253253
gtest_add_tests(TARGET StopTest)
254+
255+
add_executable(ScopedVectorTest)
256+
target_sources(ScopedVectorTest
257+
PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/test_ScopedVector.cc"
258+
)
259+
260+
target_link_libraries(ScopedVectorTest OpenSMT gtest gtest_main)
261+
gtest_add_tests(TARGET ScopedVectorTest)

test/unit/test_ScopedVector.cc

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
/*
2+
* Copyright (c) 2025, Tomas Kolarik <tomaqa@gmail.com>
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#include <gtest/gtest.h>
9+
#include <common/ScopedVector.h>
10+
11+
namespace opensmt {
12+
13+
class Test : public ::testing::Test {
14+
public:
15+
Test() {}
16+
17+
bool compare(std::vector<int> const & v) const {
18+
return compareTp(svector, v);
19+
}
20+
21+
bool compareTopScope(std::vector<int> const & v) const {
22+
return compareTp(svector.topScope(), v);
23+
}
24+
25+
bool compareScope(std::size_t idx, std::vector<int> const & v) const {
26+
return compareTp(svector.scope(idx), v);
27+
}
28+
29+
protected:
30+
bool compareTp(auto const & sv, std::vector<int> const & v) const {
31+
if (sv.size() != v.size()) { return false; }
32+
auto vIt = v.begin();
33+
for (auto & sve : sv) {
34+
auto & ve = *vIt++;
35+
if (sve != ve) { return false; }
36+
}
37+
38+
auto * vptr = v.data();
39+
auto * svptr = sv.data();
40+
for (size_t i = 0; i < sv.size(); ++i) {
41+
auto & sve = *svptr++;
42+
auto & ve = *vptr++;
43+
if (sve != ve) { return false; }
44+
}
45+
46+
return true;
47+
}
48+
49+
ScopedVector<int> svector;
50+
};
51+
52+
TEST_F(Test, test_ScopeVector1) {
53+
ASSERT_TRUE(compare({}));
54+
ASSERT_TRUE(compareTopScope({}));
55+
ASSERT_TRUE(compareScope(0, {}));
56+
ASSERT_EQ(svector.scopeCount(), 1);
57+
svector.push(1);
58+
ASSERT_TRUE(compare({1}));
59+
ASSERT_TRUE(compareTopScope({1}));
60+
ASSERT_TRUE(compareScope(0, {1}));
61+
ASSERT_EQ(svector.scopeCount(), 1);
62+
svector.push(2);
63+
ASSERT_TRUE(compare({1, 2}));
64+
ASSERT_TRUE(compareTopScope({1, 2}));
65+
ASSERT_TRUE(compareScope(0, {1, 2}));
66+
ASSERT_EQ(svector.scopeCount(), 1);
67+
68+
svector.pushScope();
69+
ASSERT_TRUE(compare({1, 2}));
70+
ASSERT_TRUE(compareTopScope({}));
71+
ASSERT_TRUE(compareScope(1, {}));
72+
ASSERT_TRUE(compareScope(0, {1, 2}));
73+
ASSERT_EQ(svector.scopeCount(), 2);
74+
svector.push(3);
75+
ASSERT_TRUE(compare({1, 2, 3}));
76+
ASSERT_TRUE(compareTopScope({3}));
77+
ASSERT_TRUE(compareScope(1, {3}));
78+
ASSERT_TRUE(compareScope(0, {1, 2}));
79+
ASSERT_EQ(svector.scopeCount(), 2);
80+
svector.push(4);
81+
ASSERT_TRUE(compare({1, 2, 3, 4}));
82+
ASSERT_TRUE(compareTopScope({3, 4}));
83+
ASSERT_TRUE(compareScope(1, {3, 4}));
84+
ASSERT_TRUE(compareScope(0, {1, 2}));
85+
ASSERT_EQ(svector.scopeCount(), 2);
86+
87+
svector.pushScope();
88+
ASSERT_TRUE(compare({1, 2, 3, 4}));
89+
ASSERT_TRUE(compareTopScope({}));
90+
ASSERT_TRUE(compareScope(2, {}));
91+
ASSERT_TRUE(compareScope(1, {3, 4}));
92+
ASSERT_TRUE(compareScope(0, {1, 2}));
93+
ASSERT_EQ(svector.scopeCount(), 3);
94+
svector.popScope();
95+
ASSERT_TRUE(compare({1, 2, 3, 4}));
96+
ASSERT_TRUE(compareTopScope({3, 4}));
97+
ASSERT_TRUE(compareScope(1, {3, 4}));
98+
ASSERT_TRUE(compareScope(0, {1, 2}));
99+
ASSERT_EQ(svector.scopeCount(), 2);
100+
101+
svector.pushScope();
102+
ASSERT_TRUE(compare({1, 2, 3, 4}));
103+
ASSERT_TRUE(compareTopScope({}));
104+
ASSERT_TRUE(compareScope(2, {}));
105+
ASSERT_TRUE(compareScope(1, {3, 4}));
106+
ASSERT_TRUE(compareScope(0, {1, 2}));
107+
ASSERT_EQ(svector.scopeCount(), 3);
108+
svector.push(5);
109+
ASSERT_TRUE(compare({1, 2, 3, 4, 5}));
110+
ASSERT_TRUE(compareTopScope({5}));
111+
ASSERT_TRUE(compareScope(2, {5}));
112+
ASSERT_TRUE(compareScope(1, {3, 4}));
113+
ASSERT_TRUE(compareScope(0, {1, 2}));
114+
ASSERT_EQ(svector.scopeCount(), 3);
115+
svector.popScope();
116+
ASSERT_TRUE(compare({1, 2, 3, 4}));
117+
ASSERT_TRUE(compareTopScope({3, 4}));
118+
ASSERT_TRUE(compareScope(1, {3, 4}));
119+
ASSERT_TRUE(compareScope(0, {1, 2}));
120+
ASSERT_EQ(svector.scopeCount(), 2);
121+
122+
svector.popScope();
123+
ASSERT_TRUE(compare({1, 2}));
124+
ASSERT_TRUE(compareTopScope({1, 2}));
125+
ASSERT_TRUE(compareScope(0, {1, 2}));
126+
ASSERT_EQ(svector.scopeCount(), 1);
127+
svector.pushScope();
128+
ASSERT_TRUE(compare({1, 2}));
129+
ASSERT_TRUE(compareTopScope({}));
130+
ASSERT_TRUE(compareScope(1, {}));
131+
ASSERT_TRUE(compareScope(0, {1, 2}));
132+
ASSERT_EQ(svector.scopeCount(), 2);
133+
svector.push(6);
134+
ASSERT_TRUE(compare({1, 2, 6}));
135+
ASSERT_TRUE(compareTopScope({6}));
136+
ASSERT_TRUE(compareScope(1, {6}));
137+
ASSERT_TRUE(compareScope(0, {1, 2}));
138+
ASSERT_EQ(svector.scopeCount(), 2);
139+
140+
svector.popScope();
141+
ASSERT_TRUE(compare({1, 2}));
142+
ASSERT_TRUE(compareTopScope({1, 2}));
143+
ASSERT_TRUE(compareScope(0, {1, 2}));
144+
ASSERT_EQ(svector.scopeCount(), 1);
145+
146+
svector.clear();
147+
ASSERT_TRUE(compare({}));
148+
ASSERT_TRUE(compareTopScope({}));
149+
ASSERT_TRUE(compareScope(0, {}));
150+
ASSERT_EQ(svector.scopeCount(), 1);
151+
}
152+
153+
TEST_F(Test, test_ScopeVector2) {
154+
svector.pushScope();
155+
ASSERT_TRUE(compare({}));
156+
ASSERT_TRUE(compareTopScope({}));
157+
ASSERT_TRUE(compareScope(1, {}));
158+
ASSERT_TRUE(compareScope(0, {}));
159+
ASSERT_EQ(svector.scopeCount(), 2);
160+
svector.push(1);
161+
ASSERT_TRUE(compare({1}));
162+
ASSERT_TRUE(compareTopScope({1}));
163+
ASSERT_TRUE(compareScope(1, {1}));
164+
ASSERT_TRUE(compareScope(0, {}));
165+
ASSERT_EQ(svector.scopeCount(), 2);
166+
svector.push(2);
167+
ASSERT_TRUE(compare({1, 2}));
168+
ASSERT_TRUE(compareTopScope({1, 2}));
169+
ASSERT_TRUE(compareScope(1, {1, 2}));
170+
ASSERT_TRUE(compareScope(0, {}));
171+
ASSERT_EQ(svector.scopeCount(), 2);
172+
173+
svector.popScope();
174+
ASSERT_TRUE(compare({}));
175+
ASSERT_TRUE(compareTopScope({}));
176+
ASSERT_TRUE(compareScope(0, {}));
177+
ASSERT_EQ(svector.scopeCount(), 1);
178+
179+
svector.clear();
180+
ASSERT_TRUE(compare({}));
181+
ASSERT_TRUE(compareTopScope({}));
182+
ASSERT_TRUE(compareScope(0, {}));
183+
ASSERT_EQ(svector.scopeCount(), 1);
184+
}
185+
186+
TEST_F(Test, test_ScopeVector3) {
187+
svector.push(11);
188+
ASSERT_TRUE(compare({11}));
189+
ASSERT_TRUE(compareTopScope({11}));
190+
ASSERT_TRUE(compareScope(0, {11}));
191+
ASSERT_EQ(svector.scopeCount(), 1);
192+
svector.push(22);
193+
ASSERT_TRUE(compare({11, 22}));
194+
ASSERT_TRUE(compareTopScope({11, 22}));
195+
ASSERT_TRUE(compareScope(0, {11, 22}));
196+
ASSERT_EQ(svector.scopeCount(), 1);
197+
198+
svector.pushScope();
199+
ASSERT_TRUE(compare({11, 22}));
200+
ASSERT_TRUE(compareTopScope({}));
201+
ASSERT_TRUE(compareScope(1, {}));
202+
ASSERT_TRUE(compareScope(0, {11, 22}));
203+
ASSERT_EQ(svector.scopeCount(), 2);
204+
svector.push(33);
205+
ASSERT_TRUE(compare({11, 22, 33}));
206+
ASSERT_TRUE(compareTopScope({33}));
207+
ASSERT_TRUE(compareScope(1, {33}));
208+
ASSERT_TRUE(compareScope(0, {11, 22}));
209+
ASSERT_EQ(svector.scopeCount(), 2);
210+
211+
svector.clear();
212+
ASSERT_TRUE(compare({}));
213+
ASSERT_TRUE(compareTopScope({}));
214+
ASSERT_TRUE(compareScope(0, {}));
215+
ASSERT_EQ(svector.scopeCount(), 1);
216+
}
217+
218+
}

0 commit comments

Comments
 (0)