Skip to content

Commit 85d5e13

Browse files
authored
Merge pull request diffblue#5125 from danpoe/fixes/string-preprocessing-string-buffer-delete-char-at
Fix string solver string preprocessing of deleteCharAt()
2 parents ff1f6c7 + c785b9b commit 85d5e13

10 files changed

+75
-20
lines changed
Binary file not shown.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
public class TestDeleteCharAt
2+
{
3+
public static void testStringBuilderSuccess(boolean b)
4+
{
5+
String s = b ? "abc" : "xyz";
6+
StringBuilder sb = new StringBuilder(s);
7+
org.cprover.CProverString.deleteCharAt(sb, 1);
8+
String result = sb.toString();
9+
assert !b || result.equals("ac");
10+
assert b || result.equals("xz");
11+
}
12+
13+
public static void testStringBuilderFailure(boolean b)
14+
{
15+
String s = b ? "abc" : "xyz";
16+
StringBuilder sb = new StringBuilder(s);
17+
org.cprover.CProverString.deleteCharAt(sb, 1);
18+
String result = sb.toString();
19+
assert !b || result.equals("ab");
20+
assert b || result.equals("yz");
21+
}
22+
23+
public static void testStringBufferSuccess(boolean b)
24+
{
25+
String s = b ? "abc" : "xyz";
26+
StringBuffer sb = new StringBuffer(s);
27+
org.cprover.CProverString.deleteCharAt(sb, 1);
28+
String result = sb.toString();
29+
assert !b || result.equals("ac");
30+
assert b || result.equals("xz");
31+
}
32+
33+
public static void testStringBufferFailure(boolean b)
34+
{
35+
String s = b ? "abc" : "xyz";
36+
StringBuffer sb = new StringBuffer(s);
37+
org.cprover.CProverString.deleteCharAt(sb, 1);
38+
String result = sb.toString();
39+
assert !b || result.equals("ab");
40+
assert b || result.equals("yz");
41+
}
42+
}

jbmc/regression/strings-smoke-tests/java_delete_char_at/test.desc

Lines changed: 0 additions & 8 deletions
This file was deleted.
Binary file not shown.

jbmc/regression/strings-smoke-tests/java_delete_char_at/test_delete_char_at.java

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
TestDeleteCharAt.class
3+
--max-nondet-string-length 1000 --function TestDeleteCharAt.testStringBufferFailure --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^VERIFICATION FAILED$
7+
--
8+
non equal types
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
TestDeleteCharAt.class
3+
--max-nondet-string-length 1000 --function TestDeleteCharAt.testStringBufferSuccess --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
^VERIFICATION SUCCESSFUL$
7+
--
8+
non equal types
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
TestDeleteCharAt.class
3+
--max-nondet-string-length 1000 --function TestDeleteCharAt.testStringBuilderFailure --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^VERIFICATION FAILED$
7+
--
8+
non equal types
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
TestDeleteCharAt.class
3+
--max-nondet-string-length 1000 --function TestDeleteCharAt.testStringBuilderSuccess --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
^VERIFICATION SUCCESSFUL$
7+
--
8+
non equal types

jbmc/src/java_bytecode/java_string_library_preprocess.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1507,7 +1507,7 @@ void java_string_library_preprocesst::initialize_conversion_table()
15071507
ID_cprover_string_delete_func;
15081508
cprover_equivalent_to_java_assign_and_return_function
15091509
["java::org.cprover.CProverString.deleteCharAt:(Ljava/lang/"
1510-
"StringBufferI)Ljava/lang/StringBuffer;"] =
1510+
"StringBuffer;I)Ljava/lang/StringBuffer;"] =
15111511
ID_cprover_string_delete_char_at_func;
15121512
cprover_equivalent_to_java_assign_and_return_function
15131513
["java::org.cprover.CProverString.deleteCharAt:(Ljava/lang/"

0 commit comments

Comments
 (0)