|
|
@ -4493,7 +4493,7 @@ BOOST_AUTO_TEST_CASE(bytes_in_constructors_packer) |
|
|
|
} |
|
|
|
} |
|
|
|
contract Main is Base { |
|
|
|
function Main(bytes s, uint x) Base(x, s){}//f(s)) {}
|
|
|
|
function Main(bytes s, uint x) Base(x, f(s)) {} |
|
|
|
function f(bytes s) returns (bytes) { |
|
|
|
return s; |
|
|
|
} |
|
|
@ -4517,6 +4517,45 @@ BOOST_AUTO_TEST_CASE(bytes_in_constructors_packer) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(arrays_in_constructors) |
|
|
|
{ |
|
|
|
char const* sourceCode = R"( |
|
|
|
contract Base { |
|
|
|
uint public m_x; |
|
|
|
address[] m_s; |
|
|
|
function Base(uint x, address[] s) { |
|
|
|
m_x = x; |
|
|
|
m_s = s; |
|
|
|
} |
|
|
|
function part(uint i) returns (address) { |
|
|
|
return m_s[i]; |
|
|
|
} |
|
|
|
} |
|
|
|
contract Main is Base { |
|
|
|
function Main(address[] s, uint x) Base(x, f(s)) {} |
|
|
|
function f(address[] s) returns (address[]) { |
|
|
|
return s; |
|
|
|
} |
|
|
|
} |
|
|
|
contract Creator { |
|
|
|
function f(uint x, address[] s) returns (uint r, address ch) { |
|
|
|
var c = new Main(s, x); |
|
|
|
r = c.m_x(); |
|
|
|
ch = c.part(x); |
|
|
|
} |
|
|
|
} |
|
|
|
)"; |
|
|
|
compileAndRun(sourceCode, 0, "Creator"); |
|
|
|
vector<u256> s1{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; |
|
|
|
bytes dyn1 = encodeArgs(u256(s1.size()), s1); |
|
|
|
u256 x = 7; |
|
|
|
bytes args1 = encodeArgs(x, u256(0x40)) + dyn1; |
|
|
|
BOOST_REQUIRE( |
|
|
|
callContractFunction("f(uint256,address[])", asString(args1)) == |
|
|
|
encodeArgs(x, s1[unsigned(x)]) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(arrays_from_and_to_storage) |
|
|
|
{ |
|
|
|
char const* sourceCode = R"( |
|
|
@ -4691,6 +4730,35 @@ BOOST_AUTO_TEST_CASE(memory_types_initialisation) |
|
|
|
BOOST_CHECK(callContractFunction("nestedStat()") == encodeArgs(vector<u256>(3 * 7))); |
|
|
|
} |
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(memory_arrays_delete) |
|
|
|
{ |
|
|
|
char const* sourceCode = R"( |
|
|
|
contract Test { |
|
|
|
function del() returns (uint24[3][4]) { |
|
|
|
uint24[3][4] memory x; |
|
|
|
for (uint24 i = 0; i < x.length; i ++) |
|
|
|
for (uint24 j = 0; j < x[i].length; j ++) |
|
|
|
x[i][j] = i * 0x10 + j; |
|
|
|
delete x[1]; |
|
|
|
delete x[3][2]; |
|
|
|
return x; |
|
|
|
} |
|
|
|
} |
|
|
|
)"; |
|
|
|
compileAndRun(sourceCode, 0, "Test"); |
|
|
|
|
|
|
|
vector<u256> data(3 * 4); |
|
|
|
for (unsigned i = 0; i < 4; i++) |
|
|
|
for (unsigned j = 0; j < 3; j++) |
|
|
|
{ |
|
|
|
u256 v = 0; |
|
|
|
if (!(i == 1 || (i == 3 && j == 2))) |
|
|
|
v = i * 0x10 + j; |
|
|
|
data[i * 3 + j] = v; |
|
|
|
} |
|
|
|
BOOST_CHECK(callContractFunction("del()") == encodeArgs(data)); |
|
|
|
} |
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(memory_arrays_index_access_write) |
|
|
|
{ |
|
|
|
char const* sourceCode = R"( |
|
|
|