Skip to content

Commit b30b06a

Browse files
authored
Merge pull request diffblue#5116 from danpoe/feature/string-buffer-append
Tests for constant propagation of StringBuffer.append()
2 parents 23e8572 + 6155f2a commit b30b06a

24 files changed

+248
-4
lines changed
Binary file not shown.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
public class Main {
2+
public void test() {
3+
StringBuffer sb = new StringBuffer("abc");
4+
sb.append("xyz");
5+
assert sb.toString().equals("abcxyz");
6+
}
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE
2+
Main.class
3+
--function Main.test --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: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
public class Main {
2+
public void test1() {
3+
StringBuffer sb1 = new StringBuffer("abc");
4+
String s2 = "";
5+
sb1.append(s2);
6+
assert sb1.toString().equals("abc");
7+
}
8+
9+
public void test2() {
10+
StringBuffer sb1 = new StringBuffer();
11+
String s2 = "abc";
12+
sb1.append(s2);
13+
assert sb1.toString().equals("abc");
14+
}
15+
16+
public void test3() {
17+
StringBuffer sb1 = new StringBuffer();
18+
String s2 = "";
19+
sb1.append(s2);
20+
assert sb1.toString().equals("");
21+
}
22+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE
2+
Main.class
3+
--function Main.test1 --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+
Main.class
3+
--function Main.test2 --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+
Main.class
3+
--function Main.test3 --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: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
class Test {
2+
public void testBooleanSuccess() {
3+
StringBuffer sb = new StringBuffer("abc");
4+
sb.append(true);
5+
assert sb.toString().equals("abctrue");
6+
}
7+
8+
public void testCharSuccess() {
9+
StringBuffer sb = new StringBuffer("abc");
10+
sb.append('a');
11+
assert sb.toString().equals("abca");
12+
}
13+
14+
public void testIntSuccess() {
15+
StringBuffer sb = new StringBuffer("abc");
16+
sb.append(3);
17+
assert sb.toString().equals("abc3");
18+
}
19+
20+
public void testLongSuccess() {
21+
StringBuffer sb = new StringBuffer("abc");
22+
sb.append(3L);
23+
assert sb.toString().equals("abc3");
24+
}
25+
26+
public void testCharSequenceSuccess() {
27+
StringBuffer sb = new StringBuffer("abc");
28+
CharSequence cs = "xyz";
29+
sb.append(cs);
30+
assert sb.toString().equals("abcxyz");
31+
}
32+
33+
public void testStringBufferSuccess() {
34+
StringBuffer sb = new StringBuffer("abc");
35+
StringBuffer buf = new StringBuffer("xyz");
36+
sb.append(buf);
37+
assert sb.toString().equals("abcxyz");
38+
}
39+
40+
public void testBooleanNoPropagation(boolean b) {
41+
StringBuffer sb = new StringBuffer("abc");
42+
sb.append(b);
43+
assert sb.toString().equals("abctrue");
44+
}
45+
46+
public void testCharNoPropagation(char c) {
47+
StringBuffer sb = new StringBuffer("abc");
48+
sb.append(c);
49+
assert sb.toString().equals("abca");
50+
}
51+
52+
public void testIntNoPropagation(int i) {
53+
StringBuffer sb = new StringBuffer("abc");
54+
sb.append(i);
55+
assert sb.toString().equals("abc3");
56+
}
57+
58+
public void testLongNoPropagation(long l) {
59+
StringBuffer sb = new StringBuffer("abc");
60+
sb.append(l);
61+
assert sb.toString().equals("abc3");
62+
}
63+
64+
public void testCharSequenceNoPropagation(CharSequence cs) {
65+
StringBuffer sb = new StringBuffer("abc");
66+
sb.append(cs);
67+
assert sb.toString().equals("abcxyz");
68+
}
69+
70+
public void testStringBufferNoPropagation(StringBuffer buf) {
71+
StringBuffer sb = new StringBuffer("abc");
72+
sb.append(buf);
73+
assert sb.toString().equals("abcxyz");
74+
}
75+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE symex-driven-lazy-loading-expected-failure
2+
Test.class
3+
--function Test.testBooleanNoPropagation --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --property 'java::Test.testBooleanNoPropagation:(Z)V.assertion.1'
4+
^Generated [0-9]+ VCC\(s\), 1 remaining after simplification$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
^VERIFICATION FAILED$
8+
--
9+
--
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FUTURE
2+
Test.class
3+
--function Test.testBooleanSuccess --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 symex-driven-lazy-loading-expected-failure
2+
Test.class
3+
--function Test.testCharNoPropagation --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --property 'java::Test.testCharNoPropagation:(C)V.assertion.1'
4+
^Generated [0-9]+ VCC\(s\), 1 remaining after simplification$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
^VERIFICATION FAILED$
8+
--
9+
--
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE symex-driven-lazy-loading-expected-failure
2+
Test.class
3+
--function Test.testCharSequenceNoPropagation --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --property 'java::Test.testCharSequenceNoPropagation:(Ljava/lang/CharSequence;)V.assertion.1'
4+
^Generated [0-9]+ VCC\(s\), 1 remaining after simplification$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
^VERIFICATION FAILED$
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.testCharSequenceSuccess --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+
FUTURE
2+
Test.class
3+
--function Test.testCharSuccess --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 symex-driven-lazy-loading-expected-failure
2+
Test.class
3+
--function Test.testIntNoPropagation --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --property 'java::Test.testIntNoPropagation:(I)V.assertion.1'
4+
^Generated [0-9]+ VCC\(s\), 1 remaining after simplification$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
^VERIFICATION FAILED$
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.testIntSuccess --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 symex-driven-lazy-loading-expected-failure
2+
Test.class
3+
--function Test.testLongNoPropagation --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --property 'java::Test.testLongNoPropagation:(J)V.assertion.1'
4+
^Generated [0-9]+ VCC\(s\), 1 remaining after simplification$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
^VERIFICATION FAILED$
8+
--
9+
--
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FUTURE
2+
Test.class
3+
--function Test.testLongSuccess --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+
--
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE symex-driven-lazy-loading-expected-failure
2+
Test.class
3+
--function Test.testStringBufferNoPropagation --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar` --property 'java::Test.testStringBufferNoPropagation:(Ljava/lang/StringBuffer;)V.assertion.1'
4+
^Generated [0-9]+ VCC\(s\), 1 remaining after simplification$
5+
^EXIT=10$
6+
^SIGNAL=0$
7+
^VERIFICATION FAILED$
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.testStringBufferSuccess --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+
--

jbmc/src/java_bytecode/java_string_library_preprocess.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1764,9 +1764,6 @@ void java_string_library_preprocesst::initialize_conversion_table()
17641764
cprover_equivalent_to_java_assign_and_return_function
17651765
["java::java.lang.StringBuffer.append:(C)Ljava/lang/StringBuffer;"]=
17661766
ID_cprover_string_concat_char_func;
1767-
cprover_equivalent_to_java_assign_and_return_function
1768-
["java::java.lang.StringBuffer.append:(J)Ljava/lang/StringBuffer;"]=
1769-
ID_cprover_string_concat_long_func;
17701767
cprover_equivalent_to_java_assign_and_return_function
17711768
["java::java.lang.StringBuffer.append:(Ljava/lang/String;)"
17721769
"Ljava/lang/StringBuffer;"]=

src/util/irep_ids.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,6 @@ IREP_ID_ONE(cprover_string_code_point_count_func)
596596
IREP_ID_ONE(cprover_string_offset_by_code_point_func)
597597
IREP_ID_ONE(cprover_string_compare_to_func)
598598
IREP_ID_ONE(cprover_string_concat_func)
599-
IREP_ID_ONE(cprover_string_concat_long_func)
600599
IREP_ID_ONE(cprover_string_concat_char_func)
601600
IREP_ID_ONE(cprover_string_concat_code_point_func)
602601
IREP_ID_ONE(cprover_string_constrain_characters_func)

0 commit comments

Comments
 (0)