Skip to content

Commit d4e0bd0

Browse files
authored
Merge pull request #4973 from antlechner/antonia/vr-primitive-wrappers
[TG-8623] Fix primitive wrapper types in JSON value retriever
2 parents f2742ba + 91e652e commit d4e0bd0

File tree

56 files changed

+544
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+544
-1
lines changed
Binary file not shown.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class ContainerForBoolean {
2+
public Boolean booleanField;
3+
public ContainerForBoolean(Boolean b) { booleanField = b; }
4+
}
Binary file not shown.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class ContainerForByte {
2+
public Byte byteField;
3+
public ContainerForByte(Byte b) { byteField = b; }
4+
}
Binary file not shown.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class ContainerForCharacter {
2+
public Character characterField;
3+
public ContainerForCharacter(Character c) { characterField = c; }
4+
}
Binary file not shown.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class ContainerForDouble {
2+
public Double doubleField;
3+
public ContainerForDouble(Double d) { doubleField = d; }
4+
}
Binary file not shown.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class ContainerForFloat {
2+
public Float floatField;
3+
public ContainerForFloat(Float f) { floatField = f; }
4+
}
Binary file not shown.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class ContainerForInteger {
2+
public Integer integerField;
3+
public ContainerForInteger(Integer i) { integerField = Util.setTo(i); }
4+
}
Binary file not shown.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class ContainerForLong {
2+
public Long longField;
3+
public ContainerForLong(Long l) { longField = l; }
4+
}
Binary file not shown.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class ContainerForShort {
2+
public Short shortField;
3+
public ContainerForShort(Short s) { shortField = s; }
4+
}
Binary file not shown.

jbmc/regression/jbmc/deterministic_assignments_json/StaticValues.java

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,148 @@ public static void testReferenceToReferenceArrayFail() {
199199
assert referenceToReferenceArray != referenceArrayField;
200200
}
201201

202+
// Primitive wrapper types as static field types
203+
public static Boolean booleanWrapperField = true;
204+
public static void testBooleanWrapperPass() { assert booleanWrapperField; }
205+
public static void testBooleanWrapperFail() { assert !booleanWrapperField; }
206+
207+
public static Byte byteWrapperField = (byte)50;
208+
public static void testByteWrapperPass() {
209+
assert byteWrapperField == (byte)50;
210+
}
211+
public static void testByteWrapperFail() {
212+
assert byteWrapperField != (byte)50;
213+
}
214+
215+
public static Character characterWrapperField = '!';
216+
public static void testCharacterWrapperPass() {
217+
assert characterWrapperField == '!';
218+
}
219+
public static void testCharacterWrapperFail() {
220+
assert characterWrapperField != '!';
221+
}
222+
223+
public static Double doubleWrapperField = 24.56;
224+
public static void testDoubleWrapperPass() {
225+
assert doubleWrapperField == 24.56;
226+
}
227+
public static void testDoubleWrapperFail() {
228+
assert doubleWrapperField != 24.56;
229+
}
230+
231+
public static Float floatWrapperField = 13.13f;
232+
public static void testFloatWrapperPass() {
233+
assert floatWrapperField == 13.13f;
234+
}
235+
public static void testFloatWrapperFail() {
236+
assert floatWrapperField != 13.13f;
237+
}
238+
239+
public static Integer integerWrapperField = Util.setTo(1000);
240+
public static void testIntegerWrapperPass() {
241+
assert integerWrapperField == 1000;
242+
}
243+
public static void testIntegerWrapperFail() {
244+
assert integerWrapperField != 1000;
245+
}
246+
247+
public static Long longWrapperField = 21000000000L;
248+
public static void testLongWrapperPass() {
249+
assert longWrapperField == 21000000000L;
250+
}
251+
public static void testLongWrapperFail() {
252+
assert longWrapperField != 21000000000L;
253+
}
254+
255+
public static Short shortWrapperField = (short)200;
256+
public static void testShortWrapperPass() {
257+
assert shortWrapperField == (short)200;
258+
}
259+
public static void testShortWrapperFail() {
260+
assert shortWrapperField != (short)200;
261+
}
262+
263+
// Primitive wrapper types as fields of static field types
264+
public static ContainerForBoolean booleanWrapperContainer =
265+
new ContainerForBoolean(true);
266+
public static void testBooleanWrapperContainerPass() {
267+
assert booleanWrapperContainer.booleanField;
268+
}
269+
public static void testBooleanWrapperContainerFail() {
270+
assert !booleanWrapperContainer.booleanField;
271+
}
272+
273+
public static ContainerForByte byteWrapperContainer =
274+
new ContainerForByte((byte)50);
275+
public static void testByteWrapperContainerPass() {
276+
assert byteWrapperContainer.byteField == (byte)50;
277+
}
278+
public static void testByteWrapperContainerFail() {
279+
assert byteWrapperContainer.byteField != (byte)50;
280+
}
281+
282+
public static ContainerForCharacter characterWrapperContainer =
283+
new ContainerForCharacter('!');
284+
public static void testCharacterWrapperContainerPass() {
285+
assert characterWrapperContainer.characterField == '!';
286+
}
287+
public static void testCharacterWrapperContainerFail() {
288+
assert characterWrapperContainer.characterField != '!';
289+
}
290+
291+
public static ContainerForDouble doubleWrapperContainer =
292+
new ContainerForDouble(24.56);
293+
public static void testDoubleWrapperContainerPass() {
294+
assert doubleWrapperContainer.doubleField == 24.56;
295+
}
296+
public static void testDoubleWrapperContainerFail() {
297+
assert doubleWrapperContainer.doubleField != 24.56;
298+
}
299+
300+
public static ContainerForFloat floatWrapperContainer =
301+
new ContainerForFloat(13.13f);
302+
public static void testFloatWrapperContainerPass() {
303+
assert floatWrapperContainer.floatField == 13.13f;
304+
}
305+
public static void testFloatWrapperContainerFail() {
306+
assert floatWrapperContainer.floatField != 13.13f;
307+
}
308+
309+
public static ContainerForInteger integerWrapperContainer =
310+
new ContainerForInteger(1000);
311+
public static void testIntegerWrapperContainerPass() {
312+
assert integerWrapperContainer.integerField == 1000;
313+
}
314+
public static void testIntegerWrapperContainerFail() {
315+
assert integerWrapperContainer.integerField != 1000;
316+
}
317+
318+
public static ContainerForLong longWrapperContainer =
319+
new ContainerForLong(21000000000L);
320+
public static void testLongWrapperContainerPass() {
321+
assert longWrapperContainer.longField == 21000000000L;
322+
}
323+
public static void testLongWrapperContainerFail() {
324+
assert longWrapperContainer.longField != 21000000000L;
325+
}
326+
327+
public static ContainerForShort shortWrapperContainer =
328+
new ContainerForShort((short)200);
329+
public static void testShortWrapperContainerPass() {
330+
assert shortWrapperContainer.shortField == (short)200;
331+
}
332+
public static void testShortWrapperContainerFail() {
333+
assert shortWrapperContainer.shortField != (short)200;
334+
}
335+
336+
public static Integer[] integerWrapperArray = {1111};
337+
public static void testIntegerWrapperArrayPass() {
338+
assert integerWrapperArray.length == 1 && integerWrapperArray[0] == 1111;
339+
}
340+
public static void testIntegerWrapperArrayFail() {
341+
assert integerWrapperArray.length != 1 || integerWrapperArray[0] != 1111;
342+
}
343+
202344
// Strings
203345
public static String stringField = Util.repeat("hello! ", 6);
204346
public static void testStringPass() {

jbmc/regression/jbmc/deterministic_assignments_json/clinit-state.json

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,76 @@
412412
"@type":"java.lang.Boolean",
413413
"value":true
414414
}
415+
},
416+
"booleanWrapperField":{
417+
"@type":"java.lang.Boolean",
418+
"value":true
419+
},
420+
"byteWrapperField":{
421+
"@type":"java.lang.Byte",
422+
"value":50
423+
},
424+
"characterWrapperField":{
425+
"@type":"java.lang.Character",
426+
"value":"!"
427+
},
428+
"doubleWrapperField":{
429+
"@type":"java.lang.Double",
430+
"value":24.56
431+
},
432+
"floatWrapperField":{
433+
"@type":"java.lang.Float",
434+
"value":13.13
435+
},
436+
"integerWrapperField":{
437+
"@type":"java.lang.Integer",
438+
"value":1000
439+
},
440+
"longWrapperField":{
441+
"@type":"java.lang.Long",
442+
"value":"21000000000"
443+
},
444+
"shortWrapperField":{
445+
"@type":"java.lang.Short",
446+
"value":200
447+
},
448+
"booleanWrapperContainer":{
449+
"@type":"ContainerForBoolean",
450+
"booleanField":true
451+
},
452+
"byteWrapperContainer":{
453+
"@type":"ContainerForByte",
454+
"byteField":50
455+
},
456+
"characterWrapperContainer":{
457+
"@type":"ContainerForCharacter",
458+
"characterField":"!"
459+
},
460+
"doubleWrapperContainer":{
461+
"@type":"ContainerForDouble",
462+
"doubleField":24.56
463+
},
464+
"floatWrapperContainer":{
465+
"@type":"ContainerForFloat",
466+
"floatField":13.13
467+
},
468+
"integerWrapperContainer":{
469+
"@type":"ContainerForInteger",
470+
"integerField":1000
471+
},
472+
"longWrapperContainer":{
473+
"@type":"ContainerForLong",
474+
"longField":"21000000000"
475+
},
476+
"shortWrapperContainer":{
477+
"@type":"ContainerForShort",
478+
"shortField":200
479+
},
480+
"integerWrapperArray":{
481+
"@type":"[Ljava.lang.Integer;",
482+
"@items":[
483+
1111
484+
]
415485
}
416486
},
417487
"OtherClass":{
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testBooleanWrapperContainerFail
4+
^VERIFICATION FAILED$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testBooleanWrapperContainerPass
4+
^VERIFICATION SUCCESSFUL$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testBooleanWrapperFail
4+
^VERIFICATION FAILED$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testBooleanWrapperPass
4+
^VERIFICATION SUCCESSFUL$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testByteWrapperContainerFail
4+
^VERIFICATION FAILED$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testByteWrapperContainerPass
4+
^VERIFICATION SUCCESSFUL$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testByteWrapperFail
4+
^VERIFICATION FAILED$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testByteWrapperPass
4+
^VERIFICATION SUCCESSFUL$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testCharacterWrapperContainerFail
4+
^VERIFICATION FAILED$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testCharacterWrapperContainerPass
4+
^VERIFICATION SUCCESSFUL$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testCharacterWrapperFail
4+
^VERIFICATION FAILED$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testCharacterWrapperPass
4+
^VERIFICATION SUCCESSFUL$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testDoubleWrapperContainerFail
4+
^VERIFICATION FAILED$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
StaticValues.class
3+
--unwind 1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --static-values clinit-state.json --function StaticValues.testDoubleWrapperContainerPass
4+
^VERIFICATION SUCCESSFUL$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
--

0 commit comments

Comments
 (0)