Skip to content

Commit d8ed6fe

Browse files
authored
Merge pull request #5134 from danpoe/feature/constant-propagation-of-string-operations
Constant propagation of CProverString.setLength() and CProverString.setCharAt()
2 parents fd4a8ec + 4bb03aa commit d8ed6fe

22 files changed

+437
-3
lines changed
Binary file not shown.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import org.cprover.CProverString;
2+
3+
public class Test
4+
{
5+
public void testSuccess1()
6+
{
7+
StringBuffer sb = new StringBuffer("abc");
8+
CProverString.setCharAt(sb, 0, 'd');
9+
assert sb.toString().equals("dbc");
10+
}
11+
12+
public void testSuccess2()
13+
{
14+
StringBuffer sb = new StringBuffer("abc");
15+
CProverString.setCharAt(sb, 2, 'd');
16+
assert sb.toString().equals("abd");
17+
}
18+
19+
public void testNoPropagation1()
20+
{
21+
StringBuffer sb = new StringBuffer("abc");
22+
CProverString.setCharAt(sb, -1, 'd');
23+
assert sb.toString().equals("dbc");
24+
}
25+
26+
public void testNoPropagation2()
27+
{
28+
StringBuffer sb = new StringBuffer("abc");
29+
CProverString.setCharAt(sb, 3, 'd');
30+
assert sb.toString().equals("dbc");
31+
}
32+
33+
public void testNoPropagation3(StringBuffer sb)
34+
{
35+
CProverString.setCharAt(sb, 1, 'd');
36+
assert sb.toString().equals("dbc");
37+
}
38+
39+
public void testNoPropagation4(int index)
40+
{
41+
StringBuffer sb = new StringBuffer("abc");
42+
CProverString.setCharAt(sb, index, 'd');
43+
assert sb.toString().equals("dbc");
44+
}
45+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE symex-driven-lazy-loading-expected-failure
2+
Test.class
3+
--function Test.testNoPropagation1 --show-vcc --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --property 'java::Test.testNoPropagation1:()V.assertion.1'
4+
^Generated [0-9]+ VCC\(s\), 1 remaining after simplification$
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 symex-driven-lazy-loading-expected-failure
2+
Test.class
3+
--function Test.testNoPropagation2 --show-vcc --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --property 'java::Test.testNoPropagation2:()V.assertion.1'
4+
^Generated [0-9]+ VCC\(s\), 1 remaining after simplification$
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 symex-driven-lazy-loading-expected-failure
2+
Test.class
3+
--function Test.testNoPropagation3 --show-vcc --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --property 'java::Test.testNoPropagation3:(Ljava/lang/StringBuffer;)V.assertion.1'
4+
^Generated [0-9]+ VCC\(s\), 1 remaining after simplification$
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 symex-driven-lazy-loading-expected-failure
2+
Test.class
3+
--function Test.testNoPropagation4 --show-vcc --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --property 'java::Test.testNoPropagation4:(I)V.assertion.1'
4+
^Generated [0-9]+ VCC\(s\), 1 remaining after simplification$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
--
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE
2+
Test.class
3+
--function Test.testSuccess1 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
4+
^Generated [0-9]+ VCC\(s\), 0 remaining after simplification$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
^VERIFICATION SUCCESSFUL$
8+
--
9+
--
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE
2+
Test.class
3+
--function Test.testSuccess2 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
4+
^Generated [0-9]+ VCC\(s\), 0 remaining after simplification$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
^VERIFICATION SUCCESSFUL$
8+
--
9+
--
Binary file not shown.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import org.cprover.CProverString;
2+
3+
public class Test
4+
{
5+
public void testSuccess1()
6+
{
7+
StringBuffer sb = new StringBuffer("abc");
8+
CProverString.setLength(sb, 0);
9+
assert sb.toString().equals("");
10+
}
11+
12+
public void testSuccess2()
13+
{
14+
StringBuffer sb = new StringBuffer("abc");
15+
CProverString.setLength(sb, 2);
16+
assert sb.toString().equals("ab");
17+
}
18+
19+
public void testSuccess3()
20+
{
21+
StringBuffer sb = new StringBuffer("abc");
22+
CProverString.setLength(sb, 3);
23+
assert sb.toString().equals("abc");
24+
}
25+
26+
public void testSuccess4()
27+
{
28+
StringBuffer sb = new StringBuffer("abc");
29+
CProverString.setLength(sb, 4);
30+
assert sb.toString().equals("abc\u0000");
31+
}
32+
33+
public void testSuccess5()
34+
{
35+
StringBuffer sb = new StringBuffer("abc");
36+
CProverString.setLength(sb, 5);
37+
assert sb.toString().equals("abc\u0000\u0000");
38+
}
39+
40+
public void testSuccess6(StringBuffer sb)
41+
{
42+
CProverString.setLength(sb, 0);
43+
assert sb.toString().equals("");
44+
}
45+
46+
public void testNoPropagation1()
47+
{
48+
StringBuffer sb = new StringBuffer("abc");
49+
CProverString.setLength(sb, -1);
50+
assert sb.toString().equals("abc");
51+
}
52+
53+
public void testNoPropagation2(StringBuffer sb)
54+
{
55+
CProverString.setLength(sb, 3);
56+
assert sb.toString().equals("abc");
57+
}
58+
59+
public void testNoPropagation3(int newLength)
60+
{
61+
StringBuffer sb = new StringBuffer("abc");
62+
CProverString.setLength(sb, newLength);
63+
assert sb.toString().equals("abc");
64+
}
65+
}

0 commit comments

Comments
 (0)