1+ /* ******************************************************************\
2+
3+ Module: Tests for full_array_abstract_objectt maximum length
4+
5+ Author: Jez Higgins
6+
7+ \*******************************************************************/
8+
9+ #include " array_builder.h"
10+ #include < analyses/variable-sensitivity/variable_sensitivity_object_factory.h>
11+ #include < analyses/variable-sensitivity/variable_sensitivity_test_helpers.h>
12+ #include < testing-utils/use_catch.h>
13+ #include < util/arith_tools.h>
14+ #include < util/bitvector_types.h>
15+ #include < util/mathematical_types.h>
16+
17+ using abstract_object_ptrt = std::shared_ptr<const abstract_objectt>;
18+
19+ static abstract_object_ptrt write_array (
20+ const abstract_object_ptrt &array,
21+ int index,
22+ int new_value,
23+ abstract_environmentt &env,
24+ namespacet &ns)
25+ {
26+ const typet type = signedbv_typet (32 );
27+
28+ return array->write (
29+ env,
30+ ns,
31+ std::stack<exprt>(),
32+ index_exprt (nil_exprt (), from_integer (index, type)),
33+ env.eval (from_integer (new_value, type), ns),
34+ false );
35+ }
36+
37+ SCENARIO (
38+ " arrays have maximum length" ,
39+ " [core][analyses][variable-sensitivity][full_array_abstract_object][max_"
40+ " array]" )
41+ {
42+ auto object_factory = variable_sensitivity_object_factoryt::configured_with (
43+ vsd_configt::value_set ());
44+ abstract_environmentt environment (object_factory);
45+ environment.make_top ();
46+ symbol_tablet symbol_table;
47+ namespacet ns (symbol_table);
48+
49+ WHEN (" Under maximum size, array = {1, 2, 3}" )
50+ {
51+ WHEN (" array[3] = 4" )
52+ {
53+ auto array = build_array ({1 , 2 , 3 }, environment, ns);
54+
55+ auto updated = write_array (array, 3 , 4 , environment, ns);
56+
57+ THEN (" array equals {1, 2, 3, 4}" )
58+ {
59+ EXPECT_INDEX (updated, 0 , 1 , environment, ns);
60+ EXPECT_INDEX (updated, 1 , 2 , environment, ns);
61+ EXPECT_INDEX (updated, 2 , 3 , environment, ns);
62+ EXPECT_INDEX (updated, 3 , 4 , environment, ns);
63+ }
64+ }
65+ WHEN (" a[0] = 99" )
66+ {
67+ auto array = build_array ({1 , 2 , 3 }, environment, ns);
68+
69+ auto updated = write_array (array, 0 , 99 , environment, ns);
70+
71+ THEN (" array equals {99, 2, 3}" )
72+ {
73+ EXPECT_INDEX (updated, 0 , 99 , environment, ns);
74+ EXPECT_INDEX (updated, 1 , 2 , environment, ns);
75+ EXPECT_INDEX (updated, 2 , 3 , environment, ns);
76+ }
77+ }
78+ WHEN (" a[5] = 99" )
79+ {
80+ auto array = build_array ({1 , 2 , 3 }, environment, ns);
81+
82+ auto updated = write_array (array, 5 , 99 , environment, ns);
83+
84+ THEN (" array equals {1, 2, 3, <empty>, <empty>, 99}" )
85+ {
86+ EXPECT_INDEX (updated, 0 , 1 , environment, ns);
87+ EXPECT_INDEX (updated, 1 , 2 , environment, ns);
88+ EXPECT_INDEX (updated, 2 , 3 , environment, ns);
89+ EXPECT_EMPTY_INDEX (updated, 3 , environment, ns);
90+ EXPECT_EMPTY_INDEX (updated, 4 , environment, ns);
91+ EXPECT_INDEX (updated, 5 , 99 , environment, ns);
92+ }
93+ }
94+ }
95+ }
0 commit comments