aboutsummaryrefslogtreecommitdiffstats
path: root/SolidityEndToEndTest.cpp
diff options
context:
space:
mode:
authorCJentzsch <jentzsch.software@gmail.com>2015-04-17 15:03:10 +0800
committerCJentzsch <jentzsch.software@gmail.com>2015-04-17 15:03:10 +0800
commitaadffe35540d446a5723768abbe41ef841a98de6 (patch)
tree24e50774fe43dae51a95121909aa4bb5dc3b97fd /SolidityEndToEndTest.cpp
parent3d199bf4d50206077c0d84122ff0ef70fc174d10 (diff)
parent0f9b0f3bc4fbebb2ab956f0178ec82442065b1bc (diff)
downloaddexon-solidity-aadffe35540d446a5723768abbe41ef841a98de6.tar
dexon-solidity-aadffe35540d446a5723768abbe41ef841a98de6.tar.gz
dexon-solidity-aadffe35540d446a5723768abbe41ef841a98de6.tar.bz2
dexon-solidity-aadffe35540d446a5723768abbe41ef841a98de6.tar.lz
dexon-solidity-aadffe35540d446a5723768abbe41ef841a98de6.tar.xz
dexon-solidity-aadffe35540d446a5723768abbe41ef841a98de6.tar.zst
dexon-solidity-aadffe35540d446a5723768abbe41ef841a98de6.zip
Merge remote-tracking branch 'upstream/develop' into addTests
Conflicts: test/bcUncleHeaderValiditiyFiller.json
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"(