aboutsummaryrefslogtreecommitdiffstats
path: root/SolidityEndToEndTest.cpp
diff options
context:
space:
mode:
authorsubtly <subtly@users.noreply.github.com>2015-04-11 00:14:57 +0800
committersubtly <subtly@users.noreply.github.com>2015-04-11 00:14:57 +0800
commit9965121d631dba5209c45bfddc7a4420f919467c (patch)
treef9a4acdff9b3850f8d31d8f28e486e832715b76f /SolidityEndToEndTest.cpp
parentf08eb06c7ac0a4f126777599c0826b6e78f60ab4 (diff)
parentc111dbff3f4d4d5e6d064b38bcd645f2d763ccab (diff)
downloaddexon-solidity-9965121d631dba5209c45bfddc7a4420f919467c.tar
dexon-solidity-9965121d631dba5209c45bfddc7a4420f919467c.tar.gz
dexon-solidity-9965121d631dba5209c45bfddc7a4420f919467c.tar.bz2
dexon-solidity-9965121d631dba5209c45bfddc7a4420f919467c.tar.lz
dexon-solidity-9965121d631dba5209c45bfddc7a4420f919467c.tar.xz
dexon-solidity-9965121d631dba5209c45bfddc7a4420f919467c.tar.zst
dexon-solidity-9965121d631dba5209c45bfddc7a4420f919467c.zip
Merge branch 'p2p' into whisper
Diffstat (limited to 'SolidityEndToEndTest.cpp')
-rw-r--r--SolidityEndToEndTest.cpp58
1 files changed, 54 insertions, 4 deletions
diff --git a/SolidityEndToEndTest.cpp b/SolidityEndToEndTest.cpp
index b169263d..0d7a933b 100644
--- a/SolidityEndToEndTest.cpp
+++ b/SolidityEndToEndTest.cpp
@@ -966,6 +966,60 @@ BOOST_AUTO_TEST_CASE(simple_accessor)
BOOST_CHECK(callContractFunction("data()") == encodeArgs(8));
}
+BOOST_AUTO_TEST_CASE(array_accessor)
+{
+ char const* sourceCode = R"(
+ contract test {
+ uint[8] public data;
+ uint[] public dynamicData;
+ uint24[] public smallTypeData;
+ struct st { uint a; uint[] finalArray; }
+ mapping(uint256 => mapping(uint256 => st[5])) public multiple_map;
+
+ function test() {
+ data[0] = 8;
+ dynamicData.length = 3;
+ dynamicData[2] = 8;
+ smallTypeData.length = 128;
+ smallTypeData[1] = 22;
+ smallTypeData[127] = 2;
+ multiple_map[2][1][2].a = 3;
+ multiple_map[2][1][2].finalArray.length = 4;
+ multiple_map[2][1][2].finalArray[3] = 5;
+ }
+ }
+ )";
+ compileAndRun(sourceCode);
+ BOOST_CHECK(callContractFunction("data(uint256)", 0) == encodeArgs(8));
+ BOOST_CHECK(callContractFunction("data(uint256)", 8) == encodeArgs());
+ BOOST_CHECK(callContractFunction("dynamicData(uint256)", 2) == encodeArgs(8));
+ BOOST_CHECK(callContractFunction("dynamicData(uint256)", 8) == encodeArgs());
+ BOOST_CHECK(callContractFunction("smallTypeData(uint256)", 1) == encodeArgs(22));
+ BOOST_CHECK(callContractFunction("smallTypeData(uint256)", 127) == encodeArgs(2));
+ BOOST_CHECK(callContractFunction("smallTypeData(uint256)", 128) == encodeArgs());
+ BOOST_CHECK(callContractFunction("multiple_map(uint256,uint256,uint256)", 2, 1, 2) == encodeArgs(3));
+}
+
+BOOST_AUTO_TEST_CASE(accessors_mapping_for_array)
+{
+ char const* sourceCode = R"(
+ contract test {
+ mapping(uint => uint[8]) public data;
+ mapping(uint => uint[]) public dynamicData;
+ function test() {
+ data[2][2] = 8;
+ dynamicData[2].length = 3;
+ dynamicData[2][2] = 8;
+ }
+ }
+ )";
+ compileAndRun(sourceCode);
+ BOOST_CHECK(callContractFunction("data(uint256,uint256)", 2, 2) == encodeArgs(8));
+ BOOST_CHECK(callContractFunction("data(uint256, 256)", 2, 8) == encodeArgs());
+ BOOST_CHECK(callContractFunction("dynamicData(uint256,uint256)", 2, 2) == encodeArgs(8));
+ BOOST_CHECK(callContractFunction("dynamicData(uint256,uint256)", 2, 8) == encodeArgs());
+}
+
BOOST_AUTO_TEST_CASE(multiple_elementary_accessors)
{
char const* sourceCode = "contract test {\n"
@@ -1414,8 +1468,6 @@ BOOST_AUTO_TEST_CASE(sha3)
testSolidityAgainstCpp("a(bytes32)", f, u256(-1));
}
-#ifdef PRECOMPILED_CONTRACTS_GAS_FIXED_IN_SOLIDITY
-
BOOST_AUTO_TEST_CASE(sha256)
{
char const* sourceCode = "contract test {\n"
@@ -1470,8 +1522,6 @@ BOOST_AUTO_TEST_CASE(ecrecover)
BOOST_CHECK(callContractFunction("a(bytes32,uint8,bytes32,bytes32)", h, v, r, s) == encodeArgs(addr));
}
-#endif
-
BOOST_AUTO_TEST_CASE(inter_contract_calls)
{
char const* sourceCode = R"(