diff --git a/test/libsolidity/semanticTests/smoke_test_alignment.sol b/test/libsolidity/semanticTests/smoke/alignment.sol similarity index 99% rename from test/libsolidity/semanticTests/smoke_test_alignment.sol rename to test/libsolidity/semanticTests/smoke/alignment.sol index b5e23c022..621581468 100644 --- a/test/libsolidity/semanticTests/smoke_test_alignment.sol +++ b/test/libsolidity/semanticTests/smoke/alignment.sol @@ -26,3 +26,4 @@ contract D { // stateBytes() -> left(0x4200ef) // internalStateDecimal() -> 0x20 // update(bool,uint256,bytes32): false, -23, left(0x2300ef) -> false, -23, left(0x2300ef) + diff --git a/test/libsolidity/semanticTests/smoke/arrays.sol b/test/libsolidity/semanticTests/smoke/arrays.sol new file mode 100644 index 000000000..34ec984bb --- /dev/null +++ b/test/libsolidity/semanticTests/smoke/arrays.sol @@ -0,0 +1,44 @@ +pragma experimental ABIEncoderV2; + +contract C { + struct T { + uint a; + uint b; + string s; + } + bool[2][] flags; + function r() public returns (bool[3] memory) { + return [true, false, true]; + } + function s() public returns (uint[2] memory, uint) { + return ([uint(123), 456], 789); + } + function u() public returns (T[2] memory) { + return [T(23, 42, "any"), T(555, 666, "any")]; + } + function v() public returns (bool[2][] memory) { + return flags; + } + function w1() public returns (string[1] memory) { + return ["any"]; + } + function w2() public returns (string[2] memory) { + return ["any", "any"]; + } + function w3() public returns (string[3] memory) { + return ["any", "any", "any"]; + } + function x() public returns (string[2] memory, string[3] memory) { + return (["any", "any"], ["any", "any", "any"]); + } +} +// ---- +// r() -> true, false, true +// s() -> 123, 456, 789 +// u() -> 0x20, 0x40, 0xE0, 23, 42, 0x60, 3, "any", 555, 666, 0x60, 3, "any" +// v() -> 0x20, 0 +// w1() -> 0x20, 0x20, 3, "any" +// w2() -> 0x20, 0x40, 0x80, 3, "any", 3, "any" +// w3() -> 0x20, 0x60, 0xa0, 0xe0, 3, "any", 3, "any", 3, "any" +// x() -> 0x40, 0x0100, 0x40, 0x80, 3, "any", 3, "any", 0x60, 0xa0, 0xe0, 3, "any", 3, "any", 3, "any" + diff --git a/test/libsolidity/semanticTests/smoke/basic.sol b/test/libsolidity/semanticTests/smoke/basic.sol new file mode 100644 index 000000000..915c3fe69 --- /dev/null +++ b/test/libsolidity/semanticTests/smoke/basic.sol @@ -0,0 +1,37 @@ +pragma experimental ABIEncoderV2; + +contract C { + function e() public payable returns (uint) { + return msg.value; + } + function f(uint a) public pure returns (uint, uint) { + return (a, a); + } + function g() public pure returns (uint, uint) { + return (2, 3); + } + function h(uint x, uint y) public pure returns (uint) { + return x - y; + } + function i(bool b) public pure returns (bool) { + return !b; + } + function j(bytes32 b) public pure returns (bytes32, bytes32) { + return (b, b); + } + function k() public pure returns (uint) { + return msg.data.length; + } + function l(uint a) public pure returns (uint d) { + return a * 7; + } +} +// ---- +// e(), 1 ether -> 1 +// f(uint256): 3 -> 3, 3 +// g() -> 2, 3 +// h(uint256,uint256): 1, -2 -> 3 +// i(bool): true -> false +// j(bytes32): 0x10001 -> 0x10001, 0x10001 +// k(): hex"4200efef" -> 8 +// l(uint256): 99 -> 693 diff --git a/test/libsolidity/semanticTests/smoke/bytes_and_strings.sol b/test/libsolidity/semanticTests/smoke/bytes_and_strings.sol new file mode 100644 index 000000000..db6f35497 --- /dev/null +++ b/test/libsolidity/semanticTests/smoke/bytes_and_strings.sol @@ -0,0 +1,22 @@ +contract C { + function e(bytes memory b) public pure returns (bytes memory) { + return b; + } + function f() public pure returns (string memory, string memory) { + return ("any", "any"); + } + function g() public pure returns (string memory, uint, string memory) { + return ("any", 42, "any"); + } + function h() public pure returns (string memory) { + return "any"; + } +} +// ---- +// e(bytes): 32, 3, hex"AB33BB" -> 32, 3, left(0xAB33BB) +// e(bytes): 32, 32, 0x20 -> 32, 32, 0x20 +// e(bytes): 32, 3, hex"AB33FF" -> 32, 3, hex"ab33ff0000000000000000000000000000000000000000000000000000000000" +// f() -> 0x40, 0x80, 3, "any", 3, "any" +// g() -> 0x60, 0x2a, 0xa0, 3, "any", 3, "any" +// h() -> 0x20, 3, "any" + diff --git a/test/libsolidity/semanticTests/smoke/constructor.sol b/test/libsolidity/semanticTests/smoke/constructor.sol new file mode 100644 index 000000000..9aac2ed7b --- /dev/null +++ b/test/libsolidity/semanticTests/smoke/constructor.sol @@ -0,0 +1,18 @@ +contract C { + uint public state = 0; + constructor(uint _state) public payable { + state = _state; + } + function balance() public payable returns (uint256) { + return address(this).balance; + } + function update(uint _state) public { + state = _state; + } +} +// ---- +// constructor(), 2 ether: 3 -> +// state() -> 3 +// balance() -> 2 +// update(uint256): 4 +// state() -> 4 diff --git a/test/libsolidity/semanticTests/smoke/failure.sol b/test/libsolidity/semanticTests/smoke/failure.sol new file mode 100644 index 000000000..6ea46f693 --- /dev/null +++ b/test/libsolidity/semanticTests/smoke/failure.sol @@ -0,0 +1,10 @@ +contract C { + function e() public { + revert("Transaction failed."); + } +} +// ==== +// EVMVersion: >homestead +// ---- +// _() -> FAILURE +// e() -> FAILURE, hex"08c379a0", 0x20, 19, "Transaction failed." diff --git a/test/libsolidity/semanticTests/smoke_test_multiline.sol b/test/libsolidity/semanticTests/smoke/multiline.sol similarity index 99% rename from test/libsolidity/semanticTests/smoke_test_multiline.sol rename to test/libsolidity/semanticTests/smoke/multiline.sol index 5d02e148e..1663a6de4 100644 --- a/test/libsolidity/semanticTests/smoke_test_multiline.sol +++ b/test/libsolidity/semanticTests/smoke/multiline.sol @@ -11,3 +11,4 @@ contract C { // g() // # g() does not exist # // -> FAILURE + diff --git a/test/libsolidity/semanticTests/smoke_test_multiline_comments.sol b/test/libsolidity/semanticTests/smoke/multiline_comments.sol similarity index 99% rename from test/libsolidity/semanticTests/smoke_test_multiline_comments.sol rename to test/libsolidity/semanticTests/smoke/multiline_comments.sol index 66bdfb915..3e1d59a6d 100644 --- a/test/libsolidity/semanticTests/smoke_test_multiline_comments.sol +++ b/test/libsolidity/semanticTests/smoke/multiline_comments.sol @@ -17,3 +17,4 @@ contract C { // 1 // -> 5 // # Should return sum of all parameters. # + diff --git a/test/libsolidity/semanticTests/smoke/structs.sol b/test/libsolidity/semanticTests/smoke/structs.sol new file mode 100644 index 000000000..979dbdcc0 --- /dev/null +++ b/test/libsolidity/semanticTests/smoke/structs.sol @@ -0,0 +1,22 @@ +pragma experimental ABIEncoderV2; + +contract C { + struct S { + uint a; + uint b; + } + struct T { + uint a; + uint b; + string s; + } + function s() public returns (S memory) { + return S(23, 42); + } + function t() public returns (T memory) { + return T(23, 42, "any"); + } +} +// ---- +// s() -> 23, 42 +// t() -> 0x20, 23, 42, 0x60, 3, "any" diff --git a/test/libsolidity/semanticTests/smoke_test.sol b/test/libsolidity/semanticTests/smoke_test.sol deleted file mode 100644 index e4b19bc87..000000000 --- a/test/libsolidity/semanticTests/smoke_test.sol +++ /dev/null @@ -1,127 +0,0 @@ -pragma experimental ABIEncoderV2; - -contract C { - struct S { - uint a; - uint b; - } - struct T { - uint a; - uint b; - string s; - } - uint public state = 0; - bool[2][] flags; - constructor(uint _state) public payable { - state = _state; - } - function balance() payable public returns (uint256) { - return address(this).balance; - } - function d(uint a) public { - state = a; - } - function e() public { - revert("Transaction failed."); - } - function f() payable public returns (uint) { - return 2; - } - function f(uint a) public returns (uint, uint) { - return (a, a); - } - function g() public returns (uint, uint) { - return (2, 3); - } - function h(uint x, uint y) public returns (uint) { - return x - y; - } - function j(bool b) public returns (bool) { - return !b; - } - function k(bytes32 b) public returns (bytes32, bytes32) { - return (b, b); - } - function l() public returns (uint256) { - return msg.data.length; - } - function m(bytes memory b) public returns (bytes memory) { - return b; - } - function n() public returns (string memory) { - return "any"; - } - function o() public returns (string memory, string memory) { - return ("any", "any"); - } - function p() public returns (string memory, uint, string memory) { - return ("any", 42, "any"); - } - function q(uint a) public returns (uint d) { - return a * 7; - } - function r() public returns (bool[3] memory) { - return [true, false, true]; - } - function s() public returns (uint[2] memory, uint) { - return ([uint(123), 456], 789); - } - function t1() public returns (S memory) { - return S(23, 42); - } - function t2() public returns (T memory) { - return T(23, 42, "any"); - } - function u() public returns (T[2] memory) { - return [T(23, 42, "any"), T(555, 666, "any")]; - } - function v() public returns (bool[2][] memory) { - return flags; - } - function w1() public returns (string[1] memory) { - return ["any"]; - } - function w2() public returns (string[2] memory) { - return ["any", "any"]; - } - function w3() public returns (string[3] memory) { - return ["any", "any", "any"]; - } - function x() public returns (string[2] memory, string[3] memory) { - return (["any", "any"], ["any", "any", "any"]); - } -} -// ==== -// EVMVersion: >homestead -// ---- -// constructor(), 2 ether: 3 -> -// state() -> 3 -// balance() -> 2 -// _() -> FAILURE -// d(uint256): 4 -// e() -> FAILURE, hex"08c379a0", 0x20, 19, "Transaction failed." -// f() -> 2 -// f(uint256): 3 -> 3, 3 -// f(), 1 ether -> 2 -// g() -> 2, 3 -// g1() -> FAILURE -// h(uint256,uint256): 1, -2 -> 3 -// j(bool): true -> false -// k(bytes32): 0x10001 -> 0x10001, 0x10001 -// l(): hex"4200efef" -> 8 -// m(bytes): 32, 32, 0x20 -> 32, 32, 0x20 -// m(bytes): 32, 3, hex"AB33BB" -> 32, 3, left(0xAB33BB) -// m(bytes): 32, 3, hex"AB33FF" -> 32, 3, hex"ab33ff0000000000000000000000000000000000000000000000000000000000" -// n() -> 0x20, 3, "any" -// o() -> 0x40, 0x80, 3, "any", 3, "any" -// p() -> 0x60, 0x2a, 0xa0, 3, "any", 3, "any" -// q(uint256): 99 -> 693 -// r() -> true, false, true -// s() -> 123, 456, 789 -// t1() -> 23, 42 -// t2() -> 0x20, 23, 42, 0x60, 3, "any" -// v() -> 32, 0 -// w1() -> 0x20, 0x20, 3, "any" -// w2() -> 0x20, 0x40, 0x80, 3, "any", 3, "any" -// w3() -> 0x20, 0x60, 0xa0, 0xe0, 3, "any", 3, "any", 3, "any" -// x() -> 0x40, 0x0100, 0x40, 0x80, 3, "any", 3, "any", 0x60, 0xa0, 0xe0, 3, "any", 3, "any", 3, "any"