Skip to content

Commit 767d8f0

Browse files
Test try_evaluate_pointer_comparisons unknown case
This adds a unit test for the case where the value set contains unknown. In that case no comparison can be decided.
1 parent c024823 commit 767d8f0

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

unit/goto-symex/try_evaluate_pointer_comparisons.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,58 @@ SCENARIO(
156156
}
157157
}
158158

159+
GIVEN(
160+
"A value set in which pointer symbol `ptr1` can point to `&value1` or "
161+
"`unknown`")
162+
{
163+
value_sett value_set;
164+
const exprt unknown_expr{ID_unknown, ptr_type};
165+
const if_exprt if_expr{b, address1, unknown_expr};
166+
const renamedt<exprt, L1> ptr1_l1 = state.rename<L1>(ptr1, ns);
167+
const renamedt<exprt, L1> if_expr_l1 = state.rename<L1>(if_expr, ns);
168+
// ptr1 <- b ? &value1 : unknown
169+
value_set.assign(ptr1_l1.get(), if_expr_l1.get(), ns, false, false);
170+
171+
WHEN("Evaluating ptr1 == &value1")
172+
{
173+
const equal_exprt comparison{ptr1, address1};
174+
const renamedt<exprt, L2> renamed_comparison =
175+
state.rename(comparison, ns);
176+
auto result = try_evaluate_pointer_comparisons(
177+
renamed_comparison, value_set, ID_java, ns);
178+
THEN("Evaluation leaves the expression unchanged")
179+
{
180+
REQUIRE(result.get() == renamed_comparison.get());
181+
}
182+
}
183+
184+
WHEN("Evaluating ptr1 != &value1")
185+
{
186+
const notequal_exprt comparison{ptr1, address1};
187+
const renamedt<exprt, L2> renamed_comparison =
188+
state.rename(comparison, ns);
189+
auto result = try_evaluate_pointer_comparisons(
190+
renamed_comparison, value_set, ID_java, ns);
191+
THEN("Evaluation leaves the expression unchanged")
192+
{
193+
REQUIRE(result.get() == renamed_comparison.get());
194+
}
195+
}
196+
197+
WHEN("Evaluating ptr1 != nullptr")
198+
{
199+
const notequal_exprt comparison{ptr1, null_ptr};
200+
const renamedt<exprt, L2> renamed_comparison =
201+
state.rename(comparison, ns);
202+
auto result = try_evaluate_pointer_comparisons(
203+
renamed_comparison, value_set, ID_java, ns);
204+
THEN("Evaluation leaves the expression unchanged")
205+
{
206+
REQUIRE(result.get() == renamed_comparison.get());
207+
}
208+
}
209+
}
210+
159211
GIVEN("A struct whose first element can only point to `&value1`")
160212
{
161213
// member is `struct_symbol.pointer_field`

0 commit comments

Comments
 (0)