|
16 | 16 | #include <util/namespace.h>
|
17 | 17 | #include <util/pointer_predicates.h>
|
18 | 18 | #include <util/simplify_expr.h>
|
| 19 | +#include <util/simplify_expr_class.h> |
19 | 20 | #include <util/std_expr.h>
|
20 | 21 | #include <util/symbol_table.h>
|
21 | 22 |
|
@@ -80,3 +81,28 @@ TEST_CASE("Simplify byte extract")
|
80 | 81 |
|
81 | 82 | REQUIRE(simp == s);
|
82 | 83 | }
|
| 84 | + |
| 85 | +TEST_CASE("expr2bits and bits2expr respect bit order") |
| 86 | +{ |
| 87 | + symbol_tablet symbol_table; |
| 88 | + namespacet ns(symbol_table); |
| 89 | + simplify_exprt simp(ns); |
| 90 | + |
| 91 | + exprt deadbeef = from_integer(0xdeadbeef, unsignedbv_typet(32)); |
| 92 | + |
| 93 | + const auto le = simp.expr2bits(deadbeef, true); |
| 94 | + REQUIRE(le.has_value()); |
| 95 | + REQUIRE(le->size() == 32); |
| 96 | + |
| 97 | + const exprt should_be_deadbeef1 = |
| 98 | + simp.bits2expr(*le, unsignedbv_typet(32), true); |
| 99 | + REQUIRE(deadbeef == should_be_deadbeef1); |
| 100 | + |
| 101 | + const auto be = simp.expr2bits(deadbeef, false); |
| 102 | + REQUIRE(be.has_value()); |
| 103 | + REQUIRE(be->size() == 32); |
| 104 | + |
| 105 | + const exprt should_be_deadbeef2 = |
| 106 | + simp.bits2expr(*be, unsignedbv_typet(32), false); |
| 107 | + REQUIRE(deadbeef == should_be_deadbeef2); |
| 108 | +} |
0 commit comments