aboutsummaryrefslogtreecommitdiffstats
path: root/SolidityEndToEndTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'SolidityEndToEndTest.cpp')
-rw-r--r--SolidityEndToEndTest.cpp154
1 files changed, 64 insertions, 90 deletions
diff --git a/SolidityEndToEndTest.cpp b/SolidityEndToEndTest.cpp
index 8218a252..c18b3c56 100644
--- a/SolidityEndToEndTest.cpp
+++ b/SolidityEndToEndTest.cpp
@@ -304,7 +304,6 @@ BOOST_AUTO_TEST_CASE(for_loop_simple_init_expr)
BOOST_AUTO_TEST_CASE(calling_other_functions)
{
- // note that the index of a function is its index in the sorted sequence of functions
char const* sourceCode = "contract collatz {\n"
" function run(uint x) returns(uint y) {\n"
" while ((y = x) > 1) {\n"
@@ -1095,26 +1094,6 @@ BOOST_AUTO_TEST_CASE(now)
BOOST_CHECK(callContractFunction("someInfo()") == encodeArgs(true));
}
-BOOST_AUTO_TEST_CASE(function_types)
-{
- char const* sourceCode = "contract test {\n"
- " function a(bool selector) returns (uint b) {\n"
- " var f = fun1;\n"
- " if (selector) f = fun2;\n"
- " return f(9);\n"
- " }\n"
- " function fun1(uint x) returns (uint b) {\n"
- " return 11;\n"
- " }\n"
- " function fun2(uint x) returns (uint b) {\n"
- " return 12;\n"
- " }\n"
- "}\n";
- compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("a(bool)", false) == encodeArgs(11));
- BOOST_CHECK(callContractFunction("a(bool)", true) == encodeArgs(12));
-}
-
BOOST_AUTO_TEST_CASE(type_conversions_cleanup)
{
// 22-byte integer converted to a contract (i.e. address, 20 bytes), converted to a 32 byte
@@ -3571,6 +3550,61 @@ BOOST_AUTO_TEST_CASE(packed_storage_structs_bytes)
BOOST_CHECK(callContractFunction("test()") == encodeArgs(true));
}
+BOOST_AUTO_TEST_CASE(packed_storage_structs_delete)
+{
+ char const* sourceCode = R"(
+ contract C {
+ struct str { uint8 a; uint16 b; uint8 c; }
+ uint8 x;
+ uint16 y;
+ str data;
+ function test() returns (uint) {
+ x = 1;
+ y = 2;
+ data.a = 2;
+ data.b = 0xabcd;
+ data.c = 0xfa;
+ if (x != 1 || y != 2 || data.a != 2 || data.b != 0xabcd || data.c != 0xfa)
+ return 2;
+ delete y;
+ delete data.b;
+ if (x != 1 || y != 0 || data.a != 2 || data.b != 0 || data.c != 0xfa)
+ return 3;
+ delete x;
+ delete data;
+ return 1;
+ }
+ }
+ )";
+ compileAndRun(sourceCode);
+ BOOST_CHECK(callContractFunction("test()") == encodeArgs(1));
+ BOOST_CHECK(m_state.storage(m_contractAddress).empty());
+}
+
+BOOST_AUTO_TEST_CASE(packed_storage_structs_with_bytes0)
+{
+ char const* sourceCode = R"(
+ contract C {
+ struct str { uint8 a; bytes0 b; uint8 c; }
+ uint8 a;
+ bytes0 x;
+ uint8 b;
+ str data;
+ function test() returns (bool) {
+ a = 2;
+ b = 3;
+ data.a = 4;
+ data.c = 5;
+ delete x;
+ delete data.b;
+ return a == 2 && b == 3 && data.a == 4 && data.c == 5;
+ }
+ }
+ )";
+ compileAndRun(sourceCode);
+ BOOST_CHECK(callContractFunction("test()") == encodeArgs(true));
+}
+
BOOST_AUTO_TEST_CASE(overloaded_function_call_resolve_to_first)
{
char const* sourceCode = R"(
@@ -3616,26 +3650,6 @@ BOOST_AUTO_TEST_CASE(overloaded_function_call_with_if_else)
BOOST_CHECK(callContractFunction("g(bool)", false) == encodeArgs(10));
}
-BOOST_AUTO_TEST_CASE(overloaded_function_with_var)
-{
- char const* sourceCode = R"(
- contract test {
- function f(uint k) returns(uint d) { return k; }
- function f(uint a, uint b) returns(uint d) { return a + b; }
- function g(bool flag) returns(uint d) {
- var x = f;
- if (flag)
- return x(3);
- else
- return x(3, 7);
- }
- }
- )";
- compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("g(bool)", true) == encodeArgs(3));
- BOOST_CHECK(callContractFunction("g(bool)", false) == encodeArgs(10));
-}
-
BOOST_AUTO_TEST_CASE(derived_overload_base_function_direct)
{
char const* sourceCode = R"(
@@ -3664,59 +3678,19 @@ BOOST_AUTO_TEST_CASE(derived_overload_base_function_indirect)
BOOST_CHECK(callContractFunction("h()") == encodeArgs(2));
}
-BOOST_AUTO_TEST_CASE(packed_storage_structs_delete)
+BOOST_AUTO_TEST_CASE(super_overload)
{
char const* sourceCode = R"(
- contract C {
- struct str { uint8 a; uint16 b; uint8 c; }
- uint8 x;
- uint16 y;
- str data;
- function test() returns (uint) {
- x = 1;
- y = 2;
- data.a = 2;
- data.b = 0xabcd;
- data.c = 0xfa;
- if (x != 1 || y != 2 || data.a != 2 || data.b != 0xabcd || data.c != 0xfa)
- return 2;
- delete y;
- delete data.b;
- if (x != 1 || y != 0 || data.a != 2 || data.b != 0 || data.c != 0xfa)
- return 3;
- delete x;
- delete data;
- return 1;
- }
- }
- )";
- compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(1));
- BOOST_CHECK(m_state.storage(m_contractAddress).empty());
-}
-
-BOOST_AUTO_TEST_CASE(packed_storage_structs_with_bytes0)
-{
- char const* sourceCode = R"(
- contract C {
- struct str { uint8 a; bytes0 b; uint8 c; }
- uint8 a;
- bytes0 x;
- uint8 b;
- str data;
- function test() returns (bool) {
- a = 2;
- b = 3;
- data.a = 4;
- data.c = 5;
- delete x;
- delete data.b;
- return a == 2 && b == 3 && data.a == 4 && data.c == 5;
- }
+ contract A { function f(uint a) returns(uint) { return 2 * a; } }
+ contract B { function f(bool b) returns(uint) { return 10; } }
+ contract C is A, B {
+ function g() returns(uint) { return super.f(true); }
+ function h() returns(uint) { return super.f(1); }
}
)";
- compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(true));
+ compileAndRun(sourceCode, 0, "C");
+ BOOST_CHECK(callContractFunction("g()") == encodeArgs(10));
+ BOOST_CHECK(callContractFunction("h()") == encodeArgs(2));
}
BOOST_AUTO_TEST_SUITE_END()