[SMTChecker] Support unary inc/dec for array/mapping access

This commit is contained in:
Leonardo Alt
2019-04-02 16:53:19 +02:00
parent 7c880a26c0
commit aa9b9aa87e
9 changed files with 127 additions and 19 deletions
@@ -0,0 +1,17 @@
pragma experimental SMTChecker;
contract C
{
function f() public pure {
uint x = 2;
uint a = ++x;
assert(x == 3);
assert(a == 3);
uint b = x++;
assert(x == 4);
// Should fail.
assert(b < 3);
}
}
// ----
// Warning: (194-207): Assertion violation happens here
@@ -0,0 +1,18 @@
pragma experimental SMTChecker;
contract C
{
uint[] array;
function f(uint x) public {
array[x] = 2;
uint a = ++array[x];
assert(array[x] == 3);
assert(a == 3);
uint b = array[x]++;
assert(array[x] == 4);
// Should fail.
assert(b < 3);
}
}
// ----
// Warning: (240-253): Assertion violation happens here
@@ -0,0 +1,18 @@
pragma experimental SMTChecker;
contract C
{
mapping (uint => uint) map;
function f(uint x) public {
map[x] = 2;
uint a = ++map[x];
assert(map[x] == 3);
assert(a == 3);
uint b = map[x]++;
assert(map[x] == 4);
// Should fail.
assert(b < 3);
}
}
// ----
// Warning: (244-257): Assertion violation happens here
@@ -0,0 +1,17 @@
pragma experimental SMTChecker;
contract C
{
function f() public pure {
uint x = 5;
uint a = --x;
assert(x == 4);
assert(a == 4);
uint b = x--;
assert(x == 3);
// Should fail.
assert(b > 4);
}
}
// ----
// Warning: (194-207): Assertion violation happens here
@@ -0,0 +1,18 @@
pragma experimental SMTChecker;
contract C
{
uint[] array;
function f(uint x) public {
array[x] = 5;
uint a = --array[x];
assert(array[x] == 4);
assert(a == 4);
uint b = array[x]--;
assert(array[x] == 3);
// Should fail.
assert(b > 4);
}
}
// ----
// Warning: (240-253): Assertion violation happens here
@@ -0,0 +1,18 @@
pragma experimental SMTChecker;
contract C
{
mapping (uint => uint) map;
function f(uint x) public {
map[x] = 5;
uint a = --map[x];
assert(map[x] == 4);
assert(a == 4);
uint b = map[x]--;
assert(map[x] == 3);
// Should fail.
assert(b > 4);
}
}
// ----
// Warning: (244-257): Assertion violation happens here