Skip to content

Commit 97457ea

Browse files
authored
Merge pull request diffblue#4761 from romainbrenguier/unit-test/ssa_expr
Make ssa_exprt unit test more complete
2 parents 0b8c742 + a8399f1 commit 97457ea

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

unit/util/ssa_expr.cpp

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,22 +156,50 @@ TEST_CASE("ssa_exprt::get_object_name", "[unit][util][ssa_expr]")
156156

157157
TEST_CASE("ssa_exprt::get_l1_object", "[unit][util][ssa_expr]")
158158
{
159+
const signedbv_typet int_type{32};
160+
const array_typet array_type{int_type, from_integer(10, int_type)};
161+
162+
GIVEN("An ssa_exprt obtained from a symbol")
163+
{
164+
const symbol_exprt symbol{"sym", int_type};
165+
ssa_exprt ssa{symbol};
166+
ssa.set_level_0(1);
167+
ssa.set_level_1(3);
168+
ssa.set_level_2(7);
169+
170+
// Check we have constructed the desired SSA expression
171+
REQUIRE(ssa.get_identifier() == "sym!1@3#7");
172+
173+
WHEN("get_l1_object is called on the SSA expression")
174+
{
175+
const ssa_exprt l1_object = ssa.get_l1_object();
176+
THEN("level 0 and level 1 are the same, l2 is removed")
177+
{
178+
REQUIRE(l1_object.get_level_0() == "1");
179+
REQUIRE(l1_object.get_level_1() == "3");
180+
REQUIRE(l1_object.get_level_2() == irep_idt{});
181+
REQUIRE(l1_object.get_identifier() == "sym!1@3");
182+
}
183+
}
184+
}
185+
159186
GIVEN("An ssa_exprt containing member access, array access and a symbol")
160187
{
161-
const signedbv_typet int_type{32};
162-
const array_typet array_type{int_type, from_integer(10, int_type)};
163188
std::vector<struct_typet::componentt> components;
164189
components.emplace_back("array_field", array_type);
165190
const struct_typet struct_type{components};
166191
const symbol_exprt symbol{"sym", struct_type};
167192
const index_exprt index{member_exprt{symbol, components.back()},
168193
from_integer(9, int_type)};
169-
ssa_exprt ssa{symbol};
194+
ssa_exprt ssa{index};
170195
ssa.set_level_0(1);
171196
ssa.set_level_1(3);
172197
ssa.set_level_2(7);
173198

174-
WHEN("get_l1_object is called")
199+
// Check we have constructed the desired SSA expression
200+
REQUIRE(ssa.get_identifier() == "sym!1@3#7..array_field[[9]]");
201+
202+
WHEN("get_l1_object is called on the SSA expression")
175203
{
176204
const ssa_exprt l1_object = ssa.get_l1_object();
177205
THEN("level 0 and level 1 are the same, l2 is removed")

0 commit comments

Comments
 (0)