@@ -61,22 +61,87 @@ TEST_CASE("Simplify const pointer offset")
61
61
REQUIRE (offset_value==1234 );
62
62
}
63
63
64
- TEST_CASE (" Simplify Java boolean -> int -> boolean casts" )
64
+ namespace
65
+ {
66
+
67
+ void test_unnecessary_cast (const typet &type)
65
68
{
66
69
config.set_arch (" none" );
67
70
68
- const exprt simplified=simplify_expr (
69
- typecast_exprt (
71
+ WHEN (" The casts can be removed, they are" )
72
+ {
73
+ const exprt simplified=simplify_expr (
70
74
typecast_exprt (
71
- symbol_exprt (
72
- " foo" ,
73
- java_boolean_type ()),
74
- java_int_type ()),
75
- java_boolean_type ()),
76
- namespacet (symbol_tablet ()));
77
-
78
- REQUIRE (simplified.id ()==ID_symbol);
79
- REQUIRE (simplified.type ()==java_boolean_type ());
80
- const auto &symbol=to_symbol_expr (simplified);
81
- REQUIRE (symbol.get_identifier ()==" foo" );
75
+ typecast_exprt (symbol_exprt (" foo" , type), java_int_type ()),
76
+ type),
77
+ namespacet (symbol_tablet ()));
78
+
79
+ REQUIRE (simplified.id ()==ID_symbol);
80
+ REQUIRE (simplified.type ()==type);
81
+ const auto &symbol=to_symbol_expr (simplified);
82
+ REQUIRE (symbol.get_identifier ()==" foo" );
83
+ }
84
+
85
+ WHEN (" Casts should remain, they are left untouched" )
86
+ {
87
+ {
88
+ const exprt simplified=simplify_expr (
89
+ typecast_exprt (symbol_exprt (" foo" , type), java_int_type ()),
90
+ namespacet (symbol_tablet ()));
91
+
92
+ REQUIRE (simplified.id ()==ID_typecast);
93
+ REQUIRE (simplified.type ()==java_int_type ());
94
+ }
95
+
96
+ {
97
+ const exprt simplified=simplify_expr (
98
+ typecast_exprt (symbol_exprt (" foo" , java_int_type ()), type),
99
+ namespacet (symbol_tablet ()));
100
+
101
+ REQUIRE (simplified.id ()==ID_typecast);
102
+ REQUIRE (simplified.type ()==type);
103
+ }
104
+ }
105
+
106
+ WHEN (" Deeply nested casts are present, they are collapsed appropriately" )
107
+ {
108
+ {
109
+ const exprt simplified=simplify_expr (
110
+ typecast_exprt (
111
+ typecast_exprt (
112
+ typecast_exprt (
113
+ typecast_exprt (
114
+ typecast_exprt (symbol_exprt (" foo" , type), java_int_type ()),
115
+ type),
116
+ java_int_type ()),
117
+ type),
118
+ java_int_type ()),
119
+ namespacet (symbol_tablet ()));
120
+
121
+ REQUIRE (
122
+ simplified==typecast_exprt (symbol_exprt (" foo" , type), java_int_type ()));
123
+ }
124
+ }
125
+ }
126
+
127
+ } // namespace
128
+
129
+ TEST_CASE (" Simplify Java boolean -> int -> boolean casts" )
130
+ {
131
+ test_unnecessary_cast (java_boolean_type ());
132
+ }
133
+
134
+ TEST_CASE (" Simplify Java byte -> int -> byte casts" )
135
+ {
136
+ test_unnecessary_cast (java_byte_type ());
137
+ }
138
+
139
+ TEST_CASE (" Simplify Java char -> int -> char casts" )
140
+ {
141
+ test_unnecessary_cast (java_char_type ());
142
+ }
143
+
144
+ TEST_CASE (" Simplify Java short -> int -> short casts" )
145
+ {
146
+ test_unnecessary_cast (java_short_type ());
82
147
}
0 commit comments