Skip to content

Commit e35372a

Browse files
Merge pull request #1539 from romainbrenguier/bugfix/char-array-in-java-strings#TG-58#newpr
TG-58 New PR for Complete rework of string solver to avoid using infinite arrays
2 parents 4d011b5 + aa94fe8 commit e35372a

File tree

70 files changed

+3448
-2832
lines changed

Some content is hidden

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

70 files changed

+3448
-2832
lines changed
Binary file not shown.
Lines changed: 49 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,52 @@
11
public class StringMiscellaneous04
22
{
3-
public static void main(String[] args)
4-
{
5-
String s1 = "diffblue";
6-
String s2 = "TESTGENERATION";
7-
String s3 = " automated ";
8-
9-
assert s1.equals("diffblue");
10-
assert s2.equals("TESTGENERATION");
11-
assert s3.equals(" automated ");
12-
13-
System.out.printf(
14-
"Replace 'f' with 'F' in s1: %s\n\n", s1.replace('f', 'F'));
15-
String tmp=s1.replace('f', 'F');
16-
assert tmp.equals("diFFblue");
17-
18-
tmp=s1.toUpperCase();
19-
assert tmp.equals("DIFFBLUE");
20-
21-
tmp=s2.toLowerCase();
22-
assert tmp.equals("testgeneration");
23-
24-
tmp=s3.trim();
25-
assert tmp.equals("automated");
26-
27-
// test toCharArray method
28-
char[] charArray = s1.toCharArray();
29-
System.out.print("s1 as a character array = ");
30-
31-
int i=0;
32-
for (char character : charArray)
33-
{
34-
assert character=="diffblue".charAt(i);
35-
++i;
36-
}
37-
38-
System.out.println();
39-
}
3+
// This is a model of the String.toCharArray method
4+
public static char[] toCharArray(String s)
5+
{
6+
int length=s.length();
7+
assert(length<10);
8+
char arr[]=new char[s.length()];
9+
// We limit arbitrarly the loop unfolding to 10
10+
for(int i=0; i<length && i<10; i++)
11+
arr[i]=s.charAt(i);
12+
return arr;
13+
}
14+
15+
public static void main(String[] args)
16+
{
17+
String s1 = "diffblue";
18+
String s2 = "TESTGENERATION";
19+
String s3 = " automated ";
20+
21+
assert s1.equals("diffblue");
22+
assert s2.equals("TESTGENERATION");
23+
assert s3.equals(" automated ");
24+
25+
System.out.printf(
26+
"Replace 'f' with 'F' in s1: %s\n\n", s1.replace('f', 'F'));
27+
String tmp=s1.replace('f', 'F');
28+
assert tmp.equals("diFFblue");
29+
30+
tmp=s1.toUpperCase();
31+
assert tmp.equals("DIFFBLUE");
32+
33+
tmp=s2.toLowerCase();
34+
assert tmp.equals("testgeneration");
35+
36+
tmp=s3.trim();
37+
assert tmp.equals("automated");
38+
39+
// test toCharArray method
40+
char[] charArray = toCharArray(s1);
41+
System.out.print("s1 as a character array = ");
42+
43+
int i=0;
44+
for (char character : charArray)
45+
{
46+
assert character=="diffblue".charAt(i);
47+
++i;
48+
}
49+
50+
System.out.println();
51+
}
4052
}

regression/jbmc-strings/java_append_char/test.desc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ test_append_char.class
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$
7-
^\[.*assertion\.1\].* line 15.* FAILURE$
7+
^\[.*assertion\.1\].* line 16.* SUCCESS$
8+
^\[.*assertion\.2\].* line 18.* FAILURE$
89
--
Binary file not shown.

regression/jbmc-strings/java_append_char/test_append_char.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
public class test_append_char
22
{
3-
public static void main(/*String[] args*/)
3+
public static void main(boolean b)
44
{
55
char[] diff = {'d', 'i', 'f', 'f'};
66
char[] blue = {'b', 'l', 'u', 'e'};
@@ -12,6 +12,9 @@ public static void main(/*String[] args*/)
1212

1313
String tmp=buffer.toString();
1414
System.out.println(tmp);
15-
assert(!tmp.equals("diffblue"));
15+
if(b)
16+
assert(tmp.equals("diffblue"));
17+
else
18+
assert(!tmp.equals("diffblue"));
1619
}
1720
}

regression/jbmc-strings/java_char_array_init/test.desc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@ test_init.class
33
--refine-strings --string-max-length 1000
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[.*assertion.1\].* line 14.* FAILURE$
6+
assertion.* file test_init.java line 31 .* SUCCESS$
7+
assertion.* file test_init.java line 33 .* SUCCESS$
8+
assertion.* file test_init.java line 35 .* FAILURE$
9+
assertion.* file test_init.java line 37 .* FAILURE$
710
--
Binary file not shown.
Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,39 @@
1-
public class test_init {
1+
public class test_init
2+
{
3+
// These are models for the constructors of strings from char arrays
4+
public static String stringOfCharArray(char arr[])
5+
{
6+
// We give an arbitrary limit on the size of arrays
7+
assert(arr.length<11);
8+
StringBuilder sb=new StringBuilder("");
9+
for(int i=0; i<arr.length && i<11; i++)
10+
sb.append(arr[i]);
11+
return sb.toString();
12+
}
213

3-
public static void main(/*String[] argv*/)
4-
{
5-
char [] str = new char[10];
6-
str[0] = 'H';
7-
str[1] = 'e';
8-
str[2] = 'l';
9-
str[3] = 'l';
10-
str[4] = 'o';
11-
String s = new String(str);
12-
String t = new String(str,1,2);
14+
public static String stringOfCharArray(char arr[], int i, int j)
15+
{
16+
return stringOfCharArray(arr).substring(i, i+j);
17+
}
1318

14-
assert(s.length() != 10 ||
15-
!t.equals("el") ||
16-
!s.startsWith("Hello"));
17-
}
19+
public static void main(int i)
20+
{
21+
char [] str = new char[10];
22+
str[0] = 'H';
23+
str[1] = 'e';
24+
str[2] = 'l';
25+
str[3] = 'l';
26+
str[4] = 'o';
27+
String s = stringOfCharArray(str);
28+
String t = stringOfCharArray(str,1,2);
29+
30+
if(i==0)
31+
assert(s.startsWith("Hello"));
32+
else if(i==1)
33+
assert(t.equals("el"));
34+
else if(i==2)
35+
assert(!s.startsWith("Hello"));
36+
else
37+
assert(!t.equals("el"));
38+
}
1839
}

regression/jbmc-strings/java_insert_char_array/test.desc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ test_insert_char_array.class
33
--refine-strings --string-max-length 1000
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[.*assertion\.1\].* line 12.* FAILURE$
6+
assertion.* line 28.* SUCCESS$
7+
assertion.* line 30.* FAILURE$
78
--
Binary file not shown.

0 commit comments

Comments
 (0)