From 32fe4768a9f9a3872eec541c1e7b3f3c94c8428c Mon Sep 17 00:00:00 2001 From: Leonardo Alt Date: Wed, 14 Nov 2018 17:14:07 +0100 Subject: Organize smt tests in subdirectories --- .../smtCheckerTests/assignment_in_declaration.sol | 4 ---- .../smtCheckerTests/bool_int_mixed_1.sol | 9 -------- .../smtCheckerTests/bool_int_mixed_2.sol | 8 ------- .../smtCheckerTests/bool_int_mixed_3.sol | 21 ------------------ test/libsolidity/smtCheckerTests/bool_simple_1.sol | 8 ------- test/libsolidity/smtCheckerTests/bool_simple_2.sol | 8 ------- test/libsolidity/smtCheckerTests/bool_simple_3.sol | 7 ------ test/libsolidity/smtCheckerTests/bool_simple_4.sol | 10 --------- test/libsolidity/smtCheckerTests/bool_simple_5.sol | 7 ------ test/libsolidity/smtCheckerTests/bool_simple_6.sol | 9 -------- .../branches_assert_condition_1.sol | 12 ----------- .../branches_assert_condition_2.sol | 16 -------------- .../smtCheckerTests/branches_merge_variables_1.sol | 10 --------- .../smtCheckerTests/branches_merge_variables_2.sol | 11 ---------- .../smtCheckerTests/branches_merge_variables_3.sol | 12 ----------- .../smtCheckerTests/branches_merge_variables_4.sol | 13 ----------- .../smtCheckerTests/branches_merge_variables_5.sol | 13 ----------- .../smtCheckerTests/branches_merge_variables_6.sol | 13 ----------- .../smtCheckerTests/complex/warn_on_struct.sol | 14 ++++++++++++ .../smtCheckerTests/complex/warn_on_typecast.sol | 8 +++++++ .../smtCheckerTests/constant_condition_1.sol | 9 -------- .../smtCheckerTests/constant_condition_2.sol | 9 -------- .../smtCheckerTests/constant_condition_3.sol | 9 -------- .../control_flow/assignment_in_declaration.sol | 4 ++++ .../control_flow/branches_assert_condition_1.sol | 12 +++++++++++ .../control_flow/branches_assert_condition_2.sol | 16 ++++++++++++++ .../control_flow/branches_merge_variables_1.sol | 10 +++++++++ .../control_flow/branches_merge_variables_2.sol | 11 ++++++++++ .../control_flow/branches_merge_variables_3.sol | 12 +++++++++++ .../control_flow/branches_merge_variables_4.sol | 13 +++++++++++ .../control_flow/branches_merge_variables_5.sol | 13 +++++++++++ .../control_flow/branches_merge_variables_6.sol | 13 +++++++++++ .../control_flow/ways_to_merge_variables_1.sol | 12 +++++++++++ .../control_flow/ways_to_merge_variables_2.sol | 12 +++++++++++ .../control_flow/ways_to_merge_variables_3.sol | 12 +++++++++++ test/libsolidity/smtCheckerTests/for_loop_1.sol | 8 ------- test/libsolidity/smtCheckerTests/for_loop_2.sol | 8 ------- test/libsolidity/smtCheckerTests/for_loop_3.sol | 8 ------- test/libsolidity/smtCheckerTests/for_loop_4.sol | 10 --------- test/libsolidity/smtCheckerTests/for_loop_5.sol | 12 ----------- test/libsolidity/smtCheckerTests/for_loop_6.sol | 12 ----------- .../function_call_does_not_clear_local_vars.sol | 13 ----------- .../function_call_does_not_clear_local_vars.sol | 13 +++++++++++ .../smtCheckerTests/loops/for_loop_1.sol | 8 +++++++ .../smtCheckerTests/loops/for_loop_2.sol | 8 +++++++ .../smtCheckerTests/loops/for_loop_3.sol | 8 +++++++ .../smtCheckerTests/loops/for_loop_4.sol | 10 +++++++++ .../smtCheckerTests/loops/for_loop_5.sol | 12 +++++++++++ .../smtCheckerTests/loops/for_loop_6.sol | 12 +++++++++++ .../smtCheckerTests/loops/while_loop_simple_1.sol | 13 +++++++++++ .../smtCheckerTests/loops/while_loop_simple_2.sol | 9 ++++++++ .../smtCheckerTests/loops/while_loop_simple_3.sol | 11 ++++++++++ .../smtCheckerTests/loops/while_loop_simple_4.sol | 11 ++++++++++ .../smtCheckerTests/loops/while_loop_simple_5.sol | 12 +++++++++++ .../smtCheckerTests/overflow/simple_overflow.sol | 6 ++++++ .../smtCheckerTests/simple/smoke_test.sol | 3 +++ test/libsolidity/smtCheckerTests/simple_assert.sol | 6 ------ .../smtCheckerTests/simple_assert_with_require.sol | 4 ---- .../smtCheckerTests/simple_overflow.sol | 6 ------ test/libsolidity/smtCheckerTests/smoke_test.sol | 3 --- .../smtCheckerTests/storage_value_vars_1.sol | 22 ------------------- .../smtCheckerTests/storage_value_vars_2.sol | 12 ----------- .../smtCheckerTests/storage_value_vars_3.sol | 25 ---------------------- .../smtCheckerTests/storage_value_vars_4.sol | 10 --------- .../smtCheckerTests/types/bool_int_mixed_1.sol | 9 ++++++++ .../smtCheckerTests/types/bool_int_mixed_2.sol | 8 +++++++ .../smtCheckerTests/types/bool_int_mixed_3.sol | 21 ++++++++++++++++++ .../smtCheckerTests/types/bool_simple_1.sol | 8 +++++++ .../smtCheckerTests/types/bool_simple_2.sol | 8 +++++++ .../smtCheckerTests/types/bool_simple_3.sol | 7 ++++++ .../smtCheckerTests/types/bool_simple_4.sol | 10 +++++++++ .../smtCheckerTests/types/bool_simple_5.sol | 7 ++++++ .../smtCheckerTests/types/bool_simple_6.sol | 9 ++++++++ .../smtCheckerTests/types/storage_value_vars_1.sol | 22 +++++++++++++++++++ .../smtCheckerTests/types/storage_value_vars_2.sol | 12 +++++++++++ .../smtCheckerTests/types/storage_value_vars_3.sol | 25 ++++++++++++++++++++++ .../smtCheckerTests/types/storage_value_vars_4.sol | 10 +++++++++ .../verification_target/constant_condition_1.sol | 9 ++++++++ .../verification_target/constant_condition_2.sol | 9 ++++++++ .../verification_target/constant_condition_3.sol | 9 ++++++++ .../verification_target/simple_assert.sol | 6 ++++++ .../simple_assert_with_require.sol | 4 ++++ .../libsolidity/smtCheckerTests/warn_on_struct.sol | 14 ------------ .../smtCheckerTests/warn_on_typecast.sol | 8 ------- .../smtCheckerTests/ways_to_merge_variables_1.sol | 12 ----------- .../smtCheckerTests/ways_to_merge_variables_2.sol | 12 ----------- .../smtCheckerTests/ways_to_merge_variables_3.sol | 12 ----------- .../smtCheckerTests/while_loop_simple_1.sol | 13 ----------- .../smtCheckerTests/while_loop_simple_2.sol | 9 -------- .../smtCheckerTests/while_loop_simple_3.sol | 11 ---------- .../smtCheckerTests/while_loop_simple_4.sol | 11 ---------- .../smtCheckerTests/while_loop_simple_5.sol | 12 ----------- 92 files changed, 491 insertions(+), 491 deletions(-) delete mode 100644 test/libsolidity/smtCheckerTests/assignment_in_declaration.sol delete mode 100644 test/libsolidity/smtCheckerTests/bool_int_mixed_1.sol delete mode 100644 test/libsolidity/smtCheckerTests/bool_int_mixed_2.sol delete mode 100644 test/libsolidity/smtCheckerTests/bool_int_mixed_3.sol delete mode 100644 test/libsolidity/smtCheckerTests/bool_simple_1.sol delete mode 100644 test/libsolidity/smtCheckerTests/bool_simple_2.sol delete mode 100644 test/libsolidity/smtCheckerTests/bool_simple_3.sol delete mode 100644 test/libsolidity/smtCheckerTests/bool_simple_4.sol delete mode 100644 test/libsolidity/smtCheckerTests/bool_simple_5.sol delete mode 100644 test/libsolidity/smtCheckerTests/bool_simple_6.sol delete mode 100644 test/libsolidity/smtCheckerTests/branches_assert_condition_1.sol delete mode 100644 test/libsolidity/smtCheckerTests/branches_assert_condition_2.sol delete mode 100644 test/libsolidity/smtCheckerTests/branches_merge_variables_1.sol delete mode 100644 test/libsolidity/smtCheckerTests/branches_merge_variables_2.sol delete mode 100644 test/libsolidity/smtCheckerTests/branches_merge_variables_3.sol delete mode 100644 test/libsolidity/smtCheckerTests/branches_merge_variables_4.sol delete mode 100644 test/libsolidity/smtCheckerTests/branches_merge_variables_5.sol delete mode 100644 test/libsolidity/smtCheckerTests/branches_merge_variables_6.sol create mode 100644 test/libsolidity/smtCheckerTests/complex/warn_on_struct.sol create mode 100644 test/libsolidity/smtCheckerTests/complex/warn_on_typecast.sol delete mode 100644 test/libsolidity/smtCheckerTests/constant_condition_1.sol delete mode 100644 test/libsolidity/smtCheckerTests/constant_condition_2.sol delete mode 100644 test/libsolidity/smtCheckerTests/constant_condition_3.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/assignment_in_declaration.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/branches_assert_condition_1.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/branches_assert_condition_2.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_1.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_2.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_3.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_4.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_5.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_6.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_1.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_2.sol create mode 100644 test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_3.sol delete mode 100644 test/libsolidity/smtCheckerTests/for_loop_1.sol delete mode 100644 test/libsolidity/smtCheckerTests/for_loop_2.sol delete mode 100644 test/libsolidity/smtCheckerTests/for_loop_3.sol delete mode 100644 test/libsolidity/smtCheckerTests/for_loop_4.sol delete mode 100644 test/libsolidity/smtCheckerTests/for_loop_5.sol delete mode 100644 test/libsolidity/smtCheckerTests/for_loop_6.sol delete mode 100644 test/libsolidity/smtCheckerTests/function_call_does_not_clear_local_vars.sol create mode 100644 test/libsolidity/smtCheckerTests/functions/function_call_does_not_clear_local_vars.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/for_loop_1.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/for_loop_2.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/for_loop_3.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/for_loop_4.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/for_loop_5.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/for_loop_6.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/while_loop_simple_1.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/while_loop_simple_2.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/while_loop_simple_3.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/while_loop_simple_4.sol create mode 100644 test/libsolidity/smtCheckerTests/loops/while_loop_simple_5.sol create mode 100644 test/libsolidity/smtCheckerTests/overflow/simple_overflow.sol create mode 100644 test/libsolidity/smtCheckerTests/simple/smoke_test.sol delete mode 100644 test/libsolidity/smtCheckerTests/simple_assert.sol delete mode 100644 test/libsolidity/smtCheckerTests/simple_assert_with_require.sol delete mode 100644 test/libsolidity/smtCheckerTests/simple_overflow.sol delete mode 100644 test/libsolidity/smtCheckerTests/smoke_test.sol delete mode 100644 test/libsolidity/smtCheckerTests/storage_value_vars_1.sol delete mode 100644 test/libsolidity/smtCheckerTests/storage_value_vars_2.sol delete mode 100644 test/libsolidity/smtCheckerTests/storage_value_vars_3.sol delete mode 100644 test/libsolidity/smtCheckerTests/storage_value_vars_4.sol create mode 100644 test/libsolidity/smtCheckerTests/types/bool_int_mixed_1.sol create mode 100644 test/libsolidity/smtCheckerTests/types/bool_int_mixed_2.sol create mode 100644 test/libsolidity/smtCheckerTests/types/bool_int_mixed_3.sol create mode 100644 test/libsolidity/smtCheckerTests/types/bool_simple_1.sol create mode 100644 test/libsolidity/smtCheckerTests/types/bool_simple_2.sol create mode 100644 test/libsolidity/smtCheckerTests/types/bool_simple_3.sol create mode 100644 test/libsolidity/smtCheckerTests/types/bool_simple_4.sol create mode 100644 test/libsolidity/smtCheckerTests/types/bool_simple_5.sol create mode 100644 test/libsolidity/smtCheckerTests/types/bool_simple_6.sol create mode 100644 test/libsolidity/smtCheckerTests/types/storage_value_vars_1.sol create mode 100644 test/libsolidity/smtCheckerTests/types/storage_value_vars_2.sol create mode 100644 test/libsolidity/smtCheckerTests/types/storage_value_vars_3.sol create mode 100644 test/libsolidity/smtCheckerTests/types/storage_value_vars_4.sol create mode 100644 test/libsolidity/smtCheckerTests/verification_target/constant_condition_1.sol create mode 100644 test/libsolidity/smtCheckerTests/verification_target/constant_condition_2.sol create mode 100644 test/libsolidity/smtCheckerTests/verification_target/constant_condition_3.sol create mode 100644 test/libsolidity/smtCheckerTests/verification_target/simple_assert.sol create mode 100644 test/libsolidity/smtCheckerTests/verification_target/simple_assert_with_require.sol delete mode 100644 test/libsolidity/smtCheckerTests/warn_on_struct.sol delete mode 100644 test/libsolidity/smtCheckerTests/warn_on_typecast.sol delete mode 100644 test/libsolidity/smtCheckerTests/ways_to_merge_variables_1.sol delete mode 100644 test/libsolidity/smtCheckerTests/ways_to_merge_variables_2.sol delete mode 100644 test/libsolidity/smtCheckerTests/ways_to_merge_variables_3.sol delete mode 100644 test/libsolidity/smtCheckerTests/while_loop_simple_1.sol delete mode 100644 test/libsolidity/smtCheckerTests/while_loop_simple_2.sol delete mode 100644 test/libsolidity/smtCheckerTests/while_loop_simple_3.sol delete mode 100644 test/libsolidity/smtCheckerTests/while_loop_simple_4.sol delete mode 100644 test/libsolidity/smtCheckerTests/while_loop_simple_5.sol diff --git a/test/libsolidity/smtCheckerTests/assignment_in_declaration.sol b/test/libsolidity/smtCheckerTests/assignment_in_declaration.sol deleted file mode 100644 index 0c701672..00000000 --- a/test/libsolidity/smtCheckerTests/assignment_in_declaration.sol +++ /dev/null @@ -1,4 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f() public pure { uint a = 2; assert(a == 2); } -} diff --git a/test/libsolidity/smtCheckerTests/bool_int_mixed_1.sol b/test/libsolidity/smtCheckerTests/bool_int_mixed_1.sol deleted file mode 100644 index d611cc17..00000000 --- a/test/libsolidity/smtCheckerTests/bool_int_mixed_1.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(bool x) public pure { - uint a; - if(x) - a = 1; - assert(!x || a > 0); - } -} diff --git a/test/libsolidity/smtCheckerTests/bool_int_mixed_2.sol b/test/libsolidity/smtCheckerTests/bool_int_mixed_2.sol deleted file mode 100644 index 24640c5a..00000000 --- a/test/libsolidity/smtCheckerTests/bool_int_mixed_2.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(bool x, uint a) public pure { - require(!x || a > 0); - uint b = a; - assert(!x || b > 0); - } -} diff --git a/test/libsolidity/smtCheckerTests/bool_int_mixed_3.sol b/test/libsolidity/smtCheckerTests/bool_int_mixed_3.sol deleted file mode 100644 index f872e82f..00000000 --- a/test/libsolidity/smtCheckerTests/bool_int_mixed_3.sol +++ /dev/null @@ -1,21 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(bool x, bool y) public pure { - uint a; - if (x) { - if (y) { - a = 0; - } else { - a = 1; - } - } else { - if (y) { - a = 1; - } else { - a = 0; - } - } - bool xor_x_y = (x && !y) || (!x && y); - assert(!xor_x_y || a > 0); - } -} diff --git a/test/libsolidity/smtCheckerTests/bool_simple_1.sol b/test/libsolidity/smtCheckerTests/bool_simple_1.sol deleted file mode 100644 index 76b4b08b..00000000 --- a/test/libsolidity/smtCheckerTests/bool_simple_1.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(bool x) public pure { - assert(x); - } -} -// ---- -// Warning: (90-99): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/bool_simple_2.sol b/test/libsolidity/smtCheckerTests/bool_simple_2.sol deleted file mode 100644 index 5c166c02..00000000 --- a/test/libsolidity/smtCheckerTests/bool_simple_2.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(bool x, bool y) public pure { - assert(x == y); - } -} -// ---- -// Warning: (98-112): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/bool_simple_3.sol b/test/libsolidity/smtCheckerTests/bool_simple_3.sol deleted file mode 100644 index 1d2ab49f..00000000 --- a/test/libsolidity/smtCheckerTests/bool_simple_3.sol +++ /dev/null @@ -1,7 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(bool x, bool y) public pure { - bool z = x || y; - assert(!(x && y) || z); - } -} diff --git a/test/libsolidity/smtCheckerTests/bool_simple_4.sol b/test/libsolidity/smtCheckerTests/bool_simple_4.sol deleted file mode 100644 index c40404a4..00000000 --- a/test/libsolidity/smtCheckerTests/bool_simple_4.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(bool x) public pure { - if(x) { - assert(x); - } else { - assert(!x); - } - } -} diff --git a/test/libsolidity/smtCheckerTests/bool_simple_5.sol b/test/libsolidity/smtCheckerTests/bool_simple_5.sol deleted file mode 100644 index 4cecebbc..00000000 --- a/test/libsolidity/smtCheckerTests/bool_simple_5.sol +++ /dev/null @@ -1,7 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(bool x) public pure { - bool y = x; - assert(x == y); - } -} diff --git a/test/libsolidity/smtCheckerTests/bool_simple_6.sol b/test/libsolidity/smtCheckerTests/bool_simple_6.sol deleted file mode 100644 index 90350bb6..00000000 --- a/test/libsolidity/smtCheckerTests/bool_simple_6.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(bool x) public pure { - require(x); - bool y; - y = false; - assert(x || y); - } -} diff --git a/test/libsolidity/smtCheckerTests/branches_assert_condition_1.sol b/test/libsolidity/smtCheckerTests/branches_assert_condition_1.sol deleted file mode 100644 index 64f6e012..00000000 --- a/test/libsolidity/smtCheckerTests/branches_assert_condition_1.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - if (x > 10) { - assert(x > 9); - } - else - { - assert(x < 11); - } - } -} diff --git a/test/libsolidity/smtCheckerTests/branches_assert_condition_2.sol b/test/libsolidity/smtCheckerTests/branches_assert_condition_2.sol deleted file mode 100644 index e39ab844..00000000 --- a/test/libsolidity/smtCheckerTests/branches_assert_condition_2.sol +++ /dev/null @@ -1,16 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - if (x > 10) { - assert(x > 9); - } - else if (x > 2) - { - assert(x <= 10 && x > 2); - } - else - { - assert(0 <= x && x <= 2); - } - } -} diff --git a/test/libsolidity/smtCheckerTests/branches_merge_variables_1.sol b/test/libsolidity/smtCheckerTests/branches_merge_variables_1.sol deleted file mode 100644 index f93e32e4..00000000 --- a/test/libsolidity/smtCheckerTests/branches_merge_variables_1.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma experimental SMTChecker; -// Branch does not touch variable a -contract C { - function f(uint x) public pure { - uint a = 3; - if (x > 10) { - } - assert(a == 3); - } -} diff --git a/test/libsolidity/smtCheckerTests/branches_merge_variables_2.sol b/test/libsolidity/smtCheckerTests/branches_merge_variables_2.sol deleted file mode 100644 index c00ef787..00000000 --- a/test/libsolidity/smtCheckerTests/branches_merge_variables_2.sol +++ /dev/null @@ -1,11 +0,0 @@ -pragma experimental SMTChecker; -// Positive branch touches variable a, but assertion should still hold. -contract C { - function f(uint x) public pure { - uint a = 3; - if (x > 10) { - a = 3; - } - assert(a == 3); - } -} diff --git a/test/libsolidity/smtCheckerTests/branches_merge_variables_3.sol b/test/libsolidity/smtCheckerTests/branches_merge_variables_3.sol deleted file mode 100644 index 4e18aa88..00000000 --- a/test/libsolidity/smtCheckerTests/branches_merge_variables_3.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma experimental SMTChecker; -// Negative branch touches variable a, but assertion should still hold. -contract C { - function f(uint x) public pure { - uint a = 3; - if (x > 10) { - } else { - a = 3; - } - assert(a == 3); - } -} diff --git a/test/libsolidity/smtCheckerTests/branches_merge_variables_4.sol b/test/libsolidity/smtCheckerTests/branches_merge_variables_4.sol deleted file mode 100644 index e3a02704..00000000 --- a/test/libsolidity/smtCheckerTests/branches_merge_variables_4.sol +++ /dev/null @@ -1,13 +0,0 @@ -pragma experimental SMTChecker; -// Variable is not merged, if it is only read. -contract C { - function f(uint x) public pure { - uint a = 3; - if (x > 10) { - assert(a == 3); - } else { - assert(a == 3); - } - assert(a == 3); - } -} diff --git a/test/libsolidity/smtCheckerTests/branches_merge_variables_5.sol b/test/libsolidity/smtCheckerTests/branches_merge_variables_5.sol deleted file mode 100644 index 0bd1cf3a..00000000 --- a/test/libsolidity/smtCheckerTests/branches_merge_variables_5.sol +++ /dev/null @@ -1,13 +0,0 @@ -pragma experimental SMTChecker; -// Variable is reset in both branches -contract C { - function f(uint x) public pure { - uint a = 2; - if (x > 10) { - a = 3; - } else { - a = 3; - } - assert(a == 3); - } -} diff --git a/test/libsolidity/smtCheckerTests/branches_merge_variables_6.sol b/test/libsolidity/smtCheckerTests/branches_merge_variables_6.sol deleted file mode 100644 index 8e477179..00000000 --- a/test/libsolidity/smtCheckerTests/branches_merge_variables_6.sol +++ /dev/null @@ -1,13 +0,0 @@ -pragma experimental SMTChecker; -// Variable is reset in both branches -contract C { - function f(uint x) public pure { - uint a = 2; - if (x > 10) { - a = 3; - } else { - a = 4; - } - assert(a >= 3); - } -} diff --git a/test/libsolidity/smtCheckerTests/complex/warn_on_struct.sol b/test/libsolidity/smtCheckerTests/complex/warn_on_struct.sol new file mode 100644 index 00000000..6d9afe7c --- /dev/null +++ b/test/libsolidity/smtCheckerTests/complex/warn_on_struct.sol @@ -0,0 +1,14 @@ +pragma experimental SMTChecker; + +contract C { + struct A { uint a; uint b; } + function f() public pure returns (uint) { + A memory a = A({ a: 1, b: 2 }); + } +} +// ---- +// Warning: (133-143): Unused local variable. +// Warning: (133-143): Assertion checker does not yet support the type of this variable. +// Warning: (146-163): Assertion checker does not yet implement this expression. +// Warning: (146-163): Internal error: Expression undefined for SMT solver. +// Warning: (146-163): Assertion checker does not yet implement this type. diff --git a/test/libsolidity/smtCheckerTests/complex/warn_on_typecast.sol b/test/libsolidity/smtCheckerTests/complex/warn_on_typecast.sol new file mode 100644 index 00000000..be785414 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/complex/warn_on_typecast.sol @@ -0,0 +1,8 @@ +pragma experimental SMTChecker; +contract C { + function f() public pure returns (uint) { + return uint8(1); + } +} +// ---- +// Warning: (106-114): Assertion checker does not yet implement this expression. diff --git a/test/libsolidity/smtCheckerTests/constant_condition_1.sol b/test/libsolidity/smtCheckerTests/constant_condition_1.sol deleted file mode 100644 index b9fae4ee..00000000 --- a/test/libsolidity/smtCheckerTests/constant_condition_1.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - if (x >= 0) { revert(); } - } -} -// ---- -// Warning: (94-100): Condition is always true. -// Warning: (104-112): Assertion checker does not yet implement this type of function call. diff --git a/test/libsolidity/smtCheckerTests/constant_condition_2.sol b/test/libsolidity/smtCheckerTests/constant_condition_2.sol deleted file mode 100644 index aaa613ea..00000000 --- a/test/libsolidity/smtCheckerTests/constant_condition_2.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - if (x >= 10) { if (x < 10) { revert(); } } - } -} -// ---- -// Warning: (109-115): Condition is always false. -// Warning: (119-127): Assertion checker does not yet implement this type of function call. diff --git a/test/libsolidity/smtCheckerTests/constant_condition_3.sol b/test/libsolidity/smtCheckerTests/constant_condition_3.sol deleted file mode 100644 index f22cd65e..00000000 --- a/test/libsolidity/smtCheckerTests/constant_condition_3.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma experimental SMTChecker; -// a plain literal constant is fine -contract C { - function f(uint) public pure { - if (true) { revert(); } - } -} -// ---- -// Warning: (136-144): Assertion checker does not yet implement this type of function call. diff --git a/test/libsolidity/smtCheckerTests/control_flow/assignment_in_declaration.sol b/test/libsolidity/smtCheckerTests/control_flow/assignment_in_declaration.sol new file mode 100644 index 00000000..0c701672 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/assignment_in_declaration.sol @@ -0,0 +1,4 @@ +pragma experimental SMTChecker; +contract C { + function f() public pure { uint a = 2; assert(a == 2); } +} diff --git a/test/libsolidity/smtCheckerTests/control_flow/branches_assert_condition_1.sol b/test/libsolidity/smtCheckerTests/control_flow/branches_assert_condition_1.sol new file mode 100644 index 00000000..64f6e012 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/branches_assert_condition_1.sol @@ -0,0 +1,12 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + if (x > 10) { + assert(x > 9); + } + else + { + assert(x < 11); + } + } +} diff --git a/test/libsolidity/smtCheckerTests/control_flow/branches_assert_condition_2.sol b/test/libsolidity/smtCheckerTests/control_flow/branches_assert_condition_2.sol new file mode 100644 index 00000000..e39ab844 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/branches_assert_condition_2.sol @@ -0,0 +1,16 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + if (x > 10) { + assert(x > 9); + } + else if (x > 2) + { + assert(x <= 10 && x > 2); + } + else + { + assert(0 <= x && x <= 2); + } + } +} diff --git a/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_1.sol b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_1.sol new file mode 100644 index 00000000..f93e32e4 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_1.sol @@ -0,0 +1,10 @@ +pragma experimental SMTChecker; +// Branch does not touch variable a +contract C { + function f(uint x) public pure { + uint a = 3; + if (x > 10) { + } + assert(a == 3); + } +} diff --git a/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_2.sol b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_2.sol new file mode 100644 index 00000000..c00ef787 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_2.sol @@ -0,0 +1,11 @@ +pragma experimental SMTChecker; +// Positive branch touches variable a, but assertion should still hold. +contract C { + function f(uint x) public pure { + uint a = 3; + if (x > 10) { + a = 3; + } + assert(a == 3); + } +} diff --git a/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_3.sol b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_3.sol new file mode 100644 index 00000000..4e18aa88 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_3.sol @@ -0,0 +1,12 @@ +pragma experimental SMTChecker; +// Negative branch touches variable a, but assertion should still hold. +contract C { + function f(uint x) public pure { + uint a = 3; + if (x > 10) { + } else { + a = 3; + } + assert(a == 3); + } +} diff --git a/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_4.sol b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_4.sol new file mode 100644 index 00000000..e3a02704 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_4.sol @@ -0,0 +1,13 @@ +pragma experimental SMTChecker; +// Variable is not merged, if it is only read. +contract C { + function f(uint x) public pure { + uint a = 3; + if (x > 10) { + assert(a == 3); + } else { + assert(a == 3); + } + assert(a == 3); + } +} diff --git a/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_5.sol b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_5.sol new file mode 100644 index 00000000..0bd1cf3a --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_5.sol @@ -0,0 +1,13 @@ +pragma experimental SMTChecker; +// Variable is reset in both branches +contract C { + function f(uint x) public pure { + uint a = 2; + if (x > 10) { + a = 3; + } else { + a = 3; + } + assert(a == 3); + } +} diff --git a/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_6.sol b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_6.sol new file mode 100644 index 00000000..8e477179 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/branches_merge_variables_6.sol @@ -0,0 +1,13 @@ +pragma experimental SMTChecker; +// Variable is reset in both branches +contract C { + function f(uint x) public pure { + uint a = 2; + if (x > 10) { + a = 3; + } else { + a = 4; + } + assert(a >= 3); + } +} diff --git a/test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_1.sol b/test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_1.sol new file mode 100644 index 00000000..16d6fdfe --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_1.sol @@ -0,0 +1,12 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + uint a = 3; + if (x > 10) { + a++; + } + assert(a == 3); + } +} +// ---- +// Warning: (159-173): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_2.sol b/test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_2.sol new file mode 100644 index 00000000..e25ab20f --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_2.sol @@ -0,0 +1,12 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + uint a = 3; + if (x > 10) { + ++a; + } + assert(a == 3); + } +} +// ---- +// Warning: (159-173): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_3.sol b/test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_3.sol new file mode 100644 index 00000000..03ae7216 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/control_flow/ways_to_merge_variables_3.sol @@ -0,0 +1,12 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + uint a = 3; + if (x > 10) { + a = 5; + } + assert(a == 3); + } +} +// ---- +// Warning: (161-175): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/for_loop_1.sol b/test/libsolidity/smtCheckerTests/for_loop_1.sol deleted file mode 100644 index 8988efad..00000000 --- a/test/libsolidity/smtCheckerTests/for_loop_1.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - require(x == 2); - for (;;) {} - assert(x == 2); - } -} diff --git a/test/libsolidity/smtCheckerTests/for_loop_2.sol b/test/libsolidity/smtCheckerTests/for_loop_2.sol deleted file mode 100644 index 58c9f3a7..00000000 --- a/test/libsolidity/smtCheckerTests/for_loop_2.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - for (; x == 2; ) { - assert(x == 2); - } - } -} diff --git a/test/libsolidity/smtCheckerTests/for_loop_3.sol b/test/libsolidity/smtCheckerTests/for_loop_3.sol deleted file mode 100644 index 8bf9bdc7..00000000 --- a/test/libsolidity/smtCheckerTests/for_loop_3.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - for (uint y = 2; x < 10; ) { - assert(y == 2); - } - } -} diff --git a/test/libsolidity/smtCheckerTests/for_loop_4.sol b/test/libsolidity/smtCheckerTests/for_loop_4.sol deleted file mode 100644 index 4d082026..00000000 --- a/test/libsolidity/smtCheckerTests/for_loop_4.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - for (uint y = 2; x < 10; y = 3) { - assert(y == 2); - } - } -} -// ---- -// Warning: (136-150): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/for_loop_5.sol b/test/libsolidity/smtCheckerTests/for_loop_5.sol deleted file mode 100644 index 2c84960f..00000000 --- a/test/libsolidity/smtCheckerTests/for_loop_5.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - uint y; - for (y = 2; x < 10; ) { - y = 3; - } - assert(y == 3); - } -} -// ---- -// Warning: (167-181): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/for_loop_6.sol b/test/libsolidity/smtCheckerTests/for_loop_6.sol deleted file mode 100644 index 90c4c328..00000000 --- a/test/libsolidity/smtCheckerTests/for_loop_6.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - uint y; - for (y = 2; x < 10; ) { - y = 3; - } - assert(y == 2); - } -} -// ---- -// Warning: (167-181): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/function_call_does_not_clear_local_vars.sol b/test/libsolidity/smtCheckerTests/function_call_does_not_clear_local_vars.sol deleted file mode 100644 index b4260224..00000000 --- a/test/libsolidity/smtCheckerTests/function_call_does_not_clear_local_vars.sol +++ /dev/null @@ -1,13 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f() public { - uint a = 3; - this.f(); - assert(a == 3); - f(); - assert(a == 3); - } -} -// ---- -// Warning: (99-107): Assertion checker does not yet implement this type of function call. -// Warning: (141-144): Assertion checker does not support recursive function calls. diff --git a/test/libsolidity/smtCheckerTests/functions/function_call_does_not_clear_local_vars.sol b/test/libsolidity/smtCheckerTests/functions/function_call_does_not_clear_local_vars.sol new file mode 100644 index 00000000..b4260224 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/functions/function_call_does_not_clear_local_vars.sol @@ -0,0 +1,13 @@ +pragma experimental SMTChecker; +contract C { + function f() public { + uint a = 3; + this.f(); + assert(a == 3); + f(); + assert(a == 3); + } +} +// ---- +// Warning: (99-107): Assertion checker does not yet implement this type of function call. +// Warning: (141-144): Assertion checker does not support recursive function calls. diff --git a/test/libsolidity/smtCheckerTests/loops/for_loop_1.sol b/test/libsolidity/smtCheckerTests/loops/for_loop_1.sol new file mode 100644 index 00000000..8988efad --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/for_loop_1.sol @@ -0,0 +1,8 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + require(x == 2); + for (;;) {} + assert(x == 2); + } +} diff --git a/test/libsolidity/smtCheckerTests/loops/for_loop_2.sol b/test/libsolidity/smtCheckerTests/loops/for_loop_2.sol new file mode 100644 index 00000000..58c9f3a7 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/for_loop_2.sol @@ -0,0 +1,8 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + for (; x == 2; ) { + assert(x == 2); + } + } +} diff --git a/test/libsolidity/smtCheckerTests/loops/for_loop_3.sol b/test/libsolidity/smtCheckerTests/loops/for_loop_3.sol new file mode 100644 index 00000000..8bf9bdc7 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/for_loop_3.sol @@ -0,0 +1,8 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + for (uint y = 2; x < 10; ) { + assert(y == 2); + } + } +} diff --git a/test/libsolidity/smtCheckerTests/loops/for_loop_4.sol b/test/libsolidity/smtCheckerTests/loops/for_loop_4.sol new file mode 100644 index 00000000..4d082026 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/for_loop_4.sol @@ -0,0 +1,10 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + for (uint y = 2; x < 10; y = 3) { + assert(y == 2); + } + } +} +// ---- +// Warning: (136-150): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/loops/for_loop_5.sol b/test/libsolidity/smtCheckerTests/loops/for_loop_5.sol new file mode 100644 index 00000000..2c84960f --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/for_loop_5.sol @@ -0,0 +1,12 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + uint y; + for (y = 2; x < 10; ) { + y = 3; + } + assert(y == 3); + } +} +// ---- +// Warning: (167-181): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/loops/for_loop_6.sol b/test/libsolidity/smtCheckerTests/loops/for_loop_6.sol new file mode 100644 index 00000000..90c4c328 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/for_loop_6.sol @@ -0,0 +1,12 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + uint y; + for (y = 2; x < 10; ) { + y = 3; + } + assert(y == 2); + } +} +// ---- +// Warning: (167-181): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/loops/while_loop_simple_1.sol b/test/libsolidity/smtCheckerTests/loops/while_loop_simple_1.sol new file mode 100644 index 00000000..074be86f --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/while_loop_simple_1.sol @@ -0,0 +1,13 @@ +pragma experimental SMTChecker; +// Check that variables are cleared +contract C { + function f(uint x) public pure { + x = 2; + while (x > 1) { + x = 2; + } + assert(x == 2); + } +} +// ---- +// Warning: (194-208): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/loops/while_loop_simple_2.sol b/test/libsolidity/smtCheckerTests/loops/while_loop_simple_2.sol new file mode 100644 index 00000000..92a3f0fe --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/while_loop_simple_2.sol @@ -0,0 +1,9 @@ +pragma experimental SMTChecker; +// Check that condition is assumed. +contract C { + function f(uint x) public pure { + while (x == 2) { + assert(x == 2); + } + } +} diff --git a/test/libsolidity/smtCheckerTests/loops/while_loop_simple_3.sol b/test/libsolidity/smtCheckerTests/loops/while_loop_simple_3.sol new file mode 100644 index 00000000..a37df888 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/while_loop_simple_3.sol @@ -0,0 +1,11 @@ +pragma experimental SMTChecker; +// Check that condition is not assumed after the body anymore +contract C { + function f(uint x) public pure { + while (x == 2) { + } + assert(x == 2); + } +} +// ---- +// Warning: (187-201): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/loops/while_loop_simple_4.sol b/test/libsolidity/smtCheckerTests/loops/while_loop_simple_4.sol new file mode 100644 index 00000000..f71da865 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/while_loop_simple_4.sol @@ -0,0 +1,11 @@ +pragma experimental SMTChecker; +// Check that negation of condition is not assumed after the body anymore +contract C { + function f(uint x) public pure { + while (x == 2) { + } + assert(x != 2); + } +} +// ---- +// Warning: (199-213): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/loops/while_loop_simple_5.sol b/test/libsolidity/smtCheckerTests/loops/while_loop_simple_5.sol new file mode 100644 index 00000000..41559c99 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/while_loop_simple_5.sol @@ -0,0 +1,12 @@ +pragma experimental SMTChecker; +// Check that side-effects of condition are taken into account +contract C { + function f(uint x, uint y) public pure { + x = 7; + while ((x = y) > 0) { + } + assert(x == 7); + } +} +// ---- +// Warning: (216-230): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/overflow/simple_overflow.sol b/test/libsolidity/smtCheckerTests/overflow/simple_overflow.sol new file mode 100644 index 00000000..894ff1a4 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/overflow/simple_overflow.sol @@ -0,0 +1,6 @@ +pragma experimental SMTChecker; +contract C { + function f(uint a, uint b) public pure returns (uint) { return a + b; } +} +// ---- +// Warning: (112-117): Overflow (resulting value larger than 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) happens here diff --git a/test/libsolidity/smtCheckerTests/simple/smoke_test.sol b/test/libsolidity/smtCheckerTests/simple/smoke_test.sol new file mode 100644 index 00000000..8b7b77da --- /dev/null +++ b/test/libsolidity/smtCheckerTests/simple/smoke_test.sol @@ -0,0 +1,3 @@ +pragma experimental SMTChecker; +contract C { +} diff --git a/test/libsolidity/smtCheckerTests/simple_assert.sol b/test/libsolidity/smtCheckerTests/simple_assert.sol deleted file mode 100644 index 8bd6e61a..00000000 --- a/test/libsolidity/smtCheckerTests/simple_assert.sol +++ /dev/null @@ -1,6 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint a) public pure { assert(a == 2); } -} -// ---- -// Warning: (82-96): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/simple_assert_with_require.sol b/test/libsolidity/smtCheckerTests/simple_assert_with_require.sol deleted file mode 100644 index b66ae245..00000000 --- a/test/libsolidity/smtCheckerTests/simple_assert_with_require.sol +++ /dev/null @@ -1,4 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint a) public pure { require(a < 10); assert(a < 20); } -} diff --git a/test/libsolidity/smtCheckerTests/simple_overflow.sol b/test/libsolidity/smtCheckerTests/simple_overflow.sol deleted file mode 100644 index 894ff1a4..00000000 --- a/test/libsolidity/smtCheckerTests/simple_overflow.sol +++ /dev/null @@ -1,6 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint a, uint b) public pure returns (uint) { return a + b; } -} -// ---- -// Warning: (112-117): Overflow (resulting value larger than 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) happens here diff --git a/test/libsolidity/smtCheckerTests/smoke_test.sol b/test/libsolidity/smtCheckerTests/smoke_test.sol deleted file mode 100644 index 8b7b77da..00000000 --- a/test/libsolidity/smtCheckerTests/smoke_test.sol +++ /dev/null @@ -1,3 +0,0 @@ -pragma experimental SMTChecker; -contract C { -} diff --git a/test/libsolidity/smtCheckerTests/storage_value_vars_1.sol b/test/libsolidity/smtCheckerTests/storage_value_vars_1.sol deleted file mode 100644 index 84f6c77e..00000000 --- a/test/libsolidity/smtCheckerTests/storage_value_vars_1.sol +++ /dev/null @@ -1,22 +0,0 @@ -pragma experimental SMTChecker; -contract C -{ - address a; - bool b; - uint c; - function f(uint x) public { - if (x == 0) - { - a = 0x0000000000000000000000000000000000000100; - b = true; - } - else - { - a = 0x0000000000000000000000000000000000000200; - b = false; - } - assert(a > 0x0000000000000000000000000000000000000000 && b); - } -} -// ---- -// Warning: (362-421): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/storage_value_vars_2.sol b/test/libsolidity/smtCheckerTests/storage_value_vars_2.sol deleted file mode 100644 index bceddb38..00000000 --- a/test/libsolidity/smtCheckerTests/storage_value_vars_2.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma experimental SMTChecker; -contract C -{ - address a; - bool b; - uint c; - function f() public view { - assert(c > 0); - } -} -// ---- -// Warning: (123-136): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/storage_value_vars_3.sol b/test/libsolidity/smtCheckerTests/storage_value_vars_3.sol deleted file mode 100644 index 39049b99..00000000 --- a/test/libsolidity/smtCheckerTests/storage_value_vars_3.sol +++ /dev/null @@ -1,25 +0,0 @@ -pragma experimental SMTChecker; -contract C -{ - function f(uint x) public { - if (x == 0) - { - a = 0x0000000000000000000000000000000000000100; - b = true; - } - else - { - a = 0x0000000000000000000000000000000000000200; - b = false; - } - assert(b == (a < 0x0000000000000000000000000000000000000200)); - } - - function g() public view { - require(a < 0x0000000000000000000000000000000000000100); - assert(c >= 0); - } - address a; - bool b; - uint c; -} diff --git a/test/libsolidity/smtCheckerTests/storage_value_vars_4.sol b/test/libsolidity/smtCheckerTests/storage_value_vars_4.sol deleted file mode 100644 index 88b6b0ae..00000000 --- a/test/libsolidity/smtCheckerTests/storage_value_vars_4.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma experimental SMTChecker; -contract C -{ - function f() public view { - assert(c > 0); - } - uint c; -} -// ---- -// Warning: (84-97): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/types/bool_int_mixed_1.sol b/test/libsolidity/smtCheckerTests/types/bool_int_mixed_1.sol new file mode 100644 index 00000000..d611cc17 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/bool_int_mixed_1.sol @@ -0,0 +1,9 @@ +pragma experimental SMTChecker; +contract C { + function f(bool x) public pure { + uint a; + if(x) + a = 1; + assert(!x || a > 0); + } +} diff --git a/test/libsolidity/smtCheckerTests/types/bool_int_mixed_2.sol b/test/libsolidity/smtCheckerTests/types/bool_int_mixed_2.sol new file mode 100644 index 00000000..24640c5a --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/bool_int_mixed_2.sol @@ -0,0 +1,8 @@ +pragma experimental SMTChecker; +contract C { + function f(bool x, uint a) public pure { + require(!x || a > 0); + uint b = a; + assert(!x || b > 0); + } +} diff --git a/test/libsolidity/smtCheckerTests/types/bool_int_mixed_3.sol b/test/libsolidity/smtCheckerTests/types/bool_int_mixed_3.sol new file mode 100644 index 00000000..f872e82f --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/bool_int_mixed_3.sol @@ -0,0 +1,21 @@ +pragma experimental SMTChecker; +contract C { + function f(bool x, bool y) public pure { + uint a; + if (x) { + if (y) { + a = 0; + } else { + a = 1; + } + } else { + if (y) { + a = 1; + } else { + a = 0; + } + } + bool xor_x_y = (x && !y) || (!x && y); + assert(!xor_x_y || a > 0); + } +} diff --git a/test/libsolidity/smtCheckerTests/types/bool_simple_1.sol b/test/libsolidity/smtCheckerTests/types/bool_simple_1.sol new file mode 100644 index 00000000..76b4b08b --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/bool_simple_1.sol @@ -0,0 +1,8 @@ +pragma experimental SMTChecker; +contract C { + function f(bool x) public pure { + assert(x); + } +} +// ---- +// Warning: (90-99): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/types/bool_simple_2.sol b/test/libsolidity/smtCheckerTests/types/bool_simple_2.sol new file mode 100644 index 00000000..5c166c02 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/bool_simple_2.sol @@ -0,0 +1,8 @@ +pragma experimental SMTChecker; +contract C { + function f(bool x, bool y) public pure { + assert(x == y); + } +} +// ---- +// Warning: (98-112): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/types/bool_simple_3.sol b/test/libsolidity/smtCheckerTests/types/bool_simple_3.sol new file mode 100644 index 00000000..1d2ab49f --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/bool_simple_3.sol @@ -0,0 +1,7 @@ +pragma experimental SMTChecker; +contract C { + function f(bool x, bool y) public pure { + bool z = x || y; + assert(!(x && y) || z); + } +} diff --git a/test/libsolidity/smtCheckerTests/types/bool_simple_4.sol b/test/libsolidity/smtCheckerTests/types/bool_simple_4.sol new file mode 100644 index 00000000..c40404a4 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/bool_simple_4.sol @@ -0,0 +1,10 @@ +pragma experimental SMTChecker; +contract C { + function f(bool x) public pure { + if(x) { + assert(x); + } else { + assert(!x); + } + } +} diff --git a/test/libsolidity/smtCheckerTests/types/bool_simple_5.sol b/test/libsolidity/smtCheckerTests/types/bool_simple_5.sol new file mode 100644 index 00000000..4cecebbc --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/bool_simple_5.sol @@ -0,0 +1,7 @@ +pragma experimental SMTChecker; +contract C { + function f(bool x) public pure { + bool y = x; + assert(x == y); + } +} diff --git a/test/libsolidity/smtCheckerTests/types/bool_simple_6.sol b/test/libsolidity/smtCheckerTests/types/bool_simple_6.sol new file mode 100644 index 00000000..90350bb6 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/bool_simple_6.sol @@ -0,0 +1,9 @@ +pragma experimental SMTChecker; +contract C { + function f(bool x) public pure { + require(x); + bool y; + y = false; + assert(x || y); + } +} diff --git a/test/libsolidity/smtCheckerTests/types/storage_value_vars_1.sol b/test/libsolidity/smtCheckerTests/types/storage_value_vars_1.sol new file mode 100644 index 00000000..84f6c77e --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/storage_value_vars_1.sol @@ -0,0 +1,22 @@ +pragma experimental SMTChecker; +contract C +{ + address a; + bool b; + uint c; + function f(uint x) public { + if (x == 0) + { + a = 0x0000000000000000000000000000000000000100; + b = true; + } + else + { + a = 0x0000000000000000000000000000000000000200; + b = false; + } + assert(a > 0x0000000000000000000000000000000000000000 && b); + } +} +// ---- +// Warning: (362-421): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/types/storage_value_vars_2.sol b/test/libsolidity/smtCheckerTests/types/storage_value_vars_2.sol new file mode 100644 index 00000000..bceddb38 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/storage_value_vars_2.sol @@ -0,0 +1,12 @@ +pragma experimental SMTChecker; +contract C +{ + address a; + bool b; + uint c; + function f() public view { + assert(c > 0); + } +} +// ---- +// Warning: (123-136): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/types/storage_value_vars_3.sol b/test/libsolidity/smtCheckerTests/types/storage_value_vars_3.sol new file mode 100644 index 00000000..39049b99 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/storage_value_vars_3.sol @@ -0,0 +1,25 @@ +pragma experimental SMTChecker; +contract C +{ + function f(uint x) public { + if (x == 0) + { + a = 0x0000000000000000000000000000000000000100; + b = true; + } + else + { + a = 0x0000000000000000000000000000000000000200; + b = false; + } + assert(b == (a < 0x0000000000000000000000000000000000000200)); + } + + function g() public view { + require(a < 0x0000000000000000000000000000000000000100); + assert(c >= 0); + } + address a; + bool b; + uint c; +} diff --git a/test/libsolidity/smtCheckerTests/types/storage_value_vars_4.sol b/test/libsolidity/smtCheckerTests/types/storage_value_vars_4.sol new file mode 100644 index 00000000..88b6b0ae --- /dev/null +++ b/test/libsolidity/smtCheckerTests/types/storage_value_vars_4.sol @@ -0,0 +1,10 @@ +pragma experimental SMTChecker; +contract C +{ + function f() public view { + assert(c > 0); + } + uint c; +} +// ---- +// Warning: (84-97): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/verification_target/constant_condition_1.sol b/test/libsolidity/smtCheckerTests/verification_target/constant_condition_1.sol new file mode 100644 index 00000000..b9fae4ee --- /dev/null +++ b/test/libsolidity/smtCheckerTests/verification_target/constant_condition_1.sol @@ -0,0 +1,9 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + if (x >= 0) { revert(); } + } +} +// ---- +// Warning: (94-100): Condition is always true. +// Warning: (104-112): Assertion checker does not yet implement this type of function call. diff --git a/test/libsolidity/smtCheckerTests/verification_target/constant_condition_2.sol b/test/libsolidity/smtCheckerTests/verification_target/constant_condition_2.sol new file mode 100644 index 00000000..aaa613ea --- /dev/null +++ b/test/libsolidity/smtCheckerTests/verification_target/constant_condition_2.sol @@ -0,0 +1,9 @@ +pragma experimental SMTChecker; +contract C { + function f(uint x) public pure { + if (x >= 10) { if (x < 10) { revert(); } } + } +} +// ---- +// Warning: (109-115): Condition is always false. +// Warning: (119-127): Assertion checker does not yet implement this type of function call. diff --git a/test/libsolidity/smtCheckerTests/verification_target/constant_condition_3.sol b/test/libsolidity/smtCheckerTests/verification_target/constant_condition_3.sol new file mode 100644 index 00000000..f22cd65e --- /dev/null +++ b/test/libsolidity/smtCheckerTests/verification_target/constant_condition_3.sol @@ -0,0 +1,9 @@ +pragma experimental SMTChecker; +// a plain literal constant is fine +contract C { + function f(uint) public pure { + if (true) { revert(); } + } +} +// ---- +// Warning: (136-144): Assertion checker does not yet implement this type of function call. diff --git a/test/libsolidity/smtCheckerTests/verification_target/simple_assert.sol b/test/libsolidity/smtCheckerTests/verification_target/simple_assert.sol new file mode 100644 index 00000000..8bd6e61a --- /dev/null +++ b/test/libsolidity/smtCheckerTests/verification_target/simple_assert.sol @@ -0,0 +1,6 @@ +pragma experimental SMTChecker; +contract C { + function f(uint a) public pure { assert(a == 2); } +} +// ---- +// Warning: (82-96): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/verification_target/simple_assert_with_require.sol b/test/libsolidity/smtCheckerTests/verification_target/simple_assert_with_require.sol new file mode 100644 index 00000000..b66ae245 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/verification_target/simple_assert_with_require.sol @@ -0,0 +1,4 @@ +pragma experimental SMTChecker; +contract C { + function f(uint a) public pure { require(a < 10); assert(a < 20); } +} diff --git a/test/libsolidity/smtCheckerTests/warn_on_struct.sol b/test/libsolidity/smtCheckerTests/warn_on_struct.sol deleted file mode 100644 index 6d9afe7c..00000000 --- a/test/libsolidity/smtCheckerTests/warn_on_struct.sol +++ /dev/null @@ -1,14 +0,0 @@ -pragma experimental SMTChecker; - -contract C { - struct A { uint a; uint b; } - function f() public pure returns (uint) { - A memory a = A({ a: 1, b: 2 }); - } -} -// ---- -// Warning: (133-143): Unused local variable. -// Warning: (133-143): Assertion checker does not yet support the type of this variable. -// Warning: (146-163): Assertion checker does not yet implement this expression. -// Warning: (146-163): Internal error: Expression undefined for SMT solver. -// Warning: (146-163): Assertion checker does not yet implement this type. diff --git a/test/libsolidity/smtCheckerTests/warn_on_typecast.sol b/test/libsolidity/smtCheckerTests/warn_on_typecast.sol deleted file mode 100644 index be785414..00000000 --- a/test/libsolidity/smtCheckerTests/warn_on_typecast.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f() public pure returns (uint) { - return uint8(1); - } -} -// ---- -// Warning: (106-114): Assertion checker does not yet implement this expression. diff --git a/test/libsolidity/smtCheckerTests/ways_to_merge_variables_1.sol b/test/libsolidity/smtCheckerTests/ways_to_merge_variables_1.sol deleted file mode 100644 index 16d6fdfe..00000000 --- a/test/libsolidity/smtCheckerTests/ways_to_merge_variables_1.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - uint a = 3; - if (x > 10) { - a++; - } - assert(a == 3); - } -} -// ---- -// Warning: (159-173): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/ways_to_merge_variables_2.sol b/test/libsolidity/smtCheckerTests/ways_to_merge_variables_2.sol deleted file mode 100644 index e25ab20f..00000000 --- a/test/libsolidity/smtCheckerTests/ways_to_merge_variables_2.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - uint a = 3; - if (x > 10) { - ++a; - } - assert(a == 3); - } -} -// ---- -// Warning: (159-173): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/ways_to_merge_variables_3.sol b/test/libsolidity/smtCheckerTests/ways_to_merge_variables_3.sol deleted file mode 100644 index 03ae7216..00000000 --- a/test/libsolidity/smtCheckerTests/ways_to_merge_variables_3.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma experimental SMTChecker; -contract C { - function f(uint x) public pure { - uint a = 3; - if (x > 10) { - a = 5; - } - assert(a == 3); - } -} -// ---- -// Warning: (161-175): Assertion violation happens here diff --git a/test/libsolidity/smtCheckerTests/while_loop_simple_1.sol b/test/libsolidity/smtCheckerTests/while_loop_simple_1.sol deleted file mode 100644 index 074be86f..00000000 --- a/test/libsolidity/smtCheckerTests/while_loop_simple_1.sol +++ /dev/null @@ -1,13 +0,0 @@ -pragma experimental SMTChecker; -// Check that variables are cleared -contract C { - function f(uint x) public pure { - x = 2; - while (x > 1) { - x = 2; - } - assert(x == 2); - } -} -// ---- -// Warning: (194-208): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/while_loop_simple_2.sol b/test/libsolidity/smtCheckerTests/while_loop_simple_2.sol deleted file mode 100644 index 92a3f0fe..00000000 --- a/test/libsolidity/smtCheckerTests/while_loop_simple_2.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma experimental SMTChecker; -// Check that condition is assumed. -contract C { - function f(uint x) public pure { - while (x == 2) { - assert(x == 2); - } - } -} diff --git a/test/libsolidity/smtCheckerTests/while_loop_simple_3.sol b/test/libsolidity/smtCheckerTests/while_loop_simple_3.sol deleted file mode 100644 index a37df888..00000000 --- a/test/libsolidity/smtCheckerTests/while_loop_simple_3.sol +++ /dev/null @@ -1,11 +0,0 @@ -pragma experimental SMTChecker; -// Check that condition is not assumed after the body anymore -contract C { - function f(uint x) public pure { - while (x == 2) { - } - assert(x == 2); - } -} -// ---- -// Warning: (187-201): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/while_loop_simple_4.sol b/test/libsolidity/smtCheckerTests/while_loop_simple_4.sol deleted file mode 100644 index f71da865..00000000 --- a/test/libsolidity/smtCheckerTests/while_loop_simple_4.sol +++ /dev/null @@ -1,11 +0,0 @@ -pragma experimental SMTChecker; -// Check that negation of condition is not assumed after the body anymore -contract C { - function f(uint x) public pure { - while (x == 2) { - } - assert(x != 2); - } -} -// ---- -// Warning: (199-213): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). diff --git a/test/libsolidity/smtCheckerTests/while_loop_simple_5.sol b/test/libsolidity/smtCheckerTests/while_loop_simple_5.sol deleted file mode 100644 index 41559c99..00000000 --- a/test/libsolidity/smtCheckerTests/while_loop_simple_5.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma experimental SMTChecker; -// Check that side-effects of condition are taken into account -contract C { - function f(uint x, uint y) public pure { - x = 7; - while ((x = y) > 0) { - } - assert(x == 7); - } -} -// ---- -// Warning: (216-230): Assertion violation happens here\nNote that some information is erased after the execution of loops.\nYou can re-introduce information using require(). -- cgit