4
4
5
5
Compacting occurs when the value_set get 'large', and takes two forms
6
6
non-destructive (eg, can we merge constants into an existing interval
7
- with no loss of precision) and desctructive (creating intervals from
7
+ with no loss of precision) and destructive (creating intervals from
8
8
the constants, or merging existing intervals).
9
9
10
10
Author: Jez Higgins, [email protected]
11
11
12
12
\*******************************************************************/
13
13
14
- #include " ../variable_sensitivity_test_helpers.h"
15
-
16
14
#include < analyses/variable-sensitivity/variable_sensitivity_object_factory.h>
15
+ #include < analyses/variable-sensitivity/variable_sensitivity_test_helpers.h>
17
16
18
17
#include < testing-utils/use_catch.h>
19
18
@@ -26,20 +25,21 @@ SCENARIO(
26
25
" [core][analysis][variable-sensitivity][value_set_abstract_object][compact]" )
27
26
{
28
27
const typet type = signedbv_typet (32 );
29
- const exprt val1 = from_integer (1 , type);
30
- const exprt val2 = from_integer (2 , type);
31
- const exprt val3 = from_integer (3 , type);
32
- const exprt val4 = from_integer (4 , type);
33
- const exprt val5 = from_integer (5 , type);
34
- const exprt val6 = from_integer (6 , type);
35
- const exprt val7 = from_integer (7 , type);
36
- const exprt val8 = from_integer (8 , type);
37
- const exprt val9 = from_integer (9 , type);
38
- const exprt val10 = from_integer (10 , type);
39
- const exprt val11 = from_integer (11 , type);
40
- const exprt val12 = from_integer (12 , type);
41
- const exprt interval_5_10 = constant_interval_exprt (val5, val10);
42
- const exprt interval_1_10 = constant_interval_exprt (val1, val10);
28
+ auto val0 = from_integer (0 , type);
29
+ auto val1 = from_integer (1 , type);
30
+ auto val2 = from_integer (2 , type);
31
+ auto val3 = from_integer (3 , type);
32
+ auto val4 = from_integer (4 , type);
33
+ auto val5 = from_integer (5 , type);
34
+ auto val6 = from_integer (6 , type);
35
+ auto val7 = from_integer (7 , type);
36
+ auto val8 = from_integer (8 , type);
37
+ auto val9 = from_integer (9 , type);
38
+ auto val10 = from_integer (10 , type);
39
+ auto val11 = from_integer (11 , type);
40
+ auto val12 = from_integer (12 , type);
41
+ auto interval_5_10 = constant_interval_exprt (val5, val10);
42
+ auto interval_1_10 = constant_interval_exprt (val1, val10);
43
43
44
44
auto config = vsd_configt::constant_domain ();
45
45
config.context_tracking .data_dependency_context = false ;
@@ -169,9 +169,6 @@ SCENARIO(
169
169
170
170
GIVEN (" compact values to create new intervals" )
171
171
{
172
- const exprt interval_1_4 = constant_interval_exprt (val1, val4);
173
- const exprt interval_9_12 = constant_interval_exprt (val9, val12);
174
-
175
172
WHEN (" compacting { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }" )
176
173
{
177
174
auto value_set = make_value_set (
@@ -191,9 +188,41 @@ SCENARIO(
191
188
ns);
192
189
THEN (" { [1, 4], 5, 6, 7, 8, [9, 12] }" )
193
190
{
191
+ auto interval_1_4 = constant_interval_exprt (val1, val4);
192
+ auto interval_9_12 = constant_interval_exprt (val9, val12);
193
+
194
194
EXPECT (
195
195
value_set, {val5, val6, val7, val8, interval_1_4, interval_9_12});
196
196
}
197
197
}
198
+
199
+ WHEN (
200
+ " compacting { -100, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 100 } - pathalogical "
201
+ " case with outliers" )
202
+ {
203
+ auto val100minus = from_integer (-100 , type);
204
+ auto val100 = from_integer (100 , type);
205
+ auto value_set = make_value_set (
206
+ {val100minus,
207
+ val2,
208
+ val3,
209
+ val4,
210
+ val5,
211
+ val6,
212
+ val7,
213
+ val8,
214
+ val9,
215
+ val10,
216
+ val11,
217
+ val100},
218
+ environment,
219
+ ns);
220
+ THEN (" { [-100, 0], [0, 100] }" )
221
+ {
222
+ auto interval_100minus_0 = constant_interval_exprt (val100minus, val0);
223
+ auto interval_0_100 = constant_interval_exprt (val0, val100);
224
+ EXPECT (value_set, {interval_100minus_0, interval_0_100});
225
+ }
226
+ }
198
227
}
199
- }
228
+ }
0 commit comments