@@ -105,3 +105,35 @@ TEST_CASE("struct encoding of expressions", "[core][smt2_incremental]")
105
105
REQUIRE (test.struct_encoding .encode (struct_expr) == expected_result);
106
106
}
107
107
}
108
+
109
+ TEST_CASE (
110
+ " encoding of single member struct expressions" ,
111
+ " [core][smt2_incremental]" )
112
+ {
113
+ const struct_union_typet::componentst component_types{
114
+ {" eggs" , signedbv_typet{32 }}};
115
+ const type_symbolt type_symbol{" foot" , struct_typet{component_types}, ID_C};
116
+ auto test = struct_encoding_test_environmentt::make ();
117
+ test.symbol_table .insert (type_symbol);
118
+ const struct_tag_typet struct_tag{type_symbol.name };
119
+ const symbolt struct_value_symbol{" foo" , struct_tag, ID_C};
120
+ test.symbol_table .insert (struct_value_symbol);
121
+ const auto symbol_expr = struct_value_symbol.symbol_expr ();
122
+ const auto symbol_expr_as_bv = symbol_exprt{" foo" , bv_typet{32 }};
123
+ SECTION (" struct typed symbol expression" )
124
+ {
125
+ REQUIRE (test.struct_encoding .encode (symbol_expr) == symbol_expr_as_bv);
126
+ }
127
+ SECTION (" struct equality expression" )
128
+ {
129
+ const auto struct_equal = equal_exprt{symbol_expr, symbol_expr};
130
+ const auto bv_equal = equal_exprt{symbol_expr_as_bv, symbol_expr_as_bv};
131
+ REQUIRE (test.struct_encoding .encode (struct_equal) == bv_equal);
132
+ }
133
+ SECTION (" expression for a struct from (single item) list of components" )
134
+ {
135
+ const auto dozen = from_integer (12 , signedbv_typet{32 });
136
+ const struct_exprt struct_expr{{dozen}, struct_tag};
137
+ REQUIRE (test.struct_encoding .encode (struct_expr) == dozen);
138
+ }
139
+ }
0 commit comments