mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Fix for arrays containing mappings.
This commit is contained in:
parent
7639bfe7e5
commit
e6c778e740
@ -3070,6 +3070,43 @@ BOOST_AUTO_TEST_CASE(array_copy_nested_array)
|
|||||||
)) == encodeArgs(10));
|
)) == encodeArgs(10));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(array_copy_including_mapping)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract c {
|
||||||
|
mapping(uint=>uint)[90][] large;
|
||||||
|
mapping(uint=>uint)[3][] small;
|
||||||
|
function test() returns (uint r) {
|
||||||
|
large.length = small.length = 7;
|
||||||
|
large[3][2][0] = 2;
|
||||||
|
large[1] = large[3];
|
||||||
|
small[3][2][0] = 2;
|
||||||
|
small[1] = small[2];
|
||||||
|
r = ((
|
||||||
|
small[3][2][0] * 0x100 |
|
||||||
|
small[1][2][0]) * 0x100 |
|
||||||
|
large[3][2][0]) * 0x100 |
|
||||||
|
large[1][2][0];
|
||||||
|
delete small;
|
||||||
|
delete large;
|
||||||
|
}
|
||||||
|
function clear() returns (uint r) {
|
||||||
|
large.length = small.length = 7;
|
||||||
|
small[3][2][0] = 0;
|
||||||
|
large[3][2][0] = 0;
|
||||||
|
small.length = large.length = 0;
|
||||||
|
return 7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK(callContractFunction("test()") == encodeArgs(0x02000200));
|
||||||
|
// storage is not empty because we cannot delete the mappings
|
||||||
|
BOOST_CHECK(!m_state.storage(m_contractAddress).empty());
|
||||||
|
BOOST_CHECK(callContractFunction("clear()") == encodeArgs(7));
|
||||||
|
BOOST_CHECK(m_state.storage(m_contractAddress).empty());
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(pass_dynamic_arguments_to_the_base)
|
BOOST_AUTO_TEST_CASE(pass_dynamic_arguments_to_the_base)
|
||||||
{
|
{
|
||||||
char const* sourceCode = R"(
|
char const* sourceCode = R"(
|
||||||
|
Loading…
Reference in New Issue
Block a user