Skip to content

Commit 13e601b

Browse files
committed
Add unit test of object_size expression to smt conversion
1 parent 5e7ded2 commit 13e601b

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

unit/solvers/smt2_incremental/convert_expr_to_smt.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1316,3 +1316,28 @@ TEST_CASE("pointer_offset_exprt to SMT conversion", "[core][smt2_incremental]")
13161316
}
13171317
}
13181318
}
1319+
1320+
TEST_CASE(
1321+
"expr to smt conversion for object size expressions",
1322+
"[core][smt2_incremental]")
1323+
{
1324+
auto test =
1325+
expr_to_smt_conversion_test_environmentt::make(test_archt::x86_64);
1326+
const symbol_tablet symbol_table;
1327+
const namespacet ns{symbol_table};
1328+
const symbol_exprt foo{"foo", unsignedbv_typet{32}};
1329+
const object_size_exprt object_size{
1330+
address_of_exprt{foo}, unsignedbv_typet{64}};
1331+
track_expression_objects(object_size, ns, test.object_map);
1332+
const auto foo_id = 1;
1333+
CHECK(test.object_map.at(foo).unique_id == foo_id);
1334+
const auto object_bits = config.bv_encoding.object_bits;
1335+
const auto object = smt_bit_vector_constant_termt{foo_id, object_bits};
1336+
const auto offset = smt_bit_vector_constant_termt{0, 64 - object_bits};
1337+
INFO("Expression " + object_size.pretty(1, 0));
1338+
CHECK(
1339+
test.convert(object_size) ==
1340+
test.object_size_function.make_application(std::vector<smt_termt>{
1341+
smt_bit_vector_theoryt::extract(63, 64 - object_bits)(
1342+
smt_bit_vector_theoryt::concat(object, offset))}));
1343+
}

0 commit comments

Comments
 (0)