Skip to content

Commit 132a26b

Browse files
Add tests showing the effect on string-max-length
These tests show how the result of the solver can depend on the string-max-input-length and string-max-length parameters.
1 parent 0e8a863 commit 132a26b

File tree

6 files changed

+66
-0
lines changed

6 files changed

+66
-0
lines changed
1.04 KB
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
public class Test {
2+
3+
static void checkMaxInputLength(String arg1, String arg2) {
4+
// Filter
5+
if (arg1 == null || arg2 == null)
6+
return;
7+
8+
// The validity of this depends on string-max-input-length
9+
assert arg1.length() + arg2.length() < 1_000_000;
10+
}
11+
12+
static void checkMaxLength(String arg1, String arg2) {
13+
// Filter
14+
if (arg1 == null || arg2 == null)
15+
return;
16+
17+
if(arg1.length() + arg2.length() < 4_001)
18+
return;
19+
20+
// Act
21+
String s = arg1.concat(arg2);
22+
23+
// When string-max-length is smaller than 4_000 this will
24+
// always be the case
25+
assert org.cprover.CProverString.charAt(s, 4_000) == '?';
26+
}
27+
28+
static void main(String argv[]) {
29+
// Filter
30+
if (argv.length < 2)
31+
return;
32+
33+
// Act
34+
checkMaxInputLength(argv[0], argv[1]);
35+
checkMaxLength(argv[0], argv[1]);
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CORE
2+
Test.class
3+
--refine-strings --verbosity 10 --string-max-input-length 499999 --function Test.checkMaxInputLength
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
assertion.* line 9 function java::Test.checkMaxInputLength.* bytecode-index 16: SUCCESS
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CORE
2+
Test.class
3+
--refine-strings --verbosity 10 --string-max-input-length 500000 --function Test.checkMaxInputLength
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
assertion.* line 9 function java::Test.checkMaxInputLength.* bytecode-index 16: FAILURE
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CORE
2+
Test.class
3+
--refine-strings --verbosity 10 --string-max-length 4001 --function Test.checkMaxLength
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
assertion.* line 25 function java::Test.checkMaxLength.* bytecode-index 26: FAILURE
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CORE
2+
Test.class
3+
--refine-strings --verbosity 10 --string-max-length 4000 --function Test.checkMaxLength
4+
^SIGNAL=0$
5+
--
6+
^EXIT=0$
7+
assertion.* line 25 function java::Test.checkMaxLength.* bytecode-index 26: SUCCESS
8+
--
9+
The solver may give an ERROR because the value of string-max-length is too
10+
small to give an answer about the assertion.
11+
So we just check that the answer is not success.

0 commit comments

Comments
 (0)