@@ -39,122 +39,137 @@ SCENARIO(
3939 " [core][analyses][variable-sensitivity][full_array_abstract_object][max_"
4040 " array]" )
4141{
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 (" array = {1, 2, 3}, writes under maximum size" )
42+ for (size_t max_array_index = 10 ; max_array_index <= 20 ; max_array_index += 10 )
5043 {
51- WHEN (" array[3] = 4" )
44+ auto configuration = vsd_configt::value_set ();
45+ configuration.maximum_array_index = max_array_index;
46+
47+ auto object_factory =
48+ variable_sensitivity_object_factoryt::configured_with (configuration);
49+ abstract_environmentt environment (object_factory);
50+ environment.make_top ();
51+ symbol_tablet symbol_table;
52+ namespacet ns (symbol_table);
53+ WHEN (" maximum size is " + std::to_string (max_array_index))
5254 {
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}" )
55+ WHEN (" array = {1, 2, 3}, writes under maximum size" )
5856 {
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);
57+ WHEN (" array[3] = 4" )
58+ {
59+ auto array = build_array ({1 , 2 , 3 }, environment, ns);
6860
69- auto updated = write_array (array, 0 , 99 , environment, ns);
61+ auto updated = write_array (array, 3 , 4 , environment, ns);
7062
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);
63+ THEN (" array equals {1, 2, 3, 4}" )
64+ {
65+ EXPECT_INDEX (updated, 0 , 1 , environment, ns);
66+ EXPECT_INDEX (updated, 1 , 2 , environment, ns);
67+ EXPECT_INDEX (updated, 2 , 3 , environment, ns);
68+ EXPECT_INDEX (updated, 3 , 4 , environment, ns);
69+ }
70+ }
71+ WHEN (" a[0] = 99" )
72+ {
73+ auto array = build_array ({1 , 2 , 3 }, environment, ns);
8174
82- auto updated = write_array (array, 5 , 99 , environment, ns);
75+ auto updated = write_array (array, 0 , 99 , environment, ns);
8376
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_INDEX_TOP (updated, 3 , environment, ns);
90- EXPECT_INDEX_TOP (updated, 4 , environment, ns);
91- EXPECT_INDEX (updated, 5 , 99 , environment, ns);
77+ THEN (" array equals {99, 2, 3}" )
78+ {
79+ EXPECT_INDEX (updated, 0 , 99 , environment, ns);
80+ EXPECT_INDEX (updated, 1 , 2 , environment, ns);
81+ EXPECT_INDEX (updated, 2 , 3 , environment, ns);
82+ }
83+ }
84+ WHEN (" a[5] = 99" )
85+ {
86+ auto array = build_array ({1 , 2 , 3 }, environment, ns);
87+
88+ auto updated = write_array (array, 5 , 99 , environment, ns);
89+
90+ THEN (" array equals {1, 2, 3, <empty>, <empty>, 99}" )
91+ {
92+ EXPECT_INDEX (updated, 0 , 1 , environment, ns);
93+ EXPECT_INDEX (updated, 1 , 2 , environment, ns);
94+ EXPECT_INDEX (updated, 2 , 3 , environment, ns);
95+ EXPECT_INDEX_TOP (updated, 3 , environment, ns);
96+ EXPECT_INDEX_TOP (updated, 4 , environment, ns);
97+ EXPECT_INDEX (updated, 5 , 99 , environment, ns);
98+ }
99+ }
92100 }
93- }
94- }
95- WHEN (" array = {1, 2, 3}, writes beyond maximum size mapped to max_size" )
96- {
97- WHEN (" array[99] = 4" )
98- {
99- auto array = build_array ({1 , 2 , 3 }, environment, ns);
100-
101- auto updated = write_array (array, 99 , 4 , environment, ns);
102-
103- THEN (" array equals {1, 2, 3, ..., [10] = 4}" )
101+ WHEN (" array = {1, 2, 3}, writes beyond maximum size mapped to max_size" )
104102 {
105- EXPECT_INDEX (updated, 0 , 1 , environment, ns);
106- EXPECT_INDEX (updated, 1 , 2 , environment, ns);
107- EXPECT_INDEX (updated, 2 , 3 , environment, ns);
108- EXPECT_INDEX (updated, 10 , 4 , environment, ns);
109- }
110- }
111- }
112- WHEN (" array = {1, 2, 3}, reads beyond maximum size mapped to max_size" )
113- {
114- WHEN (" a[max] = 4" )
115- {
116- auto array = build_array ({1 , 2 , 3 }, environment, ns);
117-
118- auto updated = write_array (array, 99 , 4 , environment, ns);
119-
120- for (int i = 10 ; i <= 30 ; i += 5 )
121- THEN (" array[" + std::to_string (i) + " ] = 4}" )
103+ WHEN (" array[99] = 4" )
122104 {
123- EXPECT_INDEX (updated, i, 4 , environment, ns);
105+ auto array = build_array ({1 , 2 , 3 }, environment, ns);
106+
107+ auto updated = write_array (array, 99 , 4 , environment, ns);
108+
109+ THEN (
110+ " array equals {1, 2, 3, ..., [" + std::to_string (max_array_index) +
111+ " ] = 4}" )
112+ {
113+ EXPECT_INDEX (updated, 0 , 1 , environment, ns);
114+ EXPECT_INDEX (updated, 1 , 2 , environment, ns);
115+ EXPECT_INDEX (updated, 2 , 3 , environment, ns);
116+ EXPECT_INDEX (updated, max_array_index, 4 , environment, ns);
117+ }
124118 }
125- }
126- }
127- WHEN (" array = {1, 2, 3}, writes beyond maximum size are merged" )
128- {
129- WHEN (" array[98] = 3, array[99] = 4" )
130- {
131- auto array = build_array ({1 , 2 , 3 }, environment, ns);
132-
133- auto updated = write_array (array, 99 , 4 , environment, ns);
134- updated = write_array (updated, 98 , 3 , environment, ns);
135-
136- THEN (" array equals {1, 2, 3, ..., [10] = TOP}" )
137- {
138- EXPECT_INDEX (updated, 0 , 1 , environment, ns);
139- EXPECT_INDEX (updated, 1 , 2 , environment, ns);
140- EXPECT_INDEX (updated, 2 , 3 , environment, ns);
141- EXPECT_INDEX (updated, 10 , {3 , 4 }, environment, ns);
142119 }
143- }
144- WHEN (" array[99] = 3, array[99] = 4, array[100] = 5" )
145- {
146- auto array = build_array ({1 , 2 , 3 }, environment, ns);
120+ WHEN (" array = {1, 2, 3}, reads beyond maximum size mapped to max_size" )
121+ {
122+ WHEN (" a[max] = 4" )
123+ {
124+ auto array = build_array ({1 , 2 , 3 }, environment, ns);
147125
148- auto updated = write_array (array, 100 , 5 , environment, ns);
149- updated = write_array (updated, 99 , 4 , environment, ns);
150- updated = write_array (updated, 98 , 3 , environment, ns);
126+ auto updated =
127+ write_array (array, max_array_index, 4 , environment, ns);
151128
152- THEN (" array equals {1, 2, 3, ..., [10] = TOP}" )
129+ for (size_t i = max_array_index; i <= max_array_index * 3 ; i += 5 )
130+ THEN (" array[" + std::to_string (i) + " ] = 4}" )
131+ {
132+ EXPECT_INDEX (updated, i, 4 , environment, ns);
133+ }
134+ }
135+ }
136+ WHEN (" array = {1, 2, 3}, writes beyond maximum size are merged" )
153137 {
154- EXPECT_INDEX (updated, 0 , 1 , environment, ns);
155- EXPECT_INDEX (updated, 1 , 2 , environment, ns);
156- EXPECT_INDEX (updated, 2 , 3 , environment, ns);
157- EXPECT_INDEX (updated, 10 , {3 , 4 , 5 }, environment, ns);
138+ WHEN (" array[98] = 3, array[99] = 4" )
139+ {
140+ auto array = build_array ({1 , 2 , 3 }, environment, ns);
141+
142+ auto updated = write_array (array, 99 , 4 , environment, ns);
143+ updated = write_array (updated, 98 , 3 , environment, ns);
144+
145+ THEN (
146+ " array equals {1, 2, 3, ..., [" + std::to_string (max_array_index) +
147+ " ] = TOP}" )
148+ {
149+ EXPECT_INDEX (updated, 0 , 1 , environment, ns);
150+ EXPECT_INDEX (updated, 1 , 2 , environment, ns);
151+ EXPECT_INDEX (updated, 2 , 3 , environment, ns);
152+ EXPECT_INDEX (updated, max_array_index, {3 , 4 }, environment, ns);
153+ }
154+ }
155+ WHEN (" array[99] = 3, array[99] = 4, array[100] = 5" )
156+ {
157+ auto array = build_array ({1 , 2 , 3 }, environment, ns);
158+
159+ auto updated = write_array (array, 100 , 5 , environment, ns);
160+ updated = write_array (updated, 99 , 4 , environment, ns);
161+ updated = write_array (updated, 98 , 3 , environment, ns);
162+
163+ THEN (
164+ " array equals {1, 2, 3, ..., [" + std::to_string (max_array_index) +
165+ " ] = TOP}" )
166+ {
167+ EXPECT_INDEX (updated, 0 , 1 , environment, ns);
168+ EXPECT_INDEX (updated, 1 , 2 , environment, ns);
169+ EXPECT_INDEX (updated, 2 , 3 , environment, ns);
170+ EXPECT_INDEX (updated, max_array_index, {3 , 4 , 5 }, environment, ns);
171+ }
172+ }
158173 }
159174 }
160175 }
0 commit comments