mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[SMTChecker] Support unary inc/dec for array/mapping access
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user