From 6a156a9f6258302a6deea52e8a3bcf5d0bb30756 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 19 Jun 2017 14:17:27 +0100 Subject: [PATCH 1/3] Making toLowerCase more precise We extend add_axioms_for_to_lower_case by taking into account latin characters up to u00FF and adding in the lemmas the property that the characters should not exceed u00FF, making the axioms correct (we will not generate wrong assertion violation) but incomplete (we may miss cases involving characters beyond u00FF). --- ...ng_constraint_generator_transformation.cpp | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator_transformation.cpp b/src/solvers/refinement/string_constraint_generator_transformation.cpp index 599ae3af9dd..55eb79bbdb9 100644 --- a/src/solvers/refinement/string_constraint_generator_transformation.cpp +++ b/src/solvers/refinement/string_constraint_generator_transformation.cpp @@ -216,34 +216,48 @@ string_exprt string_constraint_generatort::add_axioms_for_to_lower_case( string_exprt res=fresh_string(ref_type); exprt char_a=constant_char('a', char_type); exprt char_A=constant_char('A', char_type); - exprt char_z=constant_char('z', char_type); - exprt char_Z=constant_char('Z', char_type); - // TODO: add support for locales using case mapping information - // from the UnicodeData file. + // TODO: for now, only characters in Basic Latin and Latin-1 supplement + // are supported (up to 0x100), we should add others using case mapping + // information from the UnicodeData file. // We add axioms: // a1 : |res| = |str| - // a2 : forall idx res[idx]=str[idx]+'a'-'A' - // a3 : forall idx res[idx]=str[idx] - // forall idx Date: Mon, 19 Jun 2017 14:22:59 +0100 Subject: [PATCH 2/3] Improving the test for Java case functions We make it more precise by having some assertion that should hold and some that should fail. We also test some non ascii (but in latin-1 supplement) characters. --- .../strings-smoke-tests/java_case/test.desc | 9 +++-- .../java_case/test_case.class | Bin 865 -> 1019 bytes .../java_case/test_case.java | 33 +++++++++++++----- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/regression/strings-smoke-tests/java_case/test.desc b/regression/strings-smoke-tests/java_case/test.desc index 9a254ae3484..d2508fa3489 100644 --- a/regression/strings-smoke-tests/java_case/test.desc +++ b/regression/strings-smoke-tests/java_case/test.desc @@ -1,7 +1,12 @@ CORE test_case.class --refine-strings -^EXIT=0$ +^EXIT=10$ ^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ +assertion.* file test_case.java line 10 .* SUCCESS$ +assertion.* file test_case.java line 11 .* SUCCESS$ +assertion.* file test_case.java line 12 .* SUCCESS$ +assertion.* file test_case.java line 16 .* FAILURE$ +assertion.* file test_case.java line 20 .* SUCCESS$ +assertion.* file test_case.java line 24 .* FAILURE$ -- diff --git a/regression/strings-smoke-tests/java_case/test_case.class b/regression/strings-smoke-tests/java_case/test_case.class index 9f7eaab446cd3578f404528b7c77e09fc18c5ab9..863da75113c20863de00fa0169902a184502cd74 100644 GIT binary patch delta 645 zcmYL`O-~b16o#KWZD*#_DQyR6YY`AX_$swkDvDp|#*b)afts+JAeZMvc=%j4o#9k1+9fm=Mp50?FjP=icX@_uO;lxBka?@N@6$cc99GML%N( z$4yRHXq*h>R3PJVGEA6E2Ae5^X$y-nlcLE?a8xomZBjO@CS3(U7uYNB+JOA6C}<-hjd_-})->+ksQd`}T?u530RH{4CBblK(#SKBr9tCf+~ zK&A76n?w zY9ji*LbS`RPZ%8rW*pNa-XXDzwcKle)8eYs{-6!E){0Kjqpw3fBqV+mVqFSh)?&%A zC2N}-2TboW60%t*C3T#1=sLd7LzF*6+y4uSZP14n_Ay6N;+Xt1omL7%W?%}isF2_$ zHjn6|L7JC1w1jq~)i2WYQAz7Z-=ktM{O`+VheivMK5{U;YB(jxI2jM8gAv^!8u^TI W_<;REieEOg0XkvOUrnbq=d+$B(Iq!MT`K^D&Hh$cFzXmG2bIDNDJarg%v6wLM z%)s+FDPA~Cn$Jtkl#5HzVcKEFgi4ygWtKV3{ORYlOmedo*7nxJ#;0(5zb=ZW--4Aa zBZ~Cb@Hi~*hle}m&DPQG;f})ku*eiUD6$N Date: Tue, 20 Jun 2017 17:19:19 +0100 Subject: [PATCH 3/3] Add comments about characters transformed by toLowerCase --- ...tring_constraint_generator_transformation.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator_transformation.cpp b/src/solvers/refinement/string_constraint_generator_transformation.cpp index 55eb79bbdb9..bde386d3eda 100644 --- a/src/solvers/refinement/string_constraint_generator_transformation.cpp +++ b/src/solvers/refinement/string_constraint_generator_transformation.cpp @@ -214,8 +214,9 @@ string_exprt string_constraint_generatort::add_axioms_for_to_lower_case( const typet &char_type=ref_type.get_char_type(); const typet &index_type=ref_type.get_index_type(); string_exprt res=fresh_string(ref_type); - exprt char_a=constant_char('a', char_type); - exprt char_A=constant_char('A', char_type); + const exprt char_A=constant_char('A', char_type); + const exprt char_Z=constant_char('Z', char_type); + // TODO: for now, only characters in Basic Latin and Latin-1 supplement // are supported (up to 0x100), we should add others using case mapping @@ -225,21 +226,28 @@ string_exprt string_constraint_generatort::add_axioms_for_to_lower_case( // a1 : |res| = |str| // a2 : forall idx