aboutsummaryrefslogtreecommitdiffstats
path: root/test/libsolidity
diff options
context:
space:
mode:
Diffstat (limited to 'test/libsolidity')
-rw-r--r--test/libsolidity/ABIEncoderTests.cpp81
-rw-r--r--test/libsolidity/AnalysisFramework.cpp45
-rw-r--r--test/libsolidity/AnalysisFramework.h11
-rw-r--r--test/libsolidity/Assembly.cpp2
-rw-r--r--test/libsolidity/GasMeter.cpp12
-rw-r--r--test/libsolidity/Metadata.cpp8
-rw-r--r--test/libsolidity/SMTChecker.cpp112
-rw-r--r--test/libsolidity/SolidityABIJSON.cpp2
-rw-r--r--test/libsolidity/SolidityEndToEndTest.cpp2087
-rw-r--r--test/libsolidity/SolidityExecutionFramework.h2
-rw-r--r--test/libsolidity/SolidityExpressionCompiler.cpp2
-rw-r--r--test/libsolidity/SolidityNameAndTypeResolution.cpp362
-rw-r--r--test/libsolidity/SolidityNatspecJSON.cpp2
-rw-r--r--test/libsolidity/SolidityParser.cpp106
-rw-r--r--test/libsolidity/StandardCompiler.cpp177
-rw-r--r--test/libsolidity/ViewPureChecker.cpp7
16 files changed, 2117 insertions, 901 deletions
diff --git a/test/libsolidity/ABIEncoderTests.cpp b/test/libsolidity/ABIEncoderTests.cpp
index 05158601..af51edcc 100644
--- a/test/libsolidity/ABIEncoderTests.cpp
+++ b/test/libsolidity/ABIEncoderTests.cpp
@@ -462,6 +462,87 @@ BOOST_AUTO_TEST_CASE(structs)
)
}
+BOOST_AUTO_TEST_CASE(empty_struct)
+{
+ string sourceCode = R"(
+ contract C {
+ struct S { }
+ S s;
+ event e(uint16, S, uint16);
+ function f() returns (uint, S, uint) {
+ e(7, s, 8);
+ return (7, s, 8);
+ }
+ }
+ )";
+
+ NEW_ENCODER(
+ compileAndRun(sourceCode, 0, "C");
+ bytes encoded = encodeArgs(7, 8);
+ BOOST_CHECK(callContractFunction("f()") == encoded);
+ REQUIRE_LOG_DATA(encoded);
+ )
+}
+
+BOOST_AUTO_TEST_CASE(structs2)
+{
+ string sourceCode = R"(
+ contract C {
+ enum E {A, B, C}
+ struct T { uint x; E e; uint8 y; }
+ struct S { C c; T[] t;}
+ function f() public returns (uint a, S[2] s1, S[] s2, uint b) {
+ a = 7;
+ b = 8;
+ s1[0].c = this;
+ s1[0].t = new T[](1);
+ s1[0].t[0].x = 0x11;
+ s1[0].t[0].e = E.B;
+ s1[0].t[0].y = 0x12;
+ s2 = new S[](2);
+ s2[1].c = C(0x1234);
+ s2[1].t = new T[](3);
+ s2[1].t[1].x = 0x21;
+ s2[1].t[1].e = E.C;
+ s2[1].t[1].y = 0x22;
+ }
+ }
+ )";
+
+ NEW_ENCODER(
+ compileAndRun(sourceCode, 0, "C");
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(
+ 7, 0x80, 0x1e0, 8,
+ // S[2] s1
+ 0x40,
+ 0x100,
+ // S s1[0]
+ u256(u160(m_contractAddress)),
+ 0x40,
+ // T s1[0].t
+ 1, // length
+ // s1[0].t[0]
+ 0x11, 1, 0x12,
+ // S s1[1]
+ 0, 0x40,
+ // T s1[1].t
+ 0,
+ // S[] s2 (0x1e0)
+ 2, // length
+ 0x40, 0xa0,
+ // S s2[0]
+ 0, 0x40, 0,
+ // S s2[1]
+ 0x1234, 0x40,
+ // s2[1].t
+ 3, // length
+ 0, 0, 0,
+ 0x21, 2, 0x22,
+ 0, 0, 0
+ ));
+ )
+}
+
BOOST_AUTO_TEST_SUITE_END()
}
diff --git a/test/libsolidity/AnalysisFramework.cpp b/test/libsolidity/AnalysisFramework.cpp
index 5f5f6411..3bdc40a0 100644
--- a/test/libsolidity/AnalysisFramework.cpp
+++ b/test/libsolidity/AnalysisFramework.cpp
@@ -25,6 +25,8 @@
#include <libsolidity/ast/AST.h>
+#include <libsolidity/parsing/Scanner.h>
+
#include <libdevcore/SHA3.h>
#include <boost/test/unit_test.hpp>
@@ -46,8 +48,7 @@ AnalysisFramework::parseAnalyseAndReturnError(
m_compiler.addSource("", _insertVersionPragma ? "pragma solidity >=0.0;\n" + _source : _source);
if (!m_compiler.parse())
{
- printErrors();
- BOOST_ERROR("Parsing contract failed in analysis test suite.");
+ BOOST_ERROR("Parsing contract failed in analysis test suite:" + formatErrors());
}
m_compiler.analyze();
@@ -56,15 +57,24 @@ AnalysisFramework::parseAnalyseAndReturnError(
for (auto const& currentError: m_compiler.errors())
{
solAssert(currentError->comment(), "");
- if (currentError->comment()->find("This is a pre-release compiler version") == 0)
- continue;
+ if (currentError->type() == Error::Type::Warning)
+ {
+ bool ignoreWarning = false;
+ for (auto const& filter: m_warningsToFilter)
+ if (currentError->comment()->find(filter) == 0)
+ {
+ ignoreWarning = true;
+ break;
+ }
+ if (ignoreWarning)
+ continue;
+ }
if (_reportWarnings || (currentError->type() != Error::Type::Warning))
{
if (firstError && !_allowMultipleErrors)
{
- printErrors();
- BOOST_FAIL("Multiple errors found.");
+ BOOST_FAIL("Multiple errors found: " + formatErrors());
}
if (!firstError)
firstError = currentError;
@@ -78,7 +88,10 @@ SourceUnit const* AnalysisFramework::parseAndAnalyse(string const& _source)
{
auto sourceAndError = parseAnalyseAndReturnError(_source);
BOOST_REQUIRE(!!sourceAndError.first);
- BOOST_REQUIRE(!sourceAndError.second);
+ string message;
+ if (sourceAndError.second)
+ message = "Unexpected error: " + formatError(*sourceAndError.second);
+ BOOST_REQUIRE_MESSAGE(!sourceAndError.second, message);
return sourceAndError.first;
}
@@ -91,17 +104,23 @@ Error AnalysisFramework::expectError(std::string const& _source, bool _warning,
{
auto sourceAndError = parseAnalyseAndReturnError(_source, _warning, true, _allowMultiple);
BOOST_REQUIRE(!!sourceAndError.second);
- BOOST_REQUIRE(!!sourceAndError.first);
+ BOOST_REQUIRE_MESSAGE(!!sourceAndError.first, "Expected error, but no error happened.");
return *sourceAndError.second;
}
-void AnalysisFramework::printErrors()
+string AnalysisFramework::formatErrors()
{
+ string message;
for (auto const& error: m_compiler.errors())
- SourceReferenceFormatter::printExceptionInformation(
- std::cerr,
- *error,
- (error->type() == Error::Type::Warning) ? "Warning" : "Error",
+ message += formatError(*error);
+ return message;
+}
+
+string AnalysisFramework::formatError(Error const& _error)
+{
+ return SourceReferenceFormatter::formatExceptionInformation(
+ _error,
+ (_error.type() == Error::Type::Warning) ? "Warning" : "Error",
[&](std::string const& _sourceName) -> solidity::Scanner const& { return m_compiler.scanner(_sourceName); }
);
}
diff --git a/test/libsolidity/AnalysisFramework.h b/test/libsolidity/AnalysisFramework.h
index 172ae01b..a566ba1d 100644
--- a/test/libsolidity/AnalysisFramework.h
+++ b/test/libsolidity/AnalysisFramework.h
@@ -45,7 +45,7 @@ class AnalysisFramework
{
protected:
- std::pair<SourceUnit const*, std::shared_ptr<Error const>>
+ virtual std::pair<SourceUnit const*, std::shared_ptr<Error const>>
parseAnalyseAndReturnError(
std::string const& _source,
bool _reportWarnings = false,
@@ -57,7 +57,8 @@ protected:
bool success(std::string const& _source);
Error expectError(std::string const& _source, bool _warning = false, bool _allowMultiple = false);
- void printErrors();
+ std::string formatErrors();
+ std::string formatError(Error const& _error);
static ContractDefinition const* retrieveContractByName(SourceUnit const& _source, std::string const& _name);
static FunctionTypePointer retrieveFunctionBySignature(
@@ -65,6 +66,7 @@ protected:
std::string const& _signature
);
+ std::vector<std::string> m_warningsToFilter = {"This is a pre-release compiler version"};
dev::solidity::CompilerStack m_compiler;
};
@@ -104,7 +106,10 @@ CHECK_ERROR_OR_WARNING(text, Warning, substring, true, true)
do \
{ \
auto sourceAndError = parseAnalyseAndReturnError((text), true); \
- BOOST_CHECK(sourceAndError.second == nullptr); \
+ std::string message; \
+ if (sourceAndError.second) \
+ message = formatError(*sourceAndError.second); \
+ BOOST_CHECK_MESSAGE(!sourceAndError.second, message); \
} \
while(0)
diff --git a/test/libsolidity/Assembly.cpp b/test/libsolidity/Assembly.cpp
index 56ac8cf5..358d3c72 100644
--- a/test/libsolidity/Assembly.cpp
+++ b/test/libsolidity/Assembly.cpp
@@ -119,7 +119,7 @@ BOOST_AUTO_TEST_CASE(location_test)
shared_ptr<string const> n = make_shared<string>("");
AssemblyItems items = compileContract(sourceCode);
vector<SourceLocation> locations =
- vector<SourceLocation>(18, SourceLocation(2, 75, n)) +
+ vector<SourceLocation>(24, SourceLocation(2, 75, n)) +
vector<SourceLocation>(32, SourceLocation(20, 72, n)) +
vector<SourceLocation>{SourceLocation(42, 51, n), SourceLocation(65, 67, n)} +
vector<SourceLocation>(2, SourceLocation(58, 67, n)) +
diff --git a/test/libsolidity/GasMeter.cpp b/test/libsolidity/GasMeter.cpp
index df9afaae..c2886f5b 100644
--- a/test/libsolidity/GasMeter.cpp
+++ b/test/libsolidity/GasMeter.cpp
@@ -21,7 +21,6 @@
*/
#include <test/libsolidity/SolidityExecutionFramework.h>
-#include <libevmasm/EVMSchedule.h>
#include <libevmasm/GasMeter.h>
#include <libevmasm/KnownState.h>
#include <libevmasm/PathGasMeter.h>
@@ -50,7 +49,7 @@ public:
m_compiler.reset(false);
m_compiler.addSource("", "pragma solidity >=0.0;\n" + _sourceCode);
m_compiler.setOptimiserSettings(dev::test::Options::get().optimize);
- ETH_TEST_REQUIRE_NO_THROW(m_compiler.compile(), "Compiling contract failed");
+ BOOST_REQUIRE_MESSAGE(m_compiler.compile(), "Compiling contract failed");
AssemblyItems const* items = m_compiler.runtimeAssemblyItems("");
ASTNode const& sourceUnit = m_compiler.ast();
@@ -63,15 +62,13 @@ public:
void testCreationTimeGas(string const& _sourceCode)
{
- EVMSchedule schedule;
-
compileAndRun(_sourceCode);
auto state = make_shared<KnownState>();
PathGasMeter meter(*m_compiler.assemblyItems());
GasMeter::GasConsumption gas = meter.estimateMax(0, state);
u256 bytecodeSize(m_compiler.runtimeObject().bytecode.size());
// costs for deployment
- gas += bytecodeSize * schedule.createDataGas;
+ gas += bytecodeSize * GasCosts::createDataGas;
// costs for transaction
gas += gasForTransaction(m_compiler.object().bytecode, true);
@@ -103,10 +100,9 @@ public:
static GasMeter::GasConsumption gasForTransaction(bytes const& _data, bool _isCreation)
{
- EVMSchedule schedule;
- GasMeter::GasConsumption gas = _isCreation ? schedule.txCreateGas : schedule.txGas;
+ GasMeter::GasConsumption gas = _isCreation ? GasCosts::txCreateGas : GasCosts::txGas;
for (auto i: _data)
- gas += i != 0 ? schedule.txDataNonZeroGas : schedule.txDataZeroGas;
+ gas += i != 0 ? GasCosts::txDataNonZeroGas : GasCosts::txDataZeroGas;
return gas;
}
diff --git a/test/libsolidity/Metadata.cpp b/test/libsolidity/Metadata.cpp
index c46e3160..efe8faff 100644
--- a/test/libsolidity/Metadata.cpp
+++ b/test/libsolidity/Metadata.cpp
@@ -46,7 +46,7 @@ BOOST_AUTO_TEST_CASE(metadata_stamp)
CompilerStack compilerStack;
compilerStack.addSource("", std::string(sourceCode));
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
- ETH_TEST_REQUIRE_NO_THROW(compilerStack.compile(), "Compiling contract failed");
+ BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
bytes const& bytecode = compilerStack.runtimeObject("test").bytecode;
std::string const& metadata = compilerStack.metadata("test");
BOOST_CHECK(dev::test::isValidMetadata(metadata));
@@ -72,7 +72,7 @@ BOOST_AUTO_TEST_CASE(metadata_stamp_experimental)
CompilerStack compilerStack;
compilerStack.addSource("", std::string(sourceCode));
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
- ETH_TEST_REQUIRE_NO_THROW(compilerStack.compile(), "Compiling contract failed");
+ BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
bytes const& bytecode = compilerStack.runtimeObject("test").bytecode;
std::string const& metadata = compilerStack.metadata("test");
BOOST_CHECK(dev::test::isValidMetadata(metadata));
@@ -106,7 +106,7 @@ BOOST_AUTO_TEST_CASE(metadata_relevant_sources)
)";
compilerStack.addSource("B", std::string(sourceCode));
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
- ETH_TEST_REQUIRE_NO_THROW(compilerStack.compile(), "Compiling contract failed");
+ BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
std::string const& serialisedMetadata = compilerStack.metadata("A");
BOOST_CHECK(dev::test::isValidMetadata(serialisedMetadata));
@@ -144,7 +144,7 @@ BOOST_AUTO_TEST_CASE(metadata_relevant_sources_imports)
)";
compilerStack.addSource("C", std::string(sourceCode));
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
- ETH_TEST_REQUIRE_NO_THROW(compilerStack.compile(), "Compiling contract failed");
+ BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
std::string const& serialisedMetadata = compilerStack.metadata("C");
BOOST_CHECK(dev::test::isValidMetadata(serialisedMetadata));
diff --git a/test/libsolidity/SMTChecker.cpp b/test/libsolidity/SMTChecker.cpp
new file mode 100644
index 00000000..8d712a80
--- /dev/null
+++ b/test/libsolidity/SMTChecker.cpp
@@ -0,0 +1,112 @@
+/*
+ This file is part of solidity.
+
+ solidity is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ solidity is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with solidity. If not, see <http://www.gnu.org/licenses/>.
+*/
+/**
+ * Unit tests for the SMT checker.
+ */
+
+#include <test/libsolidity/AnalysisFramework.h>
+
+#include <boost/test/unit_test.hpp>
+
+#include <string>
+
+using namespace std;
+
+namespace dev
+{
+namespace solidity
+{
+namespace test
+{
+
+class SMTCheckerFramework: public AnalysisFramework
+{
+public:
+ SMTCheckerFramework()
+ {
+ m_warningsToFilter.push_back("Experimental features are turned on.");
+ }
+
+protected:
+ virtual std::pair<SourceUnit const*, std::shared_ptr<Error const>>
+ parseAnalyseAndReturnError(
+ std::string const& _source,
+ bool _reportWarnings = false,
+ bool _insertVersionPragma = true,
+ bool _allowMultipleErrors = false
+ )
+ {
+ return AnalysisFramework::parseAnalyseAndReturnError(
+ "pragma experimental SMTChecker;\n" + _source,
+ _reportWarnings,
+ _insertVersionPragma,
+ _allowMultipleErrors
+ );
+ }
+};
+
+BOOST_FIXTURE_TEST_SUITE(SMTChecker, SMTCheckerFramework)
+
+BOOST_AUTO_TEST_CASE(smoke_test)
+{
+ string text = R"(
+ contract C { }
+ )";
+ CHECK_SUCCESS_NO_WARNINGS(text);
+}
+
+BOOST_AUTO_TEST_CASE(simple_overflow)
+{
+ string text = R"(
+ contract C {
+ function f(uint a, uint b) public pure returns (uint) { return a + b; }
+ }
+ )";
+ CHECK_WARNING(text, "Overflow (resulting value larger than");
+}
+
+BOOST_AUTO_TEST_CASE(warn_on_typecast)
+{
+ string text = R"(
+ contract C {
+ function f() public pure returns (uint) {
+ return uint8(1);
+ }
+ }
+ )";
+ CHECK_WARNING(text, "Assertion checker does not yet implement this expression.");
+}
+
+BOOST_AUTO_TEST_CASE(warn_on_struct)
+{
+ string text = R"(
+ contract C {
+ struct A { uint a; uint b; }
+ function f() public pure returns (A) {
+ return A({ a: 1, b: 2 });
+ }
+ }
+ )";
+ /// Multiple warnings, should check for: Assertion checker does not yet implement this expression.
+ CHECK_WARNING_ALLOW_MULTI(text, "");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+}
+}
+}
diff --git a/test/libsolidity/SolidityABIJSON.cpp b/test/libsolidity/SolidityABIJSON.cpp
index e5d9e99c..42f7525f 100644
--- a/test/libsolidity/SolidityABIJSON.cpp
+++ b/test/libsolidity/SolidityABIJSON.cpp
@@ -44,7 +44,7 @@ public:
{
m_compilerStack.reset(false);
m_compilerStack.addSource("", "pragma solidity >=0.0;\n" + _code);
- ETH_TEST_REQUIRE_NO_THROW(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
+ BOOST_REQUIRE_MESSAGE(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
Json::Value generatedInterface = m_compilerStack.contractABI("");
Json::Value expectedInterface;
diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp
index 458b64f4..9a837113 100644
--- a/test/libsolidity/SolidityEndToEndTest.cpp
+++ b/test/libsolidity/SolidityEndToEndTest.cpp
@@ -81,7 +81,7 @@ BOOST_AUTO_TEST_CASE(exp_operator_const)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()", bytes()) == toBigEndian(u256(8)));
+ ABI_CHECK(callContractFunction("f()", bytes()), toBigEndian(u256(8)));
}
BOOST_AUTO_TEST_CASE(exp_operator_const_signed)
@@ -92,7 +92,7 @@ BOOST_AUTO_TEST_CASE(exp_operator_const_signed)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()", bytes()) == toBigEndian(u256(-8)));
+ ABI_CHECK(callContractFunction("f()", bytes()), toBigEndian(u256(-8)));
}
BOOST_AUTO_TEST_CASE(conditional_expression_true_literal)
@@ -105,7 +105,7 @@ BOOST_AUTO_TEST_CASE(conditional_expression_true_literal)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()", bytes()) == toBigEndian(u256(5)));
+ ABI_CHECK(callContractFunction("f()", bytes()), toBigEndian(u256(5)));
}
BOOST_AUTO_TEST_CASE(conditional_expression_false_literal)
@@ -118,7 +118,7 @@ BOOST_AUTO_TEST_CASE(conditional_expression_false_literal)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()", bytes()) == toBigEndian(u256(10)));
+ ABI_CHECK(callContractFunction("f()", bytes()), toBigEndian(u256(10)));
}
BOOST_AUTO_TEST_CASE(conditional_expression_multiple)
@@ -134,10 +134,10 @@ BOOST_AUTO_TEST_CASE(conditional_expression_multiple)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(uint256)", u256(1001)) == toBigEndian(u256(1000)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(500)) == toBigEndian(u256(100)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(80)) == toBigEndian(u256(50)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(40)) == toBigEndian(u256(10)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(1001)), toBigEndian(u256(1000)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(500)), toBigEndian(u256(100)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(80)), toBigEndian(u256(50)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(40)), toBigEndian(u256(10)));
}
BOOST_AUTO_TEST_CASE(conditional_expression_with_return_values)
@@ -149,8 +149,8 @@ BOOST_AUTO_TEST_CASE(conditional_expression_with_return_values)
}
})";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bool,uint256)", true, u256(20)) == encodeArgs(u256(20), u256(0)));
- BOOST_CHECK(callContractFunction("f(bool,uint256)", false, u256(20)) == encodeArgs(u256(0), u256(20)));
+ ABI_CHECK(callContractFunction("f(bool,uint256)", true, u256(20)), encodeArgs(u256(20), u256(0)));
+ ABI_CHECK(callContractFunction("f(bool,uint256)", false, u256(20)), encodeArgs(u256(0), u256(20)));
}
BOOST_AUTO_TEST_CASE(conditional_expression_storage_memory_1)
@@ -182,8 +182,8 @@ BOOST_AUTO_TEST_CASE(conditional_expression_storage_memory_1)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bool)", true) == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("f(bool)", false) == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f(bool)", true), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f(bool)", false), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(conditional_expression_storage_memory_2)
@@ -216,8 +216,8 @@ BOOST_AUTO_TEST_CASE(conditional_expression_storage_memory_2)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bool)", true) == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("f(bool)", false) == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f(bool)", true), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f(bool)", false), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(conditional_expression_different_types)
@@ -232,8 +232,8 @@ BOOST_AUTO_TEST_CASE(conditional_expression_different_types)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bool)", true) == encodeArgs(u256(0xcd)));
- BOOST_CHECK(callContractFunction("f(bool)", false) == encodeArgs(u256(0xabab)));
+ ABI_CHECK(callContractFunction("f(bool)", true), encodeArgs(u256(0xcd)));
+ ABI_CHECK(callContractFunction("f(bool)", false), encodeArgs(u256(0xabab)));
}
/* let's add this back when I figure out the correct type conversion.
@@ -247,8 +247,8 @@ BOOST_AUTO_TEST_CASE(conditional_expression_string_literal)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bool)", true) == encodeArgs(string("true", 4)));
- BOOST_CHECK(callContractFunction("f(bool)", false) == encodeArgs(string("false", 5)));
+ ABI_CHECK(callContractFunction("f(bool)", true), encodeArgs(string("true", 4)));
+ ABI_CHECK(callContractFunction("f(bool)", false), encodeArgs(string("false", 5)));
}
*/
@@ -262,8 +262,8 @@ BOOST_AUTO_TEST_CASE(conditional_expression_tuples)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bool)", true) == encodeArgs(u256(1), u256(2)));
- BOOST_CHECK(callContractFunction("f(bool)", false) == encodeArgs(u256(3), u256(4)));
+ ABI_CHECK(callContractFunction("f(bool)", true), encodeArgs(u256(1), u256(2)));
+ ABI_CHECK(callContractFunction("f(bool)", false), encodeArgs(u256(3), u256(4)));
}
BOOST_AUTO_TEST_CASE(conditional_expression_functions)
@@ -280,8 +280,8 @@ BOOST_AUTO_TEST_CASE(conditional_expression_functions)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bool)", true) == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("f(bool)", false) == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f(bool)", true), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f(bool)", false), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(recursive_calls)
@@ -317,11 +317,11 @@ BOOST_AUTO_TEST_CASE(multiple_functions)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("a()", bytes()) == toBigEndian(u256(0)));
- BOOST_CHECK(callContractFunction("b()", bytes()) == toBigEndian(u256(1)));
- BOOST_CHECK(callContractFunction("c()", bytes()) == toBigEndian(u256(2)));
- BOOST_CHECK(callContractFunction("f()", bytes()) == toBigEndian(u256(3)));
- BOOST_CHECK(callContractFunction("i_am_not_there()", bytes()) == bytes());
+ ABI_CHECK(callContractFunction("a()", bytes()), toBigEndian(u256(0)));
+ ABI_CHECK(callContractFunction("b()", bytes()), toBigEndian(u256(1)));
+ ABI_CHECK(callContractFunction("c()", bytes()), toBigEndian(u256(2)));
+ ABI_CHECK(callContractFunction("f()", bytes()), toBigEndian(u256(3)));
+ ABI_CHECK(callContractFunction("i_am_not_there()", bytes()), bytes());
}
BOOST_AUTO_TEST_CASE(named_args)
@@ -333,7 +333,7 @@ BOOST_AUTO_TEST_CASE(named_args)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("b()", bytes()) == toBigEndian(u256(123)));
+ ABI_CHECK(callContractFunction("b()", bytes()), toBigEndian(u256(123)));
}
BOOST_AUTO_TEST_CASE(disorder_named_args)
@@ -345,7 +345,7 @@ BOOST_AUTO_TEST_CASE(disorder_named_args)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("b()", bytes()) == toBigEndian(u256(123)));
+ ABI_CHECK(callContractFunction("b()", bytes()), toBigEndian(u256(123)));
}
BOOST_AUTO_TEST_CASE(while_loop)
@@ -665,8 +665,10 @@ BOOST_AUTO_TEST_CASE(packing_unpacking_types)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("run(bool,uint32,uint64)", true, fromHex("0f0f0f0f"), fromHex("f0f0f0f0f0f0f0f0"))
- == fromHex("00000000000000000000000000000000000000""01""f0f0f0f0""0f0f0f0f0f0f0f0f"));
+ ABI_CHECK(
+ callContractFunction("run(bool,uint32,uint64)", true, fromHex("0f0f0f0f"), fromHex("f0f0f0f0f0f0f0f0")),
+ fromHex("00000000000000000000000000000000000000""01""f0f0f0f0""0f0f0f0f0f0f0f0f")
+ );
}
BOOST_AUTO_TEST_CASE(packing_signed_types)
@@ -680,8 +682,10 @@ BOOST_AUTO_TEST_CASE(packing_signed_types)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("run()")
- == fromHex("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"));
+ ABI_CHECK(
+ callContractFunction("run()"),
+ fromHex("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa")
+ );
}
BOOST_AUTO_TEST_CASE(multiple_return_values)
@@ -694,7 +698,7 @@ BOOST_AUTO_TEST_CASE(multiple_return_values)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("run(bool,uint256)", true, 0xcd) == encodeArgs(0xcd, true, 0));
+ ABI_CHECK(callContractFunction("run(bool,uint256)", true, 0xcd), encodeArgs(0xcd, true, 0));
}
BOOST_AUTO_TEST_CASE(short_circuiting)
@@ -816,8 +820,8 @@ BOOST_AUTO_TEST_CASE(strings)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("fixedBytes()") == encodeArgs(string("abc\0\xff__", 7)));
- BOOST_CHECK(callContractFunction("pipeThrough(bytes2,bool)", string("\0\x02", 2), true) == encodeArgs(string("\0\x2", 2), true));
+ ABI_CHECK(callContractFunction("fixedBytes()"), encodeArgs(string("abc\0\xff__", 7)));
+ ABI_CHECK(callContractFunction("pipeThrough(bytes2,bool)", string("\0\x02", 2), true), encodeArgs(string("\0\x2", 2), true));
}
BOOST_AUTO_TEST_CASE(inc_dec_operators)
@@ -838,7 +842,7 @@ BOOST_AUTO_TEST_CASE(inc_dec_operators)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(0x53866));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(0x53866));
}
BOOST_AUTO_TEST_CASE(bytes_comparison)
@@ -854,7 +858,7 @@ BOOST_AUTO_TEST_CASE(bytes_comparison)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(state_smoke_test)
@@ -874,14 +878,14 @@ BOOST_AUTO_TEST_CASE(state_smoke_test)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x00)) == encodeArgs(0));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x01)) == encodeArgs(0));
- BOOST_CHECK(callContractFunction("set(uint8,uint256)", byte(0x00), 0x1234) == encodeArgs());
- BOOST_CHECK(callContractFunction("set(uint8,uint256)", byte(0x01), 0x8765) == encodeArgs());
- BOOST_CHECK(callContractFunction("get(uint8)", byte( 0x00)) == encodeArgs(0x1234));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x01)) == encodeArgs(0x8765));
- BOOST_CHECK(callContractFunction("set(uint8,uint256)", byte(0x00), 0x3) == encodeArgs());
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x00)) == encodeArgs(0x3));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x00)), encodeArgs(0));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x01)), encodeArgs(0));
+ ABI_CHECK(callContractFunction("set(uint8,uint256)", byte(0x00), 0x1234), encodeArgs());
+ ABI_CHECK(callContractFunction("set(uint8,uint256)", byte(0x01), 0x8765), encodeArgs());
+ ABI_CHECK(callContractFunction("get(uint8)", byte( 0x00)), encodeArgs(0x1234));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x01)), encodeArgs(0x8765));
+ ABI_CHECK(callContractFunction("set(uint8,uint256)", byte(0x00), 0x3), encodeArgs());
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x00)), encodeArgs(0x3));
}
BOOST_AUTO_TEST_CASE(compound_assign)
@@ -936,21 +940,21 @@ BOOST_AUTO_TEST_CASE(simple_mapping)
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0)) == encodeArgs(byte(0x00)));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x01)) == encodeArgs(byte(0x00)));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0xa7)) == encodeArgs(byte(0x00)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0)), encodeArgs(byte(0x00)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x01)), encodeArgs(byte(0x00)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0xa7)), encodeArgs(byte(0x00)));
callContractFunction("set(uint8,uint8)", byte(0x01), byte(0xa1));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x00)) == encodeArgs(byte(0x00)));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x01)) == encodeArgs(byte(0xa1)));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0xa7)) == encodeArgs(byte(0x00)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x00)), encodeArgs(byte(0x00)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x01)), encodeArgs(byte(0xa1)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0xa7)), encodeArgs(byte(0x00)));
callContractFunction("set(uint8,uint8)", byte(0x00), byte(0xef));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x00)) == encodeArgs(byte(0xef)));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x01)) == encodeArgs(byte(0xa1)));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0xa7)) == encodeArgs(byte(0x00)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x00)), encodeArgs(byte(0xef)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x01)), encodeArgs(byte(0xa1)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0xa7)), encodeArgs(byte(0x00)));
callContractFunction("set(uint8,uint8)", byte(0x01), byte(0x05));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x00)) == encodeArgs(byte(0xef)));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0x01)) == encodeArgs(byte(0x05)));
- BOOST_CHECK(callContractFunction("get(uint8)", byte(0xa7)) == encodeArgs(byte(0x00)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x00)), encodeArgs(byte(0xef)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0x01)), encodeArgs(byte(0x05)));
+ ABI_CHECK(callContractFunction("get(uint8)", byte(0xa7)), encodeArgs(byte(0x00)));
}
BOOST_AUTO_TEST_CASE(mapping_state)
@@ -1126,9 +1130,9 @@ BOOST_AUTO_TEST_CASE(structs)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("check()") == encodeArgs(false));
- BOOST_CHECK(callContractFunction("set()") == bytes());
- BOOST_CHECK(callContractFunction("check()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("check()"), encodeArgs(false));
+ ABI_CHECK(callContractFunction("set()"), bytes());
+ ABI_CHECK(callContractFunction("check()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(struct_reference)
@@ -1156,9 +1160,9 @@ BOOST_AUTO_TEST_CASE(struct_reference)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("check()") == encodeArgs(false));
- BOOST_CHECK(callContractFunction("set()") == bytes());
- BOOST_CHECK(callContractFunction("check()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("check()"), encodeArgs(false));
+ ABI_CHECK(callContractFunction("set()"), bytes());
+ ABI_CHECK(callContractFunction("check()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(deleteStruct)
@@ -1209,14 +1213,14 @@ BOOST_AUTO_TEST_CASE(deleteStruct)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getToDelete()") == encodeArgs(0));
- BOOST_CHECK(callContractFunction("getTopValue()") == encodeArgs(0));
- BOOST_CHECK(callContractFunction("getNestedValue()") == encodeArgs(0));
+ ABI_CHECK(callContractFunction("getToDelete()"), encodeArgs(0));
+ ABI_CHECK(callContractFunction("getTopValue()"), encodeArgs(0));
+ ABI_CHECK(callContractFunction("getNestedValue()"), encodeArgs(0));
// mapping values should be the same
- BOOST_CHECK(callContractFunction("getTopMapping(uint256)", 0) == encodeArgs(1));
- BOOST_CHECK(callContractFunction("getTopMapping(uint256)", 1) == encodeArgs(2));
- BOOST_CHECK(callContractFunction("getNestedMapping(uint256)", 0) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("getNestedMapping(uint256)", 1) == encodeArgs(false));
+ ABI_CHECK(callContractFunction("getTopMapping(uint256)", 0), encodeArgs(1));
+ ABI_CHECK(callContractFunction("getTopMapping(uint256)", 1), encodeArgs(2));
+ ABI_CHECK(callContractFunction("getNestedMapping(uint256)", 0), encodeArgs(true));
+ ABI_CHECK(callContractFunction("getNestedMapping(uint256)", 1), encodeArgs(false));
}
BOOST_AUTO_TEST_CASE(deleteLocal)
@@ -1231,7 +1235,7 @@ BOOST_AUTO_TEST_CASE(deleteLocal)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("delLocal()") == encodeArgs(0));
+ ABI_CHECK(callContractFunction("delLocal()"), encodeArgs(0));
}
BOOST_AUTO_TEST_CASE(deleteLocals)
@@ -1249,7 +1253,7 @@ BOOST_AUTO_TEST_CASE(deleteLocals)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("delLocal()") == encodeArgs(6, 7));
+ ABI_CHECK(callContractFunction("delLocal()"), encodeArgs(6, 7));
}
BOOST_AUTO_TEST_CASE(constructor)
@@ -1287,7 +1291,7 @@ BOOST_AUTO_TEST_CASE(simple_accessor)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("data()") == encodeArgs(8));
+ ABI_CHECK(callContractFunction("data()"), encodeArgs(8));
}
BOOST_AUTO_TEST_CASE(array_accessor)
@@ -1314,14 +1318,14 @@ BOOST_AUTO_TEST_CASE(array_accessor)
}
)";
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));
+ ABI_CHECK(callContractFunction("data(uint256)", 0), encodeArgs(8));
+ ABI_CHECK(callContractFunction("data(uint256)", 8), encodeArgs());
+ ABI_CHECK(callContractFunction("dynamicData(uint256)", 2), encodeArgs(8));
+ ABI_CHECK(callContractFunction("dynamicData(uint256)", 8), encodeArgs());
+ ABI_CHECK(callContractFunction("smallTypeData(uint256)", 1), encodeArgs(22));
+ ABI_CHECK(callContractFunction("smallTypeData(uint256)", 127), encodeArgs(2));
+ ABI_CHECK(callContractFunction("smallTypeData(uint256)", 128), encodeArgs());
+ ABI_CHECK(callContractFunction("multiple_map(uint256,uint256,uint256)", 2, 1, 2), encodeArgs(3));
}
BOOST_AUTO_TEST_CASE(accessors_mapping_for_array)
@@ -1338,10 +1342,10 @@ BOOST_AUTO_TEST_CASE(accessors_mapping_for_array)
}
)";
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());
+ ABI_CHECK(callContractFunction("data(uint256,uint256)", 2, 2), encodeArgs(8));
+ ABI_CHECK(callContractFunction("data(uint256, 256)", 2, 8), encodeArgs());
+ ABI_CHECK(callContractFunction("dynamicData(uint256,uint256)", 2, 2), encodeArgs(8));
+ ABI_CHECK(callContractFunction("dynamicData(uint256,uint256)", 2, 8), encodeArgs());
}
BOOST_AUTO_TEST_CASE(multiple_elementary_accessors)
@@ -1363,11 +1367,11 @@ BOOST_AUTO_TEST_CASE(multiple_elementary_accessors)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("data()") == encodeArgs(8));
- BOOST_CHECK(callContractFunction("name()") == encodeArgs("Celina"));
- BOOST_CHECK(callContractFunction("a_hash()") == encodeArgs(dev::keccak256(bytes(1, 0x7b))));
- BOOST_CHECK(callContractFunction("an_address()") == encodeArgs(toBigEndian(u160(0x1337))));
- BOOST_CHECK(callContractFunction("super_secret_data()") == bytes());
+ ABI_CHECK(callContractFunction("data()"), encodeArgs(8));
+ ABI_CHECK(callContractFunction("name()"), encodeArgs("Celina"));
+ ABI_CHECK(callContractFunction("a_hash()"), encodeArgs(dev::keccak256(bytes(1, 0x7b))));
+ ABI_CHECK(callContractFunction("an_address()"), encodeArgs(toBigEndian(u160(0x1337))));
+ ABI_CHECK(callContractFunction("super_secret_data()"), bytes());
}
BOOST_AUTO_TEST_CASE(complex_accessors)
@@ -1387,10 +1391,10 @@ BOOST_AUTO_TEST_CASE(complex_accessors)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("to_string_map(uint256)", 42) == encodeArgs("24"));
- BOOST_CHECK(callContractFunction("to_bool_map(uint256)", 42) == encodeArgs(false));
- BOOST_CHECK(callContractFunction("to_uint_map(uint256)", 42) == encodeArgs(12));
- BOOST_CHECK(callContractFunction("to_multiple_map(uint256,uint256)", 42, 23) == encodeArgs(31));
+ ABI_CHECK(callContractFunction("to_string_map(uint256)", 42), encodeArgs("24"));
+ ABI_CHECK(callContractFunction("to_bool_map(uint256)", 42), encodeArgs(false));
+ ABI_CHECK(callContractFunction("to_uint_map(uint256)", 42), encodeArgs(12));
+ ABI_CHECK(callContractFunction("to_multiple_map(uint256,uint256)", 42, 23), encodeArgs(31));
}
BOOST_AUTO_TEST_CASE(struct_accessor)
@@ -1408,7 +1412,7 @@ BOOST_AUTO_TEST_CASE(struct_accessor)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("data(uint256)", 7) == encodeArgs(1, 2, true));
+ ABI_CHECK(callContractFunction("data(uint256)", 7), encodeArgs(1, 2, true));
}
BOOST_AUTO_TEST_CASE(balance)
@@ -1422,7 +1426,7 @@ BOOST_AUTO_TEST_CASE(balance)
}
)";
compileAndRun(sourceCode, 23);
- BOOST_CHECK(callContractFunction("getBalance()") == encodeArgs(23));
+ ABI_CHECK(callContractFunction("getBalance()"), encodeArgs(23));
}
BOOST_AUTO_TEST_CASE(blockchain)
@@ -1440,7 +1444,7 @@ BOOST_AUTO_TEST_CASE(blockchain)
BOOST_CHECK(m_rpc.rpcCall("miner_setEtherbase", {"\"0x1212121212121212121212121212121212121212\""}).asBool() == true);
m_rpc.test_mineBlocks(5);
compileAndRun(sourceCode, 27);
- BOOST_CHECK(callContractFunctionWithValue("someInfo()", 28) == encodeArgs(28, u256("0x1212121212121212121212121212121212121212"), 7));
+ ABI_CHECK(callContractFunctionWithValue("someInfo()", 28), encodeArgs(28, u256("0x1212121212121212121212121212121212121212"), 7));
}
BOOST_AUTO_TEST_CASE(msg_sig)
@@ -1453,7 +1457,7 @@ BOOST_AUTO_TEST_CASE(msg_sig)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("foo(uint256)") == encodeArgs(asString(FixedHash<4>(dev::keccak256("foo(uint256)")).asBytes())));
+ ABI_CHECK(callContractFunction("foo(uint256)", 0), encodeArgs(asString(FixedHash<4>(dev::keccak256("foo(uint256)")).asBytes())));
}
BOOST_AUTO_TEST_CASE(msg_sig_after_internal_call_is_same)
@@ -1469,7 +1473,7 @@ BOOST_AUTO_TEST_CASE(msg_sig_after_internal_call_is_same)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("foo(uint256)") == encodeArgs(asString(FixedHash<4>(dev::keccak256("foo(uint256)")).asBytes())));
+ ABI_CHECK(callContractFunction("foo(uint256)", 0), encodeArgs(asString(FixedHash<4>(dev::keccak256("foo(uint256)")).asBytes())));
}
BOOST_AUTO_TEST_CASE(now)
@@ -1490,7 +1494,7 @@ BOOST_AUTO_TEST_CASE(now)
size_t endTime = blockTimestamp(endBlock);
BOOST_CHECK(startBlock != endBlock);
BOOST_CHECK(startTime != endTime);
- BOOST_CHECK(ret == encodeArgs(true, endTime));
+ ABI_CHECK(ret, encodeArgs(true, endTime));
}
BOOST_AUTO_TEST_CASE(type_conversions_cleanup)
@@ -1518,7 +1522,7 @@ BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_fixed_bytes_smaller_size)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("bytesToBytes(bytes4)", "abcd") == encodeArgs("ab"));
+ ABI_CHECK(callContractFunction("bytesToBytes(bytes4)", "abcd"), encodeArgs("ab"));
}
BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_fixed_bytes_greater_size)
@@ -1531,7 +1535,7 @@ BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_fixed_bytes_greater_size)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("bytesToBytes(bytes2)", "ab") == encodeArgs("ab"));
+ ABI_CHECK(callContractFunction("bytesToBytes(bytes2)", "ab"), encodeArgs("ab"));
}
BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_fixed_bytes_same_size)
@@ -1544,7 +1548,7 @@ BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_fixed_bytes_same_size)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("bytesToBytes(bytes4)", "abcd") == encodeArgs("abcd"));
+ ABI_CHECK(callContractFunction("bytesToBytes(bytes4)", "abcd"), encodeArgs("abcd"));
}
// fixed bytes to uint conversion tests
@@ -1558,8 +1562,10 @@ BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_uint_same_size)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("bytesToUint(bytes32)", string("abc2")) ==
- encodeArgs(u256("0x6162633200000000000000000000000000000000000000000000000000000000")));
+ ABI_CHECK(
+ callContractFunction("bytesToUint(bytes32)", string("abc2")),
+ encodeArgs(u256("0x6162633200000000000000000000000000000000000000000000000000000000"))
+ );
}
BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_uint_same_min_size)
@@ -1572,8 +1578,10 @@ BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_uint_same_min_size)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("bytesToUint(bytes1)", string("a")) ==
- encodeArgs(u256("0x61")));
+ ABI_CHECK(
+ callContractFunction("bytesToUint(bytes1)", string("a")),
+ encodeArgs(u256("0x61"))
+ );
}
BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_uint_smaller_size)
@@ -1586,8 +1594,10 @@ BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_uint_smaller_size)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("bytesToUint(bytes4)", string("abcd")) ==
- encodeArgs(u256("0x6364")));
+ ABI_CHECK(
+ callContractFunction("bytesToUint(bytes4)", string("abcd")),
+ encodeArgs(u256("0x6364"))
+ );
}
BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_uint_greater_size)
@@ -1600,8 +1610,10 @@ BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_uint_greater_size)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("bytesToUint(bytes4)", string("abcd")) ==
- encodeArgs(u256("0x61626364")));
+ ABI_CHECK(
+ callContractFunction("bytesToUint(bytes4)", string("abcd")),
+ encodeArgs(u256("0x61626364"))
+ );
}
// uint fixed bytes conversion tests
@@ -1616,7 +1628,7 @@ BOOST_AUTO_TEST_CASE(convert_uint_to_fixed_bytes_same_size)
)";
compileAndRun(sourceCode);
u256 a("0x6162630000000000000000000000000000000000000000000000000000000000");
- BOOST_CHECK(callContractFunction("uintToBytes(uint256)", a) == encodeArgs(a));
+ ABI_CHECK(callContractFunction("uintToBytes(uint256)", a), encodeArgs(a));
}
BOOST_AUTO_TEST_CASE(convert_uint_to_fixed_bytes_same_min_size)
@@ -1629,8 +1641,10 @@ BOOST_AUTO_TEST_CASE(convert_uint_to_fixed_bytes_same_min_size)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("UintToBytes(uint8)", u256("0x61")) ==
- encodeArgs(string("a")));
+ ABI_CHECK(
+ callContractFunction("UintToBytes(uint8)", u256("0x61")),
+ encodeArgs(string("a"))
+ );
}
BOOST_AUTO_TEST_CASE(convert_uint_to_fixed_bytes_smaller_size)
@@ -1643,8 +1657,10 @@ BOOST_AUTO_TEST_CASE(convert_uint_to_fixed_bytes_smaller_size)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("uintToBytes(uint32)",
- u160("0x61626364")) == encodeArgs(string("cd")));
+ ABI_CHECK(
+ callContractFunction("uintToBytes(uint32)", u160("0x61626364")),
+ encodeArgs(string("cd"))
+ );
}
BOOST_AUTO_TEST_CASE(convert_uint_to_fixed_bytes_greater_size)
@@ -1657,8 +1673,8 @@ BOOST_AUTO_TEST_CASE(convert_uint_to_fixed_bytes_greater_size)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(
- callContractFunction("UintToBytes(uint16)", u256("0x6162")) ==
+ ABI_CHECK(
+ callContractFunction("UintToBytes(uint16)", u256("0x6162")),
encodeArgs(string("\0\0\0\0\0\0ab", 8))
);
}
@@ -1677,7 +1693,7 @@ BOOST_AUTO_TEST_CASE(send_ether)
u256 amount(130);
compileAndRun(sourceCode, amount + 1);
u160 address(23);
- BOOST_CHECK(callContractFunction("a(address,uint256)", address, amount) == encodeArgs(1));
+ ABI_CHECK(callContractFunction("a(address,uint256)", address, amount), encodeArgs(1));
BOOST_CHECK_EQUAL(balanceAt(address), amount);
}
@@ -1710,11 +1726,11 @@ BOOST_AUTO_TEST_CASE(transfer_ether)
u160 const oogRecipient = m_contractAddress;
compileAndRun(sourceCode, 20, "A");
u160 payableRecipient(23);
- BOOST_CHECK(callContractFunction("a(address,uint256)", payableRecipient, 10) == encodeArgs(10));
+ ABI_CHECK(callContractFunction("a(address,uint256)", payableRecipient, 10), encodeArgs(10));
BOOST_CHECK_EQUAL(balanceAt(payableRecipient), 10);
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 10);
- BOOST_CHECK(callContractFunction("b(address,uint256)", nonPayableRecipient, 10) == encodeArgs());
- BOOST_CHECK(callContractFunction("b(address,uint256)", oogRecipient, 10) == encodeArgs());
+ ABI_CHECK(callContractFunction("b(address,uint256)", nonPayableRecipient, 10), encodeArgs());
+ ABI_CHECK(callContractFunction("b(address,uint256)", oogRecipient, 10), encodeArgs());
}
BOOST_AUTO_TEST_CASE(log0)
@@ -1840,7 +1856,7 @@ BOOST_AUTO_TEST_CASE(suicide)
u256 amount(130);
compileAndRun(sourceCode, amount);
u160 address(23);
- BOOST_CHECK(callContractFunction("a(address)", address) == bytes());
+ ABI_CHECK(callContractFunction("a(address)", address), bytes());
BOOST_CHECK(!addressHasCode(m_contractAddress));
BOOST_CHECK_EQUAL(balanceAt(address), amount);
}
@@ -1859,7 +1875,7 @@ BOOST_AUTO_TEST_CASE(selfdestruct)
u256 amount(130);
compileAndRun(sourceCode, amount);
u160 address(23);
- BOOST_CHECK(callContractFunction("a(address)", address) == bytes());
+ ABI_CHECK(callContractFunction("a(address)", address), bytes());
BOOST_CHECK(!addressHasCode(m_contractAddress));
BOOST_CHECK_EQUAL(balanceAt(address), amount);
}
@@ -2046,7 +2062,7 @@ BOOST_AUTO_TEST_CASE(ecrecover)
u256 r("0x73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f");
u256 s("0xeeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549");
u160 addr("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b");
- BOOST_CHECK(callContractFunction("a(bytes32,uint8,bytes32,bytes32)", h, v, r, s) == encodeArgs(addr));
+ ABI_CHECK(callContractFunction("a(bytes32,uint8,bytes32,bytes32)", h, v, r, s), encodeArgs(addr));
}
BOOST_AUTO_TEST_CASE(inter_contract_calls)
@@ -2231,7 +2247,7 @@ BOOST_AUTO_TEST_CASE(fixed_bytes_in_calls)
compileAndRun(sourceCode, 0, "Main");
BOOST_REQUIRE(callContractFunction("setHelper(address)", c_helperAddress) == bytes());
BOOST_REQUIRE(callContractFunction("getHelper()", c_helperAddress) == encodeArgs(c_helperAddress));
- BOOST_CHECK(callContractFunction("callHelper(bytes2,bool)", string("\0a", 2), true) == encodeArgs(string("\0a\0\0\0", 5)));
+ ABI_CHECK(callContractFunction("callHelper(bytes2,bool)", string("\0a", 2), true), encodeArgs(string("\0a\0\0\0", 5)));
}
BOOST_AUTO_TEST_CASE(constructor_arguments_internal)
@@ -2257,8 +2273,8 @@ BOOST_AUTO_TEST_CASE(constructor_arguments_internal)
function getName() returns (bytes3 ret) { return h.getName(); }
})";
compileAndRun(sourceCode, 0, "Main");
- BOOST_CHECK(callContractFunction("getFlag()") == encodeArgs(true));
- BOOST_CHECK(callContractFunction("getName()") == encodeArgs("abc"));
+ ABI_CHECK(callContractFunction("getFlag()"), encodeArgs(true));
+ ABI_CHECK(callContractFunction("getName()"), encodeArgs("abc"));
}
BOOST_AUTO_TEST_CASE(constructor_arguments_external)
@@ -2277,8 +2293,8 @@ BOOST_AUTO_TEST_CASE(constructor_arguments_external)
}
)";
compileAndRun(sourceCode, 0, "Main", encodeArgs("abc", true));
- BOOST_CHECK(callContractFunction("getFlag()") == encodeArgs(true));
- BOOST_CHECK(callContractFunction("getName()") == encodeArgs("abc"));
+ ABI_CHECK(callContractFunction("getFlag()"), encodeArgs(true));
+ ABI_CHECK(callContractFunction("getName()"), encodeArgs("abc"));
}
BOOST_AUTO_TEST_CASE(constructor_with_long_arguments)
@@ -2305,8 +2321,8 @@ BOOST_AUTO_TEST_CASE(constructor_with_long_arguments)
u256(b.length()),
b
));
- BOOST_CHECK(callContractFunction("a()") == encodeDyn(a));
- BOOST_CHECK(callContractFunction("b()") == encodeDyn(b));
+ ABI_CHECK(callContractFunction("a()"), encodeDyn(a));
+ ABI_CHECK(callContractFunction("b()"), encodeDyn(b));
}
BOOST_AUTO_TEST_CASE(constructor_static_array_argument)
@@ -2323,10 +2339,10 @@ BOOST_AUTO_TEST_CASE(constructor_static_array_argument)
}
)";
compileAndRun(sourceCode, 0, "C", encodeArgs(u256(1), u256(2), u256(3), u256(4)));
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("b(uint256)", u256(0)) == encodeArgs(u256(2)));
- BOOST_CHECK(callContractFunction("b(uint256)", u256(1)) == encodeArgs(u256(3)));
- BOOST_CHECK(callContractFunction("b(uint256)", u256(2)) == encodeArgs(u256(4)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("b(uint256)", u256(0)), encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("b(uint256)", u256(1)), encodeArgs(u256(3)));
+ ABI_CHECK(callContractFunction("b(uint256)", u256(2)), encodeArgs(u256(4)));
}
BOOST_AUTO_TEST_CASE(functions_called_by_constructor)
@@ -2485,8 +2501,8 @@ BOOST_AUTO_TEST_CASE(virtual_function_calls)
}
)";
compileAndRun(sourceCode, 0, "Derived");
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(2));
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(2));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(2));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(access_base_storage)
@@ -2510,9 +2526,9 @@ BOOST_AUTO_TEST_CASE(access_base_storage)
}
)";
compileAndRun(sourceCode, 0, "Derived");
- BOOST_CHECK(callContractFunction("setData(uint256,uint256)", 1, 2) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("getViaBase()") == encodeArgs(1));
- BOOST_CHECK(callContractFunction("getViaDerived()") == encodeArgs(1, 2));
+ ABI_CHECK(callContractFunction("setData(uint256,uint256)", 1, 2), encodeArgs(true));
+ ABI_CHECK(callContractFunction("getViaBase()"), encodeArgs(1));
+ ABI_CHECK(callContractFunction("getViaDerived()"), encodeArgs(1, 2));
}
BOOST_AUTO_TEST_CASE(single_copy_with_multiple_inheritance)
@@ -2528,9 +2544,9 @@ BOOST_AUTO_TEST_CASE(single_copy_with_multiple_inheritance)
contract Derived is Base, B, A { }
)";
compileAndRun(sourceCode, 0, "Derived");
- BOOST_CHECK(callContractFunction("getViaB()") == encodeArgs(0));
- BOOST_CHECK(callContractFunction("setViaA(uint256)", 23) == encodeArgs());
- BOOST_CHECK(callContractFunction("getViaB()") == encodeArgs(23));
+ ABI_CHECK(callContractFunction("getViaB()"), encodeArgs(0));
+ ABI_CHECK(callContractFunction("setViaA(uint256)", 23), encodeArgs());
+ ABI_CHECK(callContractFunction("getViaB()"), encodeArgs(23));
}
BOOST_AUTO_TEST_CASE(explicit_base_class)
@@ -2544,8 +2560,8 @@ BOOST_AUTO_TEST_CASE(explicit_base_class)
}
)";
compileAndRun(sourceCode, 0, "Derived");
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(3));
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(3));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(base_constructor_arguments)
@@ -2567,7 +2583,7 @@ BOOST_AUTO_TEST_CASE(base_constructor_arguments)
}
)";
compileAndRun(sourceCode, 0, "Derived");
- BOOST_CHECK(callContractFunction("getA()") == encodeArgs(7 * 7));
+ ABI_CHECK(callContractFunction("getA()"), encodeArgs(7 * 7));
}
BOOST_AUTO_TEST_CASE(function_usage_in_constructor_arguments)
@@ -2587,7 +2603,7 @@ BOOST_AUTO_TEST_CASE(function_usage_in_constructor_arguments)
}
)";
compileAndRun(sourceCode, 0, "Derived");
- BOOST_CHECK(callContractFunction("getA()") == encodeArgs(2));
+ ABI_CHECK(callContractFunction("getA()"), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(virtual_function_usage_in_constructor_arguments)
@@ -2609,7 +2625,7 @@ BOOST_AUTO_TEST_CASE(virtual_function_usage_in_constructor_arguments)
}
)";
compileAndRun(sourceCode, 0, "Derived");
- BOOST_CHECK(callContractFunction("getA()") == encodeArgs(2));
+ ABI_CHECK(callContractFunction("getA()"), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(constructor_argument_overriding)
@@ -2627,7 +2643,7 @@ BOOST_AUTO_TEST_CASE(constructor_argument_overriding)
}
)";
compileAndRun(sourceCode, 0, "Derived");
- BOOST_CHECK(callContractFunction("getA()") == encodeArgs(3));
+ ABI_CHECK(callContractFunction("getA()"), encodeArgs(3));
}
BOOST_AUTO_TEST_CASE(internal_constructor)
@@ -2649,8 +2665,8 @@ BOOST_AUTO_TEST_CASE(function_modifier)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getOne()") == encodeArgs(0));
- BOOST_CHECK(callContractFunctionWithValue("getOne()", 1) == encodeArgs(1));
+ ABI_CHECK(callContractFunction("getOne()"), encodeArgs(0));
+ ABI_CHECK(callContractFunctionWithValue("getOne()", 1), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(function_modifier_local_variables)
@@ -2663,8 +2679,8 @@ BOOST_AUTO_TEST_CASE(function_modifier_local_variables)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bool)", true) == encodeArgs(0));
- BOOST_CHECK(callContractFunction("f(bool)", false) == encodeArgs(3));
+ ABI_CHECK(callContractFunction("f(bool)", true), encodeArgs(0));
+ ABI_CHECK(callContractFunction("f(bool)", false), encodeArgs(3));
}
BOOST_AUTO_TEST_CASE(function_modifier_loop)
@@ -2676,7 +2692,7 @@ BOOST_AUTO_TEST_CASE(function_modifier_loop)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(10));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(10));
}
BOOST_AUTO_TEST_CASE(function_modifier_multi_invocation)
@@ -2688,8 +2704,8 @@ BOOST_AUTO_TEST_CASE(function_modifier_multi_invocation)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bool)", false) == encodeArgs(1));
- BOOST_CHECK(callContractFunction("f(bool)", true) == encodeArgs(2));
+ ABI_CHECK(callContractFunction("f(bool)", false), encodeArgs(1));
+ ABI_CHECK(callContractFunction("f(bool)", true), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(function_modifier_multi_with_return)
@@ -2703,8 +2719,8 @@ BOOST_AUTO_TEST_CASE(function_modifier_multi_with_return)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bool)", false) == encodeArgs(1));
- BOOST_CHECK(callContractFunction("f(bool)", true) == encodeArgs(2));
+ ABI_CHECK(callContractFunction("f(bool)", false), encodeArgs(1));
+ ABI_CHECK(callContractFunction("f(bool)", true), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(function_modifier_overriding)
@@ -2719,7 +2735,7 @@ BOOST_AUTO_TEST_CASE(function_modifier_overriding)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(false));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(false));
}
BOOST_AUTO_TEST_CASE(function_modifier_calling_functions_in_creation_context)
@@ -2742,7 +2758,7 @@ BOOST_AUTO_TEST_CASE(function_modifier_calling_functions_in_creation_context)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getData()") == encodeArgs(0x4300));
+ ABI_CHECK(callContractFunction("getData()"), encodeArgs(0x4300));
}
BOOST_AUTO_TEST_CASE(function_modifier_for_constructor)
@@ -2759,7 +2775,7 @@ BOOST_AUTO_TEST_CASE(function_modifier_for_constructor)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getData()") == encodeArgs(4 | 2));
+ ABI_CHECK(callContractFunction("getData()"), encodeArgs(4 | 2));
}
BOOST_AUTO_TEST_CASE(function_modifier_multiple_times)
@@ -2772,8 +2788,8 @@ BOOST_AUTO_TEST_CASE(function_modifier_multiple_times)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(uint256)", u256(3)) == encodeArgs(2 + 5 + 3));
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(2 + 5 + 3));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(3)), encodeArgs(2 + 5 + 3));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(2 + 5 + 3));
}
BOOST_AUTO_TEST_CASE(function_modifier_multiple_times_local_vars)
@@ -2786,8 +2802,8 @@ BOOST_AUTO_TEST_CASE(function_modifier_multiple_times_local_vars)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(uint256)", u256(3)) == encodeArgs(2 + 5 + 3));
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(0));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(3)), encodeArgs(2 + 5 + 3));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(0));
}
BOOST_AUTO_TEST_CASE(crazy_elementary_typenames_on_stack)
@@ -2803,7 +2819,7 @@ BOOST_AUTO_TEST_CASE(crazy_elementary_typenames_on_stack)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(-7)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(-7)));
}
BOOST_AUTO_TEST_CASE(super)
@@ -2815,7 +2831,7 @@ BOOST_AUTO_TEST_CASE(super)
contract D is B, C { function f() returns (uint r) { return super.f() | 8; } }
)";
compileAndRun(sourceCode, 0, "D");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(1 | 2 | 4 | 8));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(1 | 2 | 4 | 8));
}
BOOST_AUTO_TEST_CASE(super_in_constructor)
@@ -2827,7 +2843,7 @@ BOOST_AUTO_TEST_CASE(super_in_constructor)
contract D is B, C { uint data; function D() { data = super.f() | 8; } function f() returns (uint r) { return data; } }
)";
compileAndRun(sourceCode, 0, "D");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(1 | 2 | 4 | 8));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(1 | 2 | 4 | 8));
}
BOOST_AUTO_TEST_CASE(super_alone)
@@ -2836,7 +2852,7 @@ BOOST_AUTO_TEST_CASE(super_alone)
contract A { function f() { super; } }
)";
compileAndRun(sourceCode, 0, "A");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs());
+ ABI_CHECK(callContractFunction("f()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(fallback_function)
@@ -2849,9 +2865,9 @@ BOOST_AUTO_TEST_CASE(fallback_function)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getData()") == encodeArgs(0));
- BOOST_CHECK(callContractFunction("") == encodeArgs());
- BOOST_CHECK(callContractFunction("getData()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("getData()"), encodeArgs(0));
+ ABI_CHECK(callContractFunction(""), encodeArgs());
+ ABI_CHECK(callContractFunction("getData()"), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(inherited_fallback_function)
@@ -2865,9 +2881,9 @@ BOOST_AUTO_TEST_CASE(inherited_fallback_function)
contract B is A {}
)";
compileAndRun(sourceCode, 0, "B");
- BOOST_CHECK(callContractFunction("getData()") == encodeArgs(0));
- BOOST_CHECK(callContractFunction("") == encodeArgs());
- BOOST_CHECK(callContractFunction("getData()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("getData()"), encodeArgs(0));
+ ABI_CHECK(callContractFunction(""), encodeArgs());
+ ABI_CHECK(callContractFunction("getData()"), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(default_fallback_throws)
@@ -2880,7 +2896,26 @@ BOOST_AUTO_TEST_CASE(default_fallback_throws)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(0));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(0));
+}
+
+BOOST_AUTO_TEST_CASE(short_data_calls_fallback)
+{
+ char const* sourceCode = R"(
+ contract A {
+ uint public x;
+ // Signature is d88e0b00
+ function fow() { x = 3; }
+ function () { x = 2; }
+ }
+ )";
+ compileAndRun(sourceCode);
+ // should call fallback
+ sendMessage(asBytes("\xd8\x8e\x0b"), false, 0);
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(2));
+ // should call function
+ sendMessage(asBytes(string("\xd8\x8e\x0b") + string(1, 0)), false, 0);
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(3));
}
BOOST_AUTO_TEST_CASE(event)
@@ -2980,21 +3015,21 @@ BOOST_AUTO_TEST_CASE(events_with_same_name)
u160 const c_loggedAddress = m_contractAddress;
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("deposit()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("deposit()"), encodeArgs(u256(1)));
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_CHECK(m_logs[0].data.empty());
BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].topics[0], dev::keccak256(string("Deposit()")));
- BOOST_CHECK(callContractFunction("deposit(address)", c_loggedAddress) == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("deposit(address)", c_loggedAddress), encodeArgs(u256(1)));
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_CHECK(m_logs[0].data == encodeArgs(c_loggedAddress));
BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].topics[0], dev::keccak256(string("Deposit(address)")));
- BOOST_CHECK(callContractFunction("deposit(address,uint256)", c_loggedAddress, u256(100)) == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("deposit(address,uint256)", c_loggedAddress, u256(100)), encodeArgs(u256(1)));
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_CHECK(m_logs[0].data == encodeArgs(c_loggedAddress, 100));
@@ -3032,21 +3067,21 @@ BOOST_AUTO_TEST_CASE(events_with_same_name_inherited)
u160 const c_loggedAddress = m_contractAddress;
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("deposit()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("deposit()"), encodeArgs(u256(1)));
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_CHECK(m_logs[0].data.empty());
BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].topics[0], dev::keccak256(string("Deposit()")));
- BOOST_CHECK(callContractFunction("deposit(address)", c_loggedAddress) == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("deposit(address)", c_loggedAddress), encodeArgs(u256(1)));
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_CHECK(m_logs[0].data == encodeArgs(c_loggedAddress));
BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].topics[0], dev::keccak256(string("Deposit(address)")));
- BOOST_CHECK(callContractFunction("deposit(address,uint256)", c_loggedAddress, u256(100)) == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("deposit(address,uint256)", c_loggedAddress, u256(100)), encodeArgs(u256(1)));
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_CHECK(m_logs[0].data == encodeArgs(c_loggedAddress, 100));
@@ -3074,7 +3109,7 @@ BOOST_AUTO_TEST_CASE(event_anonymous_with_topics)
char const* sourceCode = R"(
contract ClientReceipt {
event Deposit(address indexed _from, bytes32 indexed _id, uint indexed _value, uint indexed _value2, bytes32 data) anonymous;
- function deposit(bytes32 _id, bool _manually) payable {
+ function deposit(bytes32 _id) payable {
Deposit(msg.sender, _id, msg.value, 2, "abc");
}
}
@@ -3082,7 +3117,7 @@ BOOST_AUTO_TEST_CASE(event_anonymous_with_topics)
compileAndRun(sourceCode);
u256 value(18);
u256 id(0x1234);
- callContractFunctionWithValue("deposit(bytes32,bool)", value, id);
+ callContractFunctionWithValue("deposit(bytes32)", value, id);
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_CHECK(m_logs[0].data == encodeArgs("abc"));
@@ -3230,7 +3265,7 @@ BOOST_AUTO_TEST_CASE(empty_name_input_parameter_with_named_one)
)";
compileAndRun(sourceCode);
BOOST_CHECK(callContractFunction("f(uint256,uint256)", 5, 9) != encodeArgs(5, 8));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", 5, 9) == encodeArgs(9, 8));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", 5, 9), encodeArgs(9, 8));
}
BOOST_AUTO_TEST_CASE(empty_name_return_parameter)
@@ -3243,7 +3278,7 @@ BOOST_AUTO_TEST_CASE(empty_name_return_parameter)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(uint256)", 9) == encodeArgs(9));
+ ABI_CHECK(callContractFunction("f(uint256)", 9), encodeArgs(9));
}
BOOST_AUTO_TEST_CASE(keccak256_multiple_arguments)
@@ -3258,11 +3293,13 @@ BOOST_AUTO_TEST_CASE(keccak256_multiple_arguments)
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("foo(uint256,uint256,uint256)", 10, 12, 13) == encodeArgs(
- dev::keccak256(
- toBigEndian(u256(10)) +
- toBigEndian(u256(12)) +
- toBigEndian(u256(13)))));
+ ABI_CHECK(callContractFunction("foo(uint256,uint256,uint256)", 10, 12, 13), encodeArgs(
+ dev::keccak256(
+ toBigEndian(u256(10)) +
+ toBigEndian(u256(12)) +
+ toBigEndian(u256(13))
+ )
+ ));
}
BOOST_AUTO_TEST_CASE(keccak256_multiple_arguments_with_numeric_literals)
@@ -3277,11 +3314,13 @@ BOOST_AUTO_TEST_CASE(keccak256_multiple_arguments_with_numeric_literals)
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("foo(uint256,uint16)", 10, 12) == encodeArgs(
- dev::keccak256(
- toBigEndian(u256(10)) +
- bytes{0x0, 0xc} +
- bytes(1, 0x91))));
+ ABI_CHECK(callContractFunction("foo(uint256,uint16)", 10, 12), encodeArgs(
+ dev::keccak256(
+ toBigEndian(u256(10)) +
+ bytes{0x0, 0xc} +
+ bytes(1, 0x91)
+ )
+ ));
}
BOOST_AUTO_TEST_CASE(keccak256_multiple_arguments_with_string_literals)
@@ -3300,14 +3339,16 @@ BOOST_AUTO_TEST_CASE(keccak256_multiple_arguments_with_string_literals)
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("foo()") == encodeArgs(dev::keccak256("foo")));
+ ABI_CHECK(callContractFunction("foo()"), encodeArgs(dev::keccak256("foo")));
- BOOST_CHECK(callContractFunction("bar(uint256,uint16)", 10, 12) == encodeArgs(
- dev::keccak256(
- toBigEndian(u256(10)) +
- bytes{0x0, 0xc} +
- bytes(1, 0x91) +
- bytes{0x66, 0x6f, 0x6f})));
+ ABI_CHECK(callContractFunction("bar(uint256,uint16)", 10, 12), encodeArgs(
+ dev::keccak256(
+ toBigEndian(u256(10)) +
+ bytes{0x0, 0xc} +
+ bytes(1, 0x91) +
+ bytes{0x66, 0x6f, 0x6f}
+ )
+ ));
}
BOOST_AUTO_TEST_CASE(keccak256_with_bytes)
@@ -3326,7 +3367,7 @@ BOOST_AUTO_TEST_CASE(keccak256_with_bytes)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("foo()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("foo()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(iterated_keccak256_with_bytes)
@@ -3345,7 +3386,7 @@ BOOST_AUTO_TEST_CASE(iterated_keccak256_with_bytes)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("foo()") == encodeArgs(
+ ABI_CHECK(callContractFunction("foo()"), encodeArgs(
u256(dev::keccak256(bytes{'b'} + dev::keccak256("xyz").asBytes() + bytes{'a'}))
));
}
@@ -3361,7 +3402,7 @@ BOOST_AUTO_TEST_CASE(sha3_multiple_arguments)
})";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("foo(uint256,uint256,uint256)", 10, 12, 13) == encodeArgs(
+ ABI_CHECK(callContractFunction("foo(uint256,uint256,uint256)", 10, 12, 13), encodeArgs(
dev::keccak256(
toBigEndian(u256(10)) +
toBigEndian(u256(12)) +
@@ -3416,10 +3457,10 @@ BOOST_AUTO_TEST_CASE(generic_callcode)
u160 const c_receiverAddress = m_contractAddress;
compileAndRun(sourceCode, 50, "Sender");
u160 const c_senderAddress = m_contractAddress;
- BOOST_CHECK(callContractFunction("doSend(address)", c_receiverAddress) == encodeArgs(0));
- BOOST_CHECK(callContractFunction("received()") == encodeArgs(23));
+ ABI_CHECK(callContractFunction("doSend(address)", c_receiverAddress), encodeArgs(0));
+ ABI_CHECK(callContractFunction("received()"), encodeArgs(23));
m_contractAddress = c_receiverAddress;
- BOOST_CHECK(callContractFunction("received()") == encodeArgs(0));
+ ABI_CHECK(callContractFunction("received()"), encodeArgs(0));
BOOST_CHECK(storageEmpty(c_receiverAddress));
BOOST_CHECK(!storageEmpty(c_senderAddress));
BOOST_CHECK_EQUAL(balanceAt(c_receiverAddress), 0);
@@ -3453,14 +3494,14 @@ BOOST_AUTO_TEST_CASE(generic_delegatecall)
compileAndRun(sourceCode, 50, "Sender");
u160 const c_senderAddress = m_contractAddress;
BOOST_CHECK(m_sender != c_senderAddress); // just for sanity
- BOOST_CHECK(callContractFunctionWithValue("doSend(address)", 11, c_receiverAddress) == encodeArgs());
- BOOST_CHECK(callContractFunction("received()") == encodeArgs(u256(23)));
- BOOST_CHECK(callContractFunction("sender()") == encodeArgs(u160(m_sender)));
- BOOST_CHECK(callContractFunction("value()") == encodeArgs(u256(11)));
+ ABI_CHECK(callContractFunctionWithValue("doSend(address)", 11, c_receiverAddress), encodeArgs());
+ ABI_CHECK(callContractFunction("received()"), encodeArgs(u256(23)));
+ ABI_CHECK(callContractFunction("sender()"), encodeArgs(u160(m_sender)));
+ ABI_CHECK(callContractFunction("value()"), encodeArgs(u256(11)));
m_contractAddress = c_receiverAddress;
- BOOST_CHECK(callContractFunction("received()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("sender()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("value()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("received()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("sender()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("value()"), encodeArgs(u256(0)));
BOOST_CHECK(storageEmpty(c_receiverAddress));
BOOST_CHECK(!storageEmpty(c_senderAddress));
BOOST_CHECK_EQUAL(balanceAt(c_receiverAddress), 0);
@@ -3480,8 +3521,8 @@ BOOST_AUTO_TEST_CASE(library_call_in_homestead)
)";
compileAndRun(sourceCode, 0, "Lib");
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f()") == encodeArgs());
- BOOST_CHECK(callContractFunction("sender()") == encodeArgs(u160(m_sender)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs());
+ ABI_CHECK(callContractFunction("sender()"), encodeArgs(u160(m_sender)));
}
BOOST_AUTO_TEST_CASE(store_bytes)
@@ -3499,8 +3540,8 @@ BOOST_AUTO_TEST_CASE(store_bytes)
)";
compileAndRun(sourceCode);
// empty copy loop
- BOOST_CHECK(callContractFunction("save()") == encodeArgs(24));
- BOOST_CHECK(callContractFunction("save()", "abcdefg") == encodeArgs(24));
+ ABI_CHECK(callContractFunction("save()"), encodeArgs(24));
+ ABI_CHECK(callContractFunction("save()", "abcdefg"), encodeArgs(24));
}
BOOST_AUTO_TEST_CASE(bytes_from_calldata_to_memory)
@@ -3537,14 +3578,14 @@ BOOST_AUTO_TEST_CASE(call_forward_bytes)
}
)";
compileAndRun(sourceCode, 0, "sender");
- BOOST_CHECK(callContractFunction("receive(uint256)", 7) == bytes());
- BOOST_CHECK(callContractFunction("val()") == encodeArgs(0));
- BOOST_CHECK(callContractFunction("forward()") == encodeArgs(true));
- BOOST_CHECK(callContractFunction("val()") == encodeArgs(8));
- BOOST_CHECK(callContractFunction("clear()") == encodeArgs(true));
- BOOST_CHECK(callContractFunction("val()") == encodeArgs(8));
- BOOST_CHECK(callContractFunction("forward()") == encodeArgs(true));
- BOOST_CHECK(callContractFunction("val()") == encodeArgs(0x80));
+ ABI_CHECK(callContractFunction("receive(uint256)", 7), bytes());
+ ABI_CHECK(callContractFunction("val()"), encodeArgs(0));
+ ABI_CHECK(callContractFunction("forward()"), encodeArgs(true));
+ ABI_CHECK(callContractFunction("val()"), encodeArgs(8));
+ ABI_CHECK(callContractFunction("clear()"), encodeArgs(true));
+ ABI_CHECK(callContractFunction("val()"), encodeArgs(8));
+ ABI_CHECK(callContractFunction("forward()"), encodeArgs(true));
+ ABI_CHECK(callContractFunction("val()"), encodeArgs(0x80));
}
BOOST_AUTO_TEST_CASE(copying_bytes_multiassign)
@@ -3570,14 +3611,14 @@ BOOST_AUTO_TEST_CASE(copying_bytes_multiassign)
}
)";
compileAndRun(sourceCode, 0, "sender");
- BOOST_CHECK(callContractFunction("receive(uint256)", 7) == bytes());
- BOOST_CHECK(callContractFunction("val()") == encodeArgs(0));
- BOOST_CHECK(callContractFunction("forward(bool)", true) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("val()") == encodeArgs(8));
- BOOST_CHECK(callContractFunction("forward(bool)", false) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("val()") == encodeArgs(16));
- BOOST_CHECK(callContractFunction("forward(bool)", true) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("val()") == encodeArgs(0x80));
+ ABI_CHECK(callContractFunction("receive(uint256)", 7), bytes());
+ ABI_CHECK(callContractFunction("val()"), encodeArgs(0));
+ ABI_CHECK(callContractFunction("forward(bool)", true), encodeArgs(true));
+ ABI_CHECK(callContractFunction("val()"), encodeArgs(8));
+ ABI_CHECK(callContractFunction("forward(bool)", false), encodeArgs(true));
+ ABI_CHECK(callContractFunction("val()"), encodeArgs(16));
+ ABI_CHECK(callContractFunction("forward(bool)", true), encodeArgs(true));
+ ABI_CHECK(callContractFunction("val()"), encodeArgs(0x80));
}
BOOST_AUTO_TEST_CASE(delete_removes_bytes_data)
@@ -3590,9 +3631,9 @@ BOOST_AUTO_TEST_CASE(delete_removes_bytes_data)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("---", 7) == bytes());
+ ABI_CHECK(callContractFunction("---", 7), bytes());
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("del()", 7) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("del()", 7), encodeArgs(true));
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -3606,7 +3647,7 @@ BOOST_AUTO_TEST_CASE(copy_from_calldata_removes_bytes_data)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("set()", 1, 2, 3, 4, 5) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("set()", 1, 2, 3, 4, 5), encodeArgs(true));
BOOST_CHECK(!storageEmpty(m_contractAddress));
sendMessage(bytes(), false);
BOOST_CHECK(m_output == bytes());
@@ -3624,9 +3665,9 @@ BOOST_AUTO_TEST_CASE(copy_removes_bytes_data)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("set()", 1, 2, 3, 4, 5) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("set()", 1, 2, 3, 4, 5), encodeArgs(true));
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("reset()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("reset()"), encodeArgs(true));
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -3641,16 +3682,16 @@ BOOST_AUTO_TEST_CASE(bytes_inside_mappings)
)";
compileAndRun(sourceCode);
// store a short byte array at 1 and a longer one at 2
- BOOST_CHECK(callContractFunction("set(uint256)", 1, 2) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("set(uint256)", 2, 2, 3, 4, 5) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("set(uint256)", 1, 2), encodeArgs(true));
+ ABI_CHECK(callContractFunction("set(uint256)", 2, 2, 3, 4, 5), encodeArgs(true));
BOOST_CHECK(!storageEmpty(m_contractAddress));
// copy shorter to longer
- BOOST_CHECK(callContractFunction("copy(uint256,uint256)", 1, 2) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("copy(uint256,uint256)", 1, 2), encodeArgs(true));
BOOST_CHECK(!storageEmpty(m_contractAddress));
// copy empty to both
- BOOST_CHECK(callContractFunction("copy(uint256,uint256)", 99, 1) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("copy(uint256,uint256)", 99, 1), encodeArgs(true));
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("copy(uint256,uint256)", 99, 2) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("copy(uint256,uint256)", 99, 2), encodeArgs(true));
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -3664,9 +3705,9 @@ BOOST_AUTO_TEST_CASE(bytes_length_member)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getLength()") == encodeArgs(0));
- BOOST_CHECK(callContractFunction("set()", 1, 2) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("getLength()") == encodeArgs(4+32+32));
+ ABI_CHECK(callContractFunction("getLength()"), encodeArgs(0));
+ ABI_CHECK(callContractFunction("set()", 1, 2), encodeArgs(true));
+ ABI_CHECK(callContractFunction("getLength()"), encodeArgs(4+32+32));
}
BOOST_AUTO_TEST_CASE(struct_copy)
@@ -3697,16 +3738,16 @@ BOOST_AUTO_TEST_CASE(struct_copy)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("set(uint256)", 7) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("retrieve(uint256)", 7) == encodeArgs(1, 3, 4, 2));
- BOOST_CHECK(callContractFunction("copy(uint256,uint256)", 7, 8) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("retrieve(uint256)", 7) == encodeArgs(1, 3, 4, 2));
- BOOST_CHECK(callContractFunction("retrieve(uint256)", 8) == encodeArgs(1, 3, 4, 2));
- BOOST_CHECK(callContractFunction("copy(uint256,uint256)", 0, 7) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("retrieve(uint256)", 7) == encodeArgs(0, 0, 0, 0));
- BOOST_CHECK(callContractFunction("retrieve(uint256)", 8) == encodeArgs(1, 3, 4, 2));
- BOOST_CHECK(callContractFunction("copy(uint256,uint256)", 7, 8) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("retrieve(uint256)", 8) == encodeArgs(0, 0, 0, 0));
+ ABI_CHECK(callContractFunction("set(uint256)", 7), encodeArgs(true));
+ ABI_CHECK(callContractFunction("retrieve(uint256)", 7), encodeArgs(1, 3, 4, 2));
+ ABI_CHECK(callContractFunction("copy(uint256,uint256)", 7, 8), encodeArgs(true));
+ ABI_CHECK(callContractFunction("retrieve(uint256)", 7), encodeArgs(1, 3, 4, 2));
+ ABI_CHECK(callContractFunction("retrieve(uint256)", 8), encodeArgs(1, 3, 4, 2));
+ ABI_CHECK(callContractFunction("copy(uint256,uint256)", 0, 7), encodeArgs(true));
+ ABI_CHECK(callContractFunction("retrieve(uint256)", 7), encodeArgs(0, 0, 0, 0));
+ ABI_CHECK(callContractFunction("retrieve(uint256)", 8), encodeArgs(1, 3, 4, 2));
+ ABI_CHECK(callContractFunction("copy(uint256,uint256)", 7, 8), encodeArgs(true));
+ ABI_CHECK(callContractFunction("retrieve(uint256)", 8), encodeArgs(0, 0, 0, 0));
}
BOOST_AUTO_TEST_CASE(struct_containing_bytes_copy_and_delete)
@@ -3735,13 +3776,13 @@ BOOST_AUTO_TEST_CASE(struct_containing_bytes_copy_and_delete)
compileAndRun(sourceCode);
string data = "123456789012345678901234567890123";
BOOST_CHECK(storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("set(uint256,bytes,uint256)", 12, u256(data.length()), 13, data) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("set(uint256,bytes,uint256)", 12, 0x60, 13, u256(data.length()), data), encodeArgs(true));
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("copy()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("copy()"), encodeArgs(true));
BOOST_CHECK(storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("set(uint256,bytes,uint256)", 12, u256(data.length()), 13, data) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("set(uint256,bytes,uint256)", 12, 0x60, 13, u256(data.length()), data), encodeArgs(true));
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("del()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("del()"), encodeArgs(true));
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -3762,7 +3803,7 @@ BOOST_AUTO_TEST_CASE(struct_copy_via_local)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(using_enums)
@@ -3782,7 +3823,7 @@ BOOST_AUTO_TEST_CASE(using_enums)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getChoice()") == encodeArgs(2));
+ ABI_CHECK(callContractFunction("getChoice()"), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(enum_explicit_overflow)
@@ -3813,12 +3854,12 @@ BOOST_AUTO_TEST_CASE(enum_explicit_overflow)
)";
compileAndRun(sourceCode);
// These should throw
- BOOST_CHECK(callContractFunction("getChoiceExp(uint256)", 3) == encodeArgs());
- BOOST_CHECK(callContractFunction("getChoiceFromSigned(int256)", -1) == encodeArgs());
- BOOST_CHECK(callContractFunction("getChoiceFromNegativeLiteral()") == encodeArgs());
+ ABI_CHECK(callContractFunction("getChoiceExp(uint256)", 3), encodeArgs());
+ ABI_CHECK(callContractFunction("getChoiceFromSigned(int256)", -1), encodeArgs());
+ ABI_CHECK(callContractFunction("getChoiceFromNegativeLiteral()"), encodeArgs());
// These should work
- BOOST_CHECK(callContractFunction("getChoiceExp(uint256)", 2) == encodeArgs(2));
- BOOST_CHECK(callContractFunction("getChoiceExp(uint256)", 0) == encodeArgs(0));
+ ABI_CHECK(callContractFunction("getChoiceExp(uint256)", 2), encodeArgs(2));
+ ABI_CHECK(callContractFunction("getChoiceExp(uint256)", 0), encodeArgs(0));
}
BOOST_AUTO_TEST_CASE(storing_invalid_boolean)
@@ -3853,10 +3894,10 @@ BOOST_AUTO_TEST_CASE(storing_invalid_boolean)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("set()") == encodeArgs(1));
- BOOST_CHECK(callContractFunction("perm()") == encodeArgs(1));
- BOOST_CHECK(callContractFunction("ret()") == encodeArgs(1));
- BOOST_CHECK(callContractFunction("ev()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("set()"), encodeArgs(1));
+ ABI_CHECK(callContractFunction("perm()"), encodeArgs(1));
+ ABI_CHECK(callContractFunction("ret()"), encodeArgs(1));
+ ABI_CHECK(callContractFunction("ev()"), encodeArgs(1));
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_CHECK(m_logs[0].data == encodeArgs(1));
@@ -3877,7 +3918,7 @@ BOOST_AUTO_TEST_CASE(using_contract_enums_with_explicit_contract_name)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("answer()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("answer()"), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(using_inherited_enum)
@@ -3895,7 +3936,7 @@ BOOST_AUTO_TEST_CASE(using_inherited_enum)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("answer()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("answer()"), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(using_inherited_enum_excplicitly)
@@ -3913,7 +3954,7 @@ BOOST_AUTO_TEST_CASE(using_inherited_enum_excplicitly)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("answer()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("answer()"), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(constructing_enums_from_ints)
@@ -3928,7 +3969,7 @@ BOOST_AUTO_TEST_CASE(constructing_enums_from_ints)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(inline_member_init)
@@ -3949,7 +3990,7 @@ BOOST_AUTO_TEST_CASE(inline_member_init)
}
})";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("get()") == encodeArgs(5, 6, 8));
+ ABI_CHECK(callContractFunction("get()"), encodeArgs(5, 6, 8));
}
BOOST_AUTO_TEST_CASE(inline_member_init_inheritence)
@@ -3966,8 +4007,8 @@ BOOST_AUTO_TEST_CASE(inline_member_init_inheritence)
function getDMember() returns (uint i) { return m_derived; }
})";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getBMember()") == encodeArgs(5));
- BOOST_CHECK(callContractFunction("getDMember()") == encodeArgs(6));
+ ABI_CHECK(callContractFunction("getBMember()"), encodeArgs(5));
+ ABI_CHECK(callContractFunction("getDMember()"), encodeArgs(6));
}
BOOST_AUTO_TEST_CASE(inline_member_init_inheritence_without_constructor)
@@ -3982,8 +4023,8 @@ BOOST_AUTO_TEST_CASE(inline_member_init_inheritence_without_constructor)
function getDMember() returns (uint i) { return m_derived; }
})";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getBMember()") == encodeArgs(5));
- BOOST_CHECK(callContractFunction("getDMember()") == encodeArgs(6));
+ ABI_CHECK(callContractFunction("getBMember()"), encodeArgs(5));
+ ABI_CHECK(callContractFunction("getDMember()"), encodeArgs(6));
}
BOOST_AUTO_TEST_CASE(external_function)
@@ -3998,7 +4039,7 @@ BOOST_AUTO_TEST_CASE(external_function)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test(uint256,uint256)", 2, 3) == encodeArgs(2+7, 3));
+ ABI_CHECK(callContractFunction("test(uint256,uint256)", 2, 3), encodeArgs(2+7, 3));
}
BOOST_AUTO_TEST_CASE(bytes_in_arguments)
@@ -4026,8 +4067,10 @@ BOOST_AUTO_TEST_CASE(bytes_in_arguments)
12, 32 * 4, u256(32 * 4 + 32 + (innercalldata1.length() + 31) / 32 * 32), 13,
u256(innercalldata1.length()), innercalldata1,
u256(innercalldata2.length()), innercalldata2);
- BOOST_CHECK(callContractFunction("test(uint256,bytes,bytes,uint256)", calldata)
- == encodeArgs(12, (8 + 9) * 3, 13, u256(innercalldata1.length())));
+ ABI_CHECK(
+ callContractFunction("test(uint256,bytes,bytes,uint256)", calldata),
+ encodeArgs(12, (8 + 9) * 3, 13, u256(innercalldata1.length()))
+ );
}
BOOST_AUTO_TEST_CASE(fixed_arrays_in_storage)
@@ -4046,15 +4089,15 @@ BOOST_AUTO_TEST_CASE(fixed_arrays_in_storage)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("setIDStatic(uint256)", 11) == bytes());
- BOOST_CHECK(callContractFunction("getID(uint256)", 2) == encodeArgs(11));
- BOOST_CHECK(callContractFunction("setID(uint256,uint256)", 7, 8) == bytes());
- BOOST_CHECK(callContractFunction("getID(uint256)", 7) == encodeArgs(8));
- BOOST_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 7, 8, 9) == bytes());
- BOOST_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 8, 10, 11) == bytes());
- BOOST_CHECK(callContractFunction("getData(uint256)", 7) == encodeArgs(8, 9));
- BOOST_CHECK(callContractFunction("getData(uint256)", 8) == encodeArgs(10, 11));
- BOOST_CHECK(callContractFunction("getLengths()") == encodeArgs(u256(1) << 10, (u256(1) << 10) + 3));
+ ABI_CHECK(callContractFunction("setIDStatic(uint256)", 11), bytes());
+ ABI_CHECK(callContractFunction("getID(uint256)", 2), encodeArgs(11));
+ ABI_CHECK(callContractFunction("setID(uint256,uint256)", 7, 8), bytes());
+ ABI_CHECK(callContractFunction("getID(uint256)", 7), encodeArgs(8));
+ ABI_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 7, 8, 9), bytes());
+ ABI_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 8, 10, 11), bytes());
+ ABI_CHECK(callContractFunction("getData(uint256)", 7), encodeArgs(8, 9));
+ ABI_CHECK(callContractFunction("getData(uint256)", 8), encodeArgs(10, 11));
+ ABI_CHECK(callContractFunction("getLengths()"), encodeArgs(u256(1) << 10, (u256(1) << 10) + 3));
}
BOOST_AUTO_TEST_CASE(dynamic_arrays_in_storage)
@@ -4074,17 +4117,17 @@ BOOST_AUTO_TEST_CASE(dynamic_arrays_in_storage)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getLengths()") == encodeArgs(0, 0));
- BOOST_CHECK(callContractFunction("setLengths(uint256,uint256)", 48, 49) == bytes());
- BOOST_CHECK(callContractFunction("getLengths()") == encodeArgs(48, 49));
- BOOST_CHECK(callContractFunction("setIDStatic(uint256)", 11) == bytes());
- BOOST_CHECK(callContractFunction("getID(uint256)", 2) == encodeArgs(11));
- BOOST_CHECK(callContractFunction("setID(uint256,uint256)", 7, 8) == bytes());
- BOOST_CHECK(callContractFunction("getID(uint256)", 7) == encodeArgs(8));
- BOOST_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 7, 8, 9) == bytes());
- BOOST_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 8, 10, 11) == bytes());
- BOOST_CHECK(callContractFunction("getData(uint256)", 7) == encodeArgs(8, 9));
- BOOST_CHECK(callContractFunction("getData(uint256)", 8) == encodeArgs(10, 11));
+ ABI_CHECK(callContractFunction("getLengths()"), encodeArgs(0, 0));
+ ABI_CHECK(callContractFunction("setLengths(uint256,uint256)", 48, 49), bytes());
+ ABI_CHECK(callContractFunction("getLengths()"), encodeArgs(48, 49));
+ ABI_CHECK(callContractFunction("setIDStatic(uint256)", 11), bytes());
+ ABI_CHECK(callContractFunction("getID(uint256)", 2), encodeArgs(11));
+ ABI_CHECK(callContractFunction("setID(uint256,uint256)", 7, 8), bytes());
+ ABI_CHECK(callContractFunction("getID(uint256)", 7), encodeArgs(8));
+ ABI_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 7, 8, 9), bytes());
+ ABI_CHECK(callContractFunction("setData(uint256,uint256,uint256)", 8, 10, 11), bytes());
+ ABI_CHECK(callContractFunction("getData(uint256)", 7), encodeArgs(8, 9));
+ ABI_CHECK(callContractFunction("getData(uint256)", 8), encodeArgs(10, 11));
}
BOOST_AUTO_TEST_CASE(fixed_out_of_bounds_array_access)
@@ -4098,14 +4141,14 @@ BOOST_AUTO_TEST_CASE(fixed_out_of_bounds_array_access)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("length()") == encodeArgs(4));
- BOOST_CHECK(callContractFunction("set(uint256,uint256)", 3, 4) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("set(uint256,uint256)", 4, 5) == bytes());
- BOOST_CHECK(callContractFunction("set(uint256,uint256)", 400, 5) == bytes());
- BOOST_CHECK(callContractFunction("get(uint256)", 3) == encodeArgs(4));
- BOOST_CHECK(callContractFunction("get(uint256)", 4) == bytes());
- BOOST_CHECK(callContractFunction("get(uint256)", 400) == bytes());
- BOOST_CHECK(callContractFunction("length()") == encodeArgs(4));
+ ABI_CHECK(callContractFunction("length()"), encodeArgs(4));
+ ABI_CHECK(callContractFunction("set(uint256,uint256)", 3, 4), encodeArgs(true));
+ ABI_CHECK(callContractFunction("set(uint256,uint256)", 4, 5), bytes());
+ ABI_CHECK(callContractFunction("set(uint256,uint256)", 400, 5), bytes());
+ ABI_CHECK(callContractFunction("get(uint256)", 3), encodeArgs(4));
+ ABI_CHECK(callContractFunction("get(uint256)", 4), bytes());
+ ABI_CHECK(callContractFunction("get(uint256)", 400), bytes());
+ ABI_CHECK(callContractFunction("length()"), encodeArgs(4));
}
BOOST_AUTO_TEST_CASE(dynamic_out_of_bounds_array_access)
@@ -4120,15 +4163,15 @@ BOOST_AUTO_TEST_CASE(dynamic_out_of_bounds_array_access)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("length()") == encodeArgs(0));
- BOOST_CHECK(callContractFunction("get(uint256)", 3) == bytes());
- BOOST_CHECK(callContractFunction("enlarge(uint256)", 4) == encodeArgs(4));
- BOOST_CHECK(callContractFunction("length()") == encodeArgs(4));
- BOOST_CHECK(callContractFunction("set(uint256,uint256)", 3, 4) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("get(uint256)", 3) == encodeArgs(4));
- BOOST_CHECK(callContractFunction("length()") == encodeArgs(4));
- BOOST_CHECK(callContractFunction("set(uint256,uint256)", 4, 8) == bytes());
- BOOST_CHECK(callContractFunction("length()") == encodeArgs(4));
+ ABI_CHECK(callContractFunction("length()"), encodeArgs(0));
+ ABI_CHECK(callContractFunction("get(uint256)", 3), bytes());
+ ABI_CHECK(callContractFunction("enlarge(uint256)", 4), encodeArgs(4));
+ ABI_CHECK(callContractFunction("length()"), encodeArgs(4));
+ ABI_CHECK(callContractFunction("set(uint256,uint256)", 3, 4), encodeArgs(true));
+ ABI_CHECK(callContractFunction("get(uint256)", 3), encodeArgs(4));
+ ABI_CHECK(callContractFunction("length()"), encodeArgs(4));
+ ABI_CHECK(callContractFunction("set(uint256,uint256)", 4, 8), bytes());
+ ABI_CHECK(callContractFunction("length()"), encodeArgs(4));
}
BOOST_AUTO_TEST_CASE(fixed_array_cleanup)
@@ -4146,9 +4189,9 @@ BOOST_AUTO_TEST_CASE(fixed_array_cleanup)
)";
compileAndRun(sourceCode);
BOOST_CHECK(storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("fill()") == bytes());
+ ABI_CHECK(callContractFunction("fill()"), bytes());
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("clear()") == bytes());
+ ABI_CHECK(callContractFunction("clear()"), bytes());
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -4167,9 +4210,9 @@ BOOST_AUTO_TEST_CASE(short_fixed_array_cleanup)
)";
compileAndRun(sourceCode);
BOOST_CHECK(storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("fill()") == bytes());
+ ABI_CHECK(callContractFunction("fill()"), bytes());
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("clear()") == bytes());
+ ABI_CHECK(callContractFunction("clear()"), bytes());
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -4189,11 +4232,11 @@ BOOST_AUTO_TEST_CASE(dynamic_array_cleanup)
)";
compileAndRun(sourceCode);
BOOST_CHECK(storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("fill()") == bytes());
+ ABI_CHECK(callContractFunction("fill()"), bytes());
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("halfClear()") == bytes());
+ ABI_CHECK(callContractFunction("halfClear()"), bytes());
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("fullClear()") == bytes());
+ ABI_CHECK(callContractFunction("fullClear()"), bytes());
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -4215,9 +4258,9 @@ BOOST_AUTO_TEST_CASE(dynamic_multi_array_cleanup)
)";
compileAndRun(sourceCode);
BOOST_CHECK(storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("fill()") == encodeArgs(8));
+ ABI_CHECK(callContractFunction("fill()"), encodeArgs(8));
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("clear()") == bytes());
+ ABI_CHECK(callContractFunction("clear()"), bytes());
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -4237,12 +4280,12 @@ BOOST_AUTO_TEST_CASE(array_copy_storage_storage_dyn_dyn)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("setData1(uint256,uint256,uint256)", 10, 5, 4) == bytes());
- BOOST_CHECK(callContractFunction("copyStorageStorage()") == bytes());
- BOOST_CHECK(callContractFunction("getData2(uint256)", 5) == encodeArgs(10, 4));
- BOOST_CHECK(callContractFunction("setData1(uint256,uint256,uint256)", 0, 0, 0) == bytes());
- BOOST_CHECK(callContractFunction("copyStorageStorage()") == bytes());
- BOOST_CHECK(callContractFunction("getData2(uint256)", 0) == encodeArgs(0, 0));
+ ABI_CHECK(callContractFunction("setData1(uint256,uint256,uint256)", 10, 5, 4), bytes());
+ ABI_CHECK(callContractFunction("copyStorageStorage()"), bytes());
+ ABI_CHECK(callContractFunction("getData2(uint256)", 5), encodeArgs(10, 4));
+ ABI_CHECK(callContractFunction("setData1(uint256,uint256,uint256)", 0, 0, 0), bytes());
+ ABI_CHECK(callContractFunction("copyStorageStorage()"), bytes());
+ ABI_CHECK(callContractFunction("getData2(uint256)", 0), encodeArgs(0, 0));
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -4264,7 +4307,7 @@ BOOST_AUTO_TEST_CASE(array_copy_storage_storage_static_static)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(8, 0));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(8, 0));
}
BOOST_AUTO_TEST_CASE(array_copy_storage_storage_static_dynamic)
@@ -4282,7 +4325,7 @@ BOOST_AUTO_TEST_CASE(array_copy_storage_storage_static_dynamic)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(9, 4));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(9, 4));
}
BOOST_AUTO_TEST_CASE(array_copy_different_packing)
@@ -4305,7 +4348,7 @@ BOOST_AUTO_TEST_CASE(array_copy_different_packing)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(
asString(fromHex("0000000000000001")),
asString(fromHex("0000000000000002")),
asString(fromHex("0000000000000003")),
@@ -4334,7 +4377,7 @@ BOOST_AUTO_TEST_CASE(array_copy_target_simple)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(
asString(fromHex("0000000000000001")),
asString(fromHex("0000000000000002")),
asString(fromHex("0000000000000003")),
@@ -4366,7 +4409,7 @@ BOOST_AUTO_TEST_CASE(array_copy_target_leftover)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(
u256("0xffffffff"),
asString(fromHex("0000000000000000""000000000a000900""0800070006000500""0400030002000100")),
asString(fromHex("0000000000000000""0000000000000000""0000000000000000""0000000000000000"))
@@ -4396,7 +4439,7 @@ BOOST_AUTO_TEST_CASE(array_copy_target_leftover2)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(
asString(fromHex("0000000000000004")),
asString(fromHex("0000000000000000")),
asString(fromHex("0000000000000000"))
@@ -4423,7 +4466,7 @@ BOOST_AUTO_TEST_CASE(array_copy_storage_storage_struct)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(4, 5));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(4, 5));
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -4466,10 +4509,10 @@ BOOST_AUTO_TEST_CASE(array_copy_storage_abi)
bytes valueSequence;
for (size_t i = 0; i < 101; ++i)
valueSequence += toBigEndian(u256(i));
- BOOST_CHECK(callContractFunction("test1()") == encodeArgs(0x20, 101) + valueSequence);
- BOOST_CHECK(callContractFunction("test2()") == encodeArgs(0x20, 101) + valueSequence);
- BOOST_CHECK(callContractFunction("test3()") == encodeArgs(0x20, 101) + valueSequence);
- BOOST_CHECK(callContractFunction("test4()") ==
+ ABI_CHECK(callContractFunction("test1()"), encodeArgs(0x20, 101) + valueSequence);
+ ABI_CHECK(callContractFunction("test2()"), encodeArgs(0x20, 101) + valueSequence);
+ ABI_CHECK(callContractFunction("test3()"), encodeArgs(0x20, 101) + valueSequence);
+ ABI_CHECK(callContractFunction("test4()"),
encodeArgs(0x20, 5, 0xa0, 0xa0 + 102 * 32 * 1, 0xa0 + 102 * 32 * 2, 0xa0 + 102 * 32 * 3, 0xa0 + 102 * 32 * 4) +
encodeArgs(101) + valueSequence +
encodeArgs(101) + valueSequence +
@@ -4501,7 +4544,7 @@ BOOST_AUTO_TEST_CASE(array_copy_storage_abi_signed)
)";
compileAndRun(sourceCode);
bytes valueSequence;
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(0x20, 8,
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(0x20, 8,
u256(-1),
u256(-1),
u256(8),
@@ -4529,7 +4572,7 @@ BOOST_AUTO_TEST_CASE(array_push)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(5, 4, 3, 3));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(5, 4, 3, 3));
}
BOOST_AUTO_TEST_CASE(byte_array_push)
@@ -4549,7 +4592,7 @@ BOOST_AUTO_TEST_CASE(byte_array_push)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(false));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(false));
}
BOOST_AUTO_TEST_CASE(external_array_args)
@@ -4573,7 +4616,7 @@ BOOST_AUTO_TEST_CASE(external_array_args)
3, // b.length
11, 12, 13 // b
);
- BOOST_CHECK(callContractFunction("test(uint256[8],uint256[],uint256[5],uint256,uint256,uint256)", params) == encodeArgs(1, 12, 23));
+ ABI_CHECK(callContractFunction("test(uint256[8],uint256[],uint256[5],uint256,uint256,uint256)", params), encodeArgs(1, 12, 23));
}
BOOST_AUTO_TEST_CASE(bytes_index_access)
@@ -4607,9 +4650,9 @@ BOOST_AUTO_TEST_CASE(bytes_index_access)
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33};
- BOOST_CHECK(callContractFunction("direct(bytes,uint256)", 64, 33, u256(array.length()), array) == encodeArgs(33));
- BOOST_CHECK(callContractFunction("storageCopyRead(bytes,uint256)", 64, 33, u256(array.length()), array) == encodeArgs(33));
- BOOST_CHECK(callContractFunction("storageWrite()") == encodeArgs(0x193));
+ ABI_CHECK(callContractFunction("direct(bytes,uint256)", 64, 33, u256(array.length()), array), encodeArgs(33));
+ ABI_CHECK(callContractFunction("storageCopyRead(bytes,uint256)", 64, 33, u256(array.length()), array), encodeArgs(33));
+ ABI_CHECK(callContractFunction("storageWrite()"), encodeArgs(0x193));
}
BOOST_AUTO_TEST_CASE(bytes_delete_element)
@@ -4629,7 +4672,7 @@ BOOST_AUTO_TEST_CASE(bytes_delete_element)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test1()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("test1()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(array_copy_calldata_storage)
@@ -4657,7 +4700,7 @@ BOOST_AUTO_TEST_CASE(array_copy_calldata_storage)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("store(uint256[9],uint8[3][])", encodeArgs(
+ ABI_CHECK(callContractFunction("store(uint256[9],uint8[3][])", encodeArgs(
21, 22, 23, 24, 25, 26, 27, 28, 29, // a
u256(32 * (9 + 1)),
4, // size of b
@@ -4665,8 +4708,8 @@ BOOST_AUTO_TEST_CASE(array_copy_calldata_storage)
11, 12, 13, // b[1]
21, 22, 23, // b[2]
31, 32, 33 // b[3]
- )) == encodeArgs(32));
- BOOST_CHECK(callContractFunction("retrieve()") == encodeArgs(
+ )), encodeArgs(32));
+ ABI_CHECK(callContractFunction("retrieve()"), encodeArgs(
9, 28, 9, 28,
4, 3, 32));
}
@@ -4687,12 +4730,12 @@ BOOST_AUTO_TEST_CASE(array_copy_nested_array)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test(uint256[2][])", encodeArgs(
+ ABI_CHECK(callContractFunction("test(uint256[2][])", encodeArgs(
32, 3,
7, 8,
9, 10,
11, 12
- )) == encodeArgs(10));
+ )), encodeArgs(10));
}
BOOST_AUTO_TEST_CASE(array_copy_including_mapping)
@@ -4725,10 +4768,10 @@ BOOST_AUTO_TEST_CASE(array_copy_including_mapping)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(0x02000200));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(0x02000200));
// storage is not empty because we cannot delete the mappings
BOOST_CHECK(!storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("clear()") == encodeArgs(7));
+ ABI_CHECK(callContractFunction("clear()"), encodeArgs(7));
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -4754,14 +4797,14 @@ BOOST_AUTO_TEST_CASE(swap_in_storage_overwrite)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(0), u256(0)));
- BOOST_CHECK(callContractFunction("y()") == encodeArgs(u256(0), u256(0)));
- BOOST_CHECK(callContractFunction("set()") == encodeArgs());
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(1), u256(2)));
- BOOST_CHECK(callContractFunction("y()") == encodeArgs(u256(3), u256(4)));
- BOOST_CHECK(callContractFunction("swap()") == encodeArgs());
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(1), u256(2)));
- BOOST_CHECK(callContractFunction("y()") == encodeArgs(u256(1), u256(2)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(0), u256(0)));
+ ABI_CHECK(callContractFunction("y()"), encodeArgs(u256(0), u256(0)));
+ ABI_CHECK(callContractFunction("set()"), encodeArgs());
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(1), u256(2)));
+ ABI_CHECK(callContractFunction("y()"), encodeArgs(u256(3), u256(4)));
+ ABI_CHECK(callContractFunction("swap()"), encodeArgs());
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(1), u256(2)));
+ ABI_CHECK(callContractFunction("y()"), encodeArgs(u256(1), u256(2)));
}
BOOST_AUTO_TEST_CASE(pass_dynamic_arguments_to_the_base)
@@ -4781,7 +4824,7 @@ BOOST_AUTO_TEST_CASE(pass_dynamic_arguments_to_the_base)
contract Final is Derived(4) {
})";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("m_i()") == encodeArgs(4));
+ ABI_CHECK(callContractFunction("m_i()"), encodeArgs(4));
}
BOOST_AUTO_TEST_CASE(pass_dynamic_arguments_to_the_base_base)
@@ -4804,7 +4847,7 @@ BOOST_AUTO_TEST_CASE(pass_dynamic_arguments_to_the_base_base)
contract Final is Derived(4) {
})";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("m_i()") == encodeArgs(4));
+ ABI_CHECK(callContractFunction("m_i()"), encodeArgs(4));
}
BOOST_AUTO_TEST_CASE(pass_dynamic_arguments_to_the_base_base_with_gap)
@@ -4824,7 +4867,7 @@ BOOST_AUTO_TEST_CASE(pass_dynamic_arguments_to_the_base_base_with_gap)
contract Final is Derived(4) {
})";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("m_i()") == encodeArgs(4));
+ ABI_CHECK(callContractFunction("m_i()"), encodeArgs(4));
}
BOOST_AUTO_TEST_CASE(simple_constant_variables_test)
@@ -4835,7 +4878,7 @@ BOOST_AUTO_TEST_CASE(simple_constant_variables_test)
uint constant x = 56;
})";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("getX()") == encodeArgs(56));
+ ABI_CHECK(callContractFunction("getX()"), encodeArgs(56));
}
BOOST_AUTO_TEST_CASE(constant_variables)
@@ -4859,7 +4902,7 @@ BOOST_AUTO_TEST_CASE(assignment_to_const_var_involving_expression)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(0x123 + 0x456 + 1));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(0x123 + 0x456 + 1));
}
BOOST_AUTO_TEST_CASE(assignment_to_const_var_involving_keccak)
@@ -4871,7 +4914,7 @@ BOOST_AUTO_TEST_CASE(assignment_to_const_var_involving_keccak)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(dev::keccak256("abc")));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(dev::keccak256("abc")));
}
// Disabled until https://github.com/ethereum/solidity/issues/715 is implemented
@@ -4885,7 +4928,7 @@ BOOST_AUTO_TEST_CASE(assignment_to_const_var_involving_keccak)
// }
// )";
// compileAndRun(sourceCode);
-// BOOST_CHECK(callContractFunction("f()") == encodeArgs(1 + 2 + 3));
+// ABI_CHECK(callContractFunction("f()"), encodeArgs(1 + 2 + 3));
//}
// Disabled until https://github.com/ethereum/solidity/issues/715 is implemented
@@ -4899,7 +4942,7 @@ BOOST_AUTO_TEST_CASE(assignment_to_const_var_involving_keccak)
// }
// )";
// compileAndRun(sourceCode);
-// BOOST_CHECK(callContractFunction("f()") == encodeArgs(5));
+// ABI_CHECK(callContractFunction("f()"), encodeArgs(5));
//}
BOOST_AUTO_TEST_CASE(packed_storage_structs_uint)
@@ -4929,7 +4972,7 @@ BOOST_AUTO_TEST_CASE(packed_storage_structs_uint)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(packed_storage_structs_enum)
@@ -4961,7 +5004,7 @@ BOOST_AUTO_TEST_CASE(packed_storage_structs_enum)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(packed_storage_structs_bytes)
@@ -4991,7 +5034,7 @@ BOOST_AUTO_TEST_CASE(packed_storage_structs_bytes)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(packed_storage_structs_delete)
@@ -5021,7 +5064,7 @@ BOOST_AUTO_TEST_CASE(packed_storage_structs_delete)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(1));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(1));
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -5035,7 +5078,7 @@ BOOST_AUTO_TEST_CASE(overloaded_function_call_resolve_to_first)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(3));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(3));
}
BOOST_AUTO_TEST_CASE(overloaded_function_call_resolve_to_second)
@@ -5048,7 +5091,7 @@ BOOST_AUTO_TEST_CASE(overloaded_function_call_resolve_to_second)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(10));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(10));
}
BOOST_AUTO_TEST_CASE(overloaded_function_call_with_if_else)
@@ -5066,8 +5109,8 @@ BOOST_AUTO_TEST_CASE(overloaded_function_call_with_if_else)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("g(bool)", true) == encodeArgs(3));
- BOOST_CHECK(callContractFunction("g(bool)", false) == encodeArgs(10));
+ ABI_CHECK(callContractFunction("g(bool)", true), encodeArgs(3));
+ ABI_CHECK(callContractFunction("g(bool)", false), encodeArgs(10));
}
BOOST_AUTO_TEST_CASE(derived_overload_base_function_direct)
@@ -5080,7 +5123,7 @@ BOOST_AUTO_TEST_CASE(derived_overload_base_function_direct)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(2));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(derived_overload_base_function_indirect)
@@ -5094,8 +5137,8 @@ BOOST_AUTO_TEST_CASE(derived_overload_base_function_indirect)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(10));
- BOOST_CHECK(callContractFunction("h()") == encodeArgs(2));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(10));
+ ABI_CHECK(callContractFunction("h()"), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(super_overload)
@@ -5109,8 +5152,8 @@ BOOST_AUTO_TEST_CASE(super_overload)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(10));
- BOOST_CHECK(callContractFunction("h()") == encodeArgs(2));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(10));
+ ABI_CHECK(callContractFunction("h()"), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(bool_conversion)
@@ -5129,16 +5172,16 @@ BOOST_AUTO_TEST_CASE(bool_conversion)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(bool)", 0) == encodeArgs(0));
- BOOST_CHECK(callContractFunction("f(bool)", 1) == encodeArgs(1));
- BOOST_CHECK(callContractFunction("f(bool)", 2) == encodeArgs(1));
- BOOST_CHECK(callContractFunction("f(bool)", 3) == encodeArgs(1));
- BOOST_CHECK(callContractFunction("f(bool)", 255) == encodeArgs(1));
- BOOST_CHECK(callContractFunction("g(bool)", 0) == encodeArgs(0));
- BOOST_CHECK(callContractFunction("g(bool)", 1) == encodeArgs(1));
- BOOST_CHECK(callContractFunction("g(bool)", 2) == encodeArgs(1));
- BOOST_CHECK(callContractFunction("g(bool)", 3) == encodeArgs(1));
- BOOST_CHECK(callContractFunction("g(bool)", 255) == encodeArgs(1));
+ ABI_CHECK(callContractFunction("f(bool)", 0), encodeArgs(0));
+ ABI_CHECK(callContractFunction("f(bool)", 1), encodeArgs(1));
+ ABI_CHECK(callContractFunction("f(bool)", 2), encodeArgs(1));
+ ABI_CHECK(callContractFunction("f(bool)", 3), encodeArgs(1));
+ ABI_CHECK(callContractFunction("f(bool)", 255), encodeArgs(1));
+ ABI_CHECK(callContractFunction("g(bool)", 0), encodeArgs(0));
+ ABI_CHECK(callContractFunction("g(bool)", 1), encodeArgs(1));
+ ABI_CHECK(callContractFunction("g(bool)", 2), encodeArgs(1));
+ ABI_CHECK(callContractFunction("g(bool)", 3), encodeArgs(1));
+ ABI_CHECK(callContractFunction("g(bool)", 255), encodeArgs(1));
}
BOOST_AUTO_TEST_CASE(packed_storage_signed)
@@ -5161,7 +5204,7 @@ BOOST_AUTO_TEST_CASE(packed_storage_signed)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK( callContractFunction("test()") == encodeArgs(u256(-2), u256(4), u256(-112), u256(0)));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(u256(-2), u256(4), u256(-112), u256(0)));
}
BOOST_AUTO_TEST_CASE(external_types_in_calls)
@@ -5179,8 +5222,8 @@ BOOST_AUTO_TEST_CASE(external_types_in_calls)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(u256(9), u256(7)));
- BOOST_CHECK(callContractFunction("t2()") == encodeArgs(u256(9)));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(u256(9), u256(7)));
+ ABI_CHECK(callContractFunction("t2()"), encodeArgs(u256(9)));
}
BOOST_AUTO_TEST_CASE(invalid_enum_compared)
@@ -5210,10 +5253,10 @@ BOOST_AUTO_TEST_CASE(invalid_enum_compared)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test_eq_ok()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("test_eq_ok()"), encodeArgs(u256(1)));
// both should throw
- BOOST_CHECK(callContractFunction("test_eq()") == encodeArgs());
- BOOST_CHECK(callContractFunction("test_neq()") == encodeArgs());
+ ABI_CHECK(callContractFunction("test_eq()"), encodeArgs());
+ ABI_CHECK(callContractFunction("test_neq()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(invalid_enum_logged)
@@ -5239,7 +5282,7 @@ BOOST_AUTO_TEST_CASE(invalid_enum_logged)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test_log_ok()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("test_log_ok()"), encodeArgs(u256(1)));
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 1);
@@ -5247,7 +5290,7 @@ BOOST_AUTO_TEST_CASE(invalid_enum_logged)
BOOST_CHECK_EQUAL(h256(m_logs[0].data), h256(u256(0)));
// should throw
- BOOST_CHECK(callContractFunction("test_log()") == encodeArgs());
+ ABI_CHECK(callContractFunction("test_log()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(invalid_enum_stored)
@@ -5272,11 +5315,11 @@ BOOST_AUTO_TEST_CASE(invalid_enum_stored)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test_store_ok()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("test_store_ok()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(0)));
// should throw
- BOOST_CHECK(callContractFunction("test_store()") == encodeArgs());
+ ABI_CHECK(callContractFunction("test_store()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(invalid_enum_as_external_ret)
@@ -5308,9 +5351,9 @@ BOOST_AUTO_TEST_CASE(invalid_enum_as_external_ret)
)";
compileAndRun(sourceCode, 0, "C");
// both should throw
- BOOST_CHECK(callContractFunction("test_return()") == encodeArgs());
- BOOST_CHECK(callContractFunction("test_inline_assignment()") == encodeArgs());
- BOOST_CHECK(callContractFunction("test_assignment()") == encodeArgs());
+ ABI_CHECK(callContractFunction("test_return()"), encodeArgs());
+ ABI_CHECK(callContractFunction("test_inline_assignment()"), encodeArgs());
+ ABI_CHECK(callContractFunction("test_assignment()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(invalid_enum_as_external_arg)
@@ -5336,7 +5379,7 @@ BOOST_AUTO_TEST_CASE(invalid_enum_as_external_arg)
)";
compileAndRun(sourceCode, 0, "C");
// should throw
- BOOST_CHECK(callContractFunction("test()") == encodeArgs());
+ ABI_CHECK(callContractFunction("test()"), encodeArgs());
}
@@ -5361,12 +5404,12 @@ BOOST_AUTO_TEST_CASE(proper_order_of_overwriting_of_attributes)
}
)";
compileAndRun(sourceCode, 0, "init_fix");
- BOOST_CHECK(callContractFunction("isOk()") == encodeArgs(true));
- BOOST_CHECK(callContractFunction("ok()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("isOk()"), encodeArgs(true));
+ ABI_CHECK(callContractFunction("ok()"), encodeArgs(true));
compileAndRun(sourceCode, 0, "fix_init");
- BOOST_CHECK(callContractFunction("isOk()") == encodeArgs(false));
- BOOST_CHECK(callContractFunction("ok()") == encodeArgs(false));
+ ABI_CHECK(callContractFunction("isOk()"), encodeArgs(false));
+ ABI_CHECK(callContractFunction("ok()"), encodeArgs(false));
}
BOOST_AUTO_TEST_CASE(struct_assign_reference_to_struct)
@@ -5400,7 +5443,7 @@ BOOST_AUTO_TEST_CASE(struct_assign_reference_to_struct)
}
)";
compileAndRun(sourceCode, 0, "test");
- BOOST_CHECK(callContractFunction("assign()") == encodeArgs(2, 2, 3, 3));
+ ABI_CHECK(callContractFunction("assign()"), encodeArgs(2, 2, 3, 3));
}
BOOST_AUTO_TEST_CASE(struct_delete_member)
@@ -5426,7 +5469,7 @@ BOOST_AUTO_TEST_CASE(struct_delete_member)
}
)";
compileAndRun(sourceCode, 0, "test");
- BOOST_CHECK(callContractFunction("deleteMember()") == encodeArgs(0));
+ ABI_CHECK(callContractFunction("deleteMember()"), encodeArgs(0));
}
BOOST_AUTO_TEST_CASE(struct_delete_struct_in_mapping)
@@ -5451,7 +5494,7 @@ BOOST_AUTO_TEST_CASE(struct_delete_struct_in_mapping)
}
)";
compileAndRun(sourceCode, 0, "test");
- BOOST_CHECK(callContractFunction("deleteIt()") == encodeArgs(0));
+ ABI_CHECK(callContractFunction("deleteIt()"), encodeArgs(0));
}
BOOST_AUTO_TEST_CASE(evm_exceptions_out_of_band_access)
@@ -5473,9 +5516,9 @@ BOOST_AUTO_TEST_CASE(evm_exceptions_out_of_band_access)
}
)";
compileAndRun(sourceCode, 0, "A");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(false));
- BOOST_CHECK(callContractFunction("testIt()") == encodeArgs());
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(false));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(false));
+ ABI_CHECK(callContractFunction("testIt()"), encodeArgs());
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(false));
}
BOOST_AUTO_TEST_CASE(evm_exceptions_in_constructor_call_fail)
@@ -5498,8 +5541,8 @@ BOOST_AUTO_TEST_CASE(evm_exceptions_in_constructor_call_fail)
)";
compileAndRun(sourceCode, 0, "B");
- BOOST_CHECK(callContractFunction("testIt()") == encodeArgs());
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(2));
+ ABI_CHECK(callContractFunction("testIt()"), encodeArgs());
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(evm_exceptions_in_constructor_out_of_baund)
@@ -5516,7 +5559,7 @@ BOOST_AUTO_TEST_CASE(evm_exceptions_in_constructor_out_of_baund)
}
}
)";
- BOOST_CHECK(compileAndRunWithoutCheck(sourceCode, 0, "A").empty());
+ ABI_CHECK(compileAndRunWithoutCheck(sourceCode, 0, "A"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(positive_integers_to_signed)
@@ -5529,9 +5572,9 @@ BOOST_AUTO_TEST_CASE(positive_integers_to_signed)
}
)";
compileAndRun(sourceCode, 0, "test");
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(2));
- BOOST_CHECK(callContractFunction("y()") == encodeArgs(127));
- BOOST_CHECK(callContractFunction("q()") == encodeArgs(250));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(2));
+ ABI_CHECK(callContractFunction("y()"), encodeArgs(127));
+ ABI_CHECK(callContractFunction("q()"), encodeArgs(250));
}
BOOST_AUTO_TEST_CASE(failing_send)
@@ -5624,9 +5667,9 @@ BOOST_AUTO_TEST_CASE(return_string)
string s("Julia");
bytes args = encodeArgs(u256(0x20), u256(s.length()), s);
BOOST_REQUIRE(callContractFunction("set(string)", asString(args)) == encodeArgs());
- BOOST_CHECK(callContractFunction("get1()") == args);
- BOOST_CHECK(callContractFunction("get2()") == args);
- BOOST_CHECK(callContractFunction("s()") == args);
+ ABI_CHECK(callContractFunction("get1()"), args);
+ ABI_CHECK(callContractFunction("get2()"), args);
+ ABI_CHECK(callContractFunction("s()"), args);
}
BOOST_AUTO_TEST_CASE(return_multiple_strings_of_various_sizes)
@@ -5672,9 +5715,9 @@ BOOST_AUTO_TEST_CASE(return_multiple_strings_of_various_sizes)
encodeArgs(u256(l1))
);
bytes result = encodeArgs(u256(0x40), u256(0x40 + dyn1.size())) + dyn1 + dyn2;
- BOOST_CHECK(callContractFunction("get()") == result);
- BOOST_CHECK(callContractFunction("s1()") == encodeArgs(0x20) + dyn1);
- BOOST_CHECK(callContractFunction("s2()") == encodeArgs(0x20) + dyn2);
+ ABI_CHECK(callContractFunction("get()"), result);
+ ABI_CHECK(callContractFunction("s1()"), encodeArgs(0x20) + dyn1);
+ ABI_CHECK(callContractFunction("s2()"), encodeArgs(0x20) + dyn2);
}
}
@@ -5740,16 +5783,16 @@ BOOST_AUTO_TEST_CASE(bytes_in_function_calls)
callContractFunction("setIndirectFromMemory(string,uint256,string)", asString(args1)) ==
encodeArgs(u256(l1))
);
- BOOST_CHECK(callContractFunction("s1()") == encodeArgs(0x20) + dyn1);
- BOOST_CHECK(callContractFunction("s2()") == encodeArgs(0x20) + dyn2);
+ ABI_CHECK(callContractFunction("s1()"), encodeArgs(0x20) + dyn1);
+ ABI_CHECK(callContractFunction("s2()"), encodeArgs(0x20) + dyn2);
// swapped
bytes args2 = encodeArgs(u256(0x60), u256(l1), u256(0x60 + dyn2.size())) + dyn2 + dyn1;
BOOST_REQUIRE(
callContractFunction("setIndirectFromCalldata(string,uint256,string)", asString(args2)) ==
encodeArgs(u256(l1))
);
- BOOST_CHECK(callContractFunction("s1()") == encodeArgs(0x20) + dyn2);
- BOOST_CHECK(callContractFunction("s2()") == encodeArgs(0x20) + dyn1);
+ ABI_CHECK(callContractFunction("s1()"), encodeArgs(0x20) + dyn2);
+ ABI_CHECK(callContractFunction("s2()"), encodeArgs(0x20) + dyn1);
}
}
@@ -5946,10 +5989,10 @@ BOOST_AUTO_TEST_CASE(arrays_from_and_to_storage)
callContractFunction("set(uint24[])", u256(0x20), u256(data.size()), data) ==
encodeArgs(u256(data.size()))
);
- BOOST_CHECK(callContractFunction("data(uint256)", u256(7)) == encodeArgs(u256(8)));
- BOOST_CHECK(callContractFunction("data(uint256)", u256(15)) == encodeArgs(u256(16)));
- BOOST_CHECK(callContractFunction("data(uint256)", u256(18)) == encodeArgs());
- BOOST_CHECK(callContractFunction("get()") == encodeArgs(u256(0x20), u256(data.size()), data));
+ ABI_CHECK(callContractFunction("data(uint256)", u256(7)), encodeArgs(u256(8)));
+ ABI_CHECK(callContractFunction("data(uint256)", u256(15)), encodeArgs(u256(16)));
+ ABI_CHECK(callContractFunction("data(uint256)", u256(18)), encodeArgs());
+ ABI_CHECK(callContractFunction("get()"), encodeArgs(u256(0x20), u256(data.size()), data));
}
BOOST_AUTO_TEST_CASE(arrays_complex_from_and_to_storage)
@@ -5973,10 +6016,10 @@ BOOST_AUTO_TEST_CASE(arrays_complex_from_and_to_storage)
callContractFunction("set(uint24[3][])", u256(0x20), u256(data.size() / 3), data) ==
encodeArgs(u256(data.size() / 3))
);
- BOOST_CHECK(callContractFunction("data(uint256,uint256)", u256(2), u256(2)) == encodeArgs(u256(9)));
- BOOST_CHECK(callContractFunction("data(uint256,uint256)", u256(5), u256(1)) == encodeArgs(u256(17)));
- BOOST_CHECK(callContractFunction("data(uint256,uint256)", u256(6), u256(0)) == encodeArgs());
- BOOST_CHECK(callContractFunction("get()") == encodeArgs(u256(0x20), u256(data.size() / 3), data));
+ ABI_CHECK(callContractFunction("data(uint256,uint256)", u256(2), u256(2)), encodeArgs(u256(9)));
+ ABI_CHECK(callContractFunction("data(uint256,uint256)", u256(5), u256(1)), encodeArgs(u256(17)));
+ ABI_CHECK(callContractFunction("data(uint256,uint256)", u256(6), u256(0)), encodeArgs());
+ ABI_CHECK(callContractFunction("get()"), encodeArgs(u256(0x20), u256(data.size() / 3), data));
}
BOOST_AUTO_TEST_CASE(arrays_complex_memory_index_access)
@@ -6062,19 +6105,19 @@ BOOST_AUTO_TEST_CASE(storage_array_ref)
BOOST_REQUIRE(callContractFunction("find(uint256)", u256(7)) == encodeArgs(u256(-1)));
BOOST_REQUIRE(callContractFunction("add(uint256)", u256(7)) == encodeArgs());
BOOST_REQUIRE(callContractFunction("find(uint256)", u256(7)) == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("add(uint256)", u256(11)) == encodeArgs());
- BOOST_CHECK(callContractFunction("add(uint256)", u256(17)) == encodeArgs());
- BOOST_CHECK(callContractFunction("add(uint256)", u256(27)) == encodeArgs());
- BOOST_CHECK(callContractFunction("add(uint256)", u256(31)) == encodeArgs());
- BOOST_CHECK(callContractFunction("add(uint256)", u256(32)) == encodeArgs());
- BOOST_CHECK(callContractFunction("add(uint256)", u256(66)) == encodeArgs());
- BOOST_CHECK(callContractFunction("add(uint256)", u256(177)) == encodeArgs());
- BOOST_CHECK(callContractFunction("find(uint256)", u256(7)) == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("find(uint256)", u256(27)) == encodeArgs(u256(3)));
- BOOST_CHECK(callContractFunction("find(uint256)", u256(32)) == encodeArgs(u256(5)));
- BOOST_CHECK(callContractFunction("find(uint256)", u256(176)) == encodeArgs(u256(-1)));
- BOOST_CHECK(callContractFunction("find(uint256)", u256(0)) == encodeArgs(u256(-1)));
- BOOST_CHECK(callContractFunction("find(uint256)", u256(400)) == encodeArgs(u256(-1)));
+ ABI_CHECK(callContractFunction("add(uint256)", u256(11)), encodeArgs());
+ ABI_CHECK(callContractFunction("add(uint256)", u256(17)), encodeArgs());
+ ABI_CHECK(callContractFunction("add(uint256)", u256(27)), encodeArgs());
+ ABI_CHECK(callContractFunction("add(uint256)", u256(31)), encodeArgs());
+ ABI_CHECK(callContractFunction("add(uint256)", u256(32)), encodeArgs());
+ ABI_CHECK(callContractFunction("add(uint256)", u256(66)), encodeArgs());
+ ABI_CHECK(callContractFunction("add(uint256)", u256(177)), encodeArgs());
+ ABI_CHECK(callContractFunction("find(uint256)", u256(7)), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("find(uint256)", u256(27)), encodeArgs(u256(3)));
+ ABI_CHECK(callContractFunction("find(uint256)", u256(32)), encodeArgs(u256(5)));
+ ABI_CHECK(callContractFunction("find(uint256)", u256(176)), encodeArgs(u256(-1)));
+ ABI_CHECK(callContractFunction("find(uint256)", u256(0)), encodeArgs(u256(-1)));
+ ABI_CHECK(callContractFunction("find(uint256)", u256(400)), encodeArgs(u256(-1)));
}
BOOST_AUTO_TEST_CASE(memory_types_initialisation)
@@ -6093,10 +6136,10 @@ BOOST_AUTO_TEST_CASE(memory_types_initialisation)
)";
compileAndRun(sourceCode, 0, "Test");
- BOOST_CHECK(callContractFunction("stat()") == encodeArgs(vector<u256>(5)));
- BOOST_CHECK(callContractFunction("dyn()") == encodeArgs(u256(0x20), u256(0)));
- BOOST_CHECK(callContractFunction("nested()") == encodeArgs(u256(0x20), u256(0)));
- BOOST_CHECK(callContractFunction("nestedStat()") == encodeArgs(vector<u256>(3 * 7)));
+ ABI_CHECK(callContractFunction("stat()"), encodeArgs(vector<u256>(5)));
+ ABI_CHECK(callContractFunction("dyn()"), encodeArgs(u256(0x20), u256(0)));
+ ABI_CHECK(callContractFunction("nested()"), encodeArgs(u256(0x20), u256(0)));
+ ABI_CHECK(callContractFunction("nestedStat()"), encodeArgs(vector<u256>(3 * 7)));
}
BOOST_AUTO_TEST_CASE(memory_arrays_delete)
@@ -6125,7 +6168,7 @@ BOOST_AUTO_TEST_CASE(memory_arrays_delete)
v = i * 0x10 + j;
data[i * 3 + j] = v;
}
- BOOST_CHECK(callContractFunction("del()") == encodeArgs(data));
+ ABI_CHECK(callContractFunction("del()"), encodeArgs(data));
}
BOOST_AUTO_TEST_CASE(memory_arrays_index_access_write)
@@ -6148,7 +6191,7 @@ BOOST_AUTO_TEST_CASE(memory_arrays_index_access_write)
vector<u256> data(3 * 4);
data[3 * 2 + 2] = 1;
data[3 * 3 + 2] = 7;
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(data));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(data));
}
BOOST_AUTO_TEST_CASE(memory_arrays_dynamic_index_access_write)
@@ -6172,7 +6215,7 @@ BOOST_AUTO_TEST_CASE(memory_arrays_dynamic_index_access_write)
vector<u256> data(3 * 4);
data[3 * 2 + 2] = 1;
data[3 * 3 + 2] = 7;
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0x20), u256(4), data));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0x20), u256(4), data));
}
BOOST_AUTO_TEST_CASE(memory_structs_read_write)
@@ -6215,9 +6258,9 @@ BOOST_AUTO_TEST_CASE(memory_structs_read_write)
)";
compileAndRun(sourceCode, 0, "Test");
- BOOST_CHECK(callContractFunction("testInit()") == encodeArgs(u256(0), u256(0), u256(0), u256(0), true));
- BOOST_CHECK(callContractFunction("testCopyRead()") == encodeArgs(u256(1), u256(2), u256(3), u256(4)));
- BOOST_CHECK(callContractFunction("testAssign()") == encodeArgs(u256(1), u256(2), u256(3), u256(4)));
+ ABI_CHECK(callContractFunction("testInit()"), encodeArgs(u256(0), u256(0), u256(0), u256(0), true));
+ ABI_CHECK(callContractFunction("testCopyRead()"), encodeArgs(u256(1), u256(2), u256(3), u256(4)));
+ ABI_CHECK(callContractFunction("testAssign()"), encodeArgs(u256(1), u256(2), u256(3), u256(4)));
}
BOOST_AUTO_TEST_CASE(memory_structs_as_function_args)
@@ -6245,7 +6288,7 @@ BOOST_AUTO_TEST_CASE(memory_structs_as_function_args)
)";
compileAndRun(sourceCode, 0, "Test");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(u256(1), u256(2), u256(3)));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(u256(1), u256(2), u256(3)));
}
BOOST_AUTO_TEST_CASE(memory_structs_nested)
@@ -6277,7 +6320,7 @@ BOOST_AUTO_TEST_CASE(memory_structs_nested)
)";
compileAndRun(sourceCode, 0, "Test");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(u256(1), u256(2), u256(3), u256(4)));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(u256(1), u256(2), u256(3), u256(4)));
}
BOOST_AUTO_TEST_CASE(memory_structs_nested_load)
@@ -6323,8 +6366,8 @@ BOOST_AUTO_TEST_CASE(memory_structs_nested_load)
compileAndRun(sourceCode, 0, "Test");
auto out = encodeArgs(u256(1), u256(2), u256(3), u256(4), u256(5), u256(6));
- BOOST_CHECK(callContractFunction("load()") == out);
- BOOST_CHECK(callContractFunction("store()") == out);
+ ABI_CHECK(callContractFunction("load()"), out);
+ ABI_CHECK(callContractFunction("store()"), out);
}
BOOST_AUTO_TEST_CASE(struct_constructor_nested)
@@ -6351,7 +6394,7 @@ BOOST_AUTO_TEST_CASE(struct_constructor_nested)
compileAndRun(sourceCode, 0, "C");
auto out = encodeArgs(u256(1), u256(0), u256(9), u256(0), u256(4), u256(5));
- BOOST_CHECK(callContractFunction("get()") == out);
+ ABI_CHECK(callContractFunction("get()"), out);
}
BOOST_AUTO_TEST_CASE(struct_named_constructor)
@@ -6367,7 +6410,7 @@ BOOST_AUTO_TEST_CASE(struct_named_constructor)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("s()") == encodeArgs(u256(1), true));
+ ABI_CHECK(callContractFunction("s()"), encodeArgs(u256(1), true));
}
BOOST_AUTO_TEST_CASE(literal_strings)
@@ -6393,11 +6436,11 @@ BOOST_AUTO_TEST_CASE(literal_strings)
string shortStr = "123";
string hello = "Hello, World!";
- BOOST_CHECK(callContractFunction("f()") == encodeDyn(hello));
- BOOST_CHECK(callContractFunction("long()") == encodeDyn(longStr));
- BOOST_CHECK(callContractFunction("medium()") == encodeDyn(medium));
- BOOST_CHECK(callContractFunction("short()") == encodeDyn(shortStr));
- BOOST_CHECK(callContractFunction("empty()") == encodeDyn(string()));
+ ABI_CHECK(callContractFunction("f()"), encodeDyn(hello));
+ ABI_CHECK(callContractFunction("long()"), encodeDyn(longStr));
+ ABI_CHECK(callContractFunction("medium()"), encodeDyn(medium));
+ ABI_CHECK(callContractFunction("short()"), encodeDyn(shortStr));
+ ABI_CHECK(callContractFunction("empty()"), encodeDyn(string()));
}
BOOST_AUTO_TEST_CASE(initialise_string_constant)
@@ -6412,8 +6455,8 @@ BOOST_AUTO_TEST_CASE(initialise_string_constant)
string longStr = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789001234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678900123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789001234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
string shortStr = "abcdef";
- BOOST_CHECK(callContractFunction("long()") == encodeDyn(longStr));
- BOOST_CHECK(callContractFunction("short()") == encodeDyn(shortStr));
+ ABI_CHECK(callContractFunction("long()"), encodeDyn(longStr));
+ ABI_CHECK(callContractFunction("short()"), encodeDyn(shortStr));
}
BOOST_AUTO_TEST_CASE(memory_structs_with_mappings)
@@ -6436,7 +6479,7 @@ BOOST_AUTO_TEST_CASE(memory_structs_with_mappings)
}
)";
compileAndRun(sourceCode, 0, "Test");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(string_bytes_conversion)
@@ -6454,14 +6497,14 @@ BOOST_AUTO_TEST_CASE(string_bytes_conversion)
}
)";
compileAndRun(sourceCode, 0, "Test");
- BOOST_CHECK(callContractFunction(
+ ABI_CHECK(callContractFunction(
"f(string,uint256)",
u256(0x40),
u256(2),
u256(6),
string("abcdef")
- ) == encodeArgs("c"));
- BOOST_CHECK(callContractFunction("l()") == encodeArgs(u256(6)));
+ ), encodeArgs("c"));
+ ABI_CHECK(callContractFunction("l()"), encodeArgs(u256(6)));
}
BOOST_AUTO_TEST_CASE(string_as_mapping_key)
@@ -6481,31 +6524,32 @@ BOOST_AUTO_TEST_CASE(string_as_mapping_key)
"1"
};
for (unsigned i = 0; i < strings.size(); i++)
- BOOST_CHECK(callContractFunction(
+ ABI_CHECK(callContractFunction(
"set(string,uint256)",
u256(0x40),
u256(7 + i),
u256(strings[i].size()),
strings[i]
- ) == encodeArgs());
+ ), encodeArgs());
for (unsigned i = 0; i < strings.size(); i++)
- BOOST_CHECK(callContractFunction(
+ ABI_CHECK(callContractFunction(
"get(string)",
u256(0x20),
u256(strings[i].size()),
strings[i]
- ) == encodeArgs(u256(7 + i)));
+ ), encodeArgs(u256(7 + i)));
}
BOOST_AUTO_TEST_CASE(accessor_for_state_variable)
{
char const* sourceCode = R"(
- contract Lotto{
+ contract Lotto {
uint public ticketPrice = 500;
- })";
+ }
+ )";
- compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("ticketPrice()") == encodeArgs(u256(500)));
+ compileAndRun(sourceCode);
+ ABI_CHECK(callContractFunction("ticketPrice()"), encodeArgs(u256(500)));
}
BOOST_AUTO_TEST_CASE(accessor_for_const_state_variable)
@@ -6513,10 +6557,11 @@ BOOST_AUTO_TEST_CASE(accessor_for_const_state_variable)
char const* sourceCode = R"(
contract Lotto{
uint constant public ticketPrice = 555;
- })";
+ }
+ )";
- compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("ticketPrice()") == encodeArgs(u256(555)));
+ compileAndRun(sourceCode);
+ ABI_CHECK(callContractFunction("ticketPrice()"), encodeArgs(u256(555)));
}
BOOST_AUTO_TEST_CASE(state_variable_under_contract_name)
@@ -6531,7 +6576,7 @@ BOOST_AUTO_TEST_CASE(state_variable_under_contract_name)
}
)";
compileAndRun(text);
- BOOST_CHECK(callContractFunction("getStateVar()") == encodeArgs(u256(42)));
+ ABI_CHECK(callContractFunction("getStateVar()"), encodeArgs(u256(42)));
}
BOOST_AUTO_TEST_CASE(state_variable_local_variable_mixture)
@@ -6547,7 +6592,7 @@ BOOST_AUTO_TEST_CASE(state_variable_local_variable_mixture)
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(inherited_function) {
@@ -6562,7 +6607,7 @@ BOOST_AUTO_TEST_CASE(inherited_function) {
)";
compileAndRun(sourceCode, 0, "B");
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(inherited_function_from_a_library) {
@@ -6577,7 +6622,7 @@ BOOST_AUTO_TEST_CASE(inherited_function_from_a_library) {
)";
compileAndRun(sourceCode, 0, "B");
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(inherited_constant_state_var)
@@ -6594,7 +6639,7 @@ BOOST_AUTO_TEST_CASE(inherited_constant_state_var)
)";
compileAndRun(sourceCode, 0, "B");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(multiple_inherited_state_vars)
@@ -6625,12 +6670,12 @@ BOOST_AUTO_TEST_CASE(multiple_inherited_state_vars)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(7)));
- BOOST_CHECK(callContractFunction("b()") == encodeArgs(u256(9)));
- BOOST_CHECK(callContractFunction("a_set(uint256)", u256(1)) == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("b_set(uint256)", u256(3)) == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("b()") == encodeArgs(u256(3)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("b()"), encodeArgs(u256(9)));
+ ABI_CHECK(callContractFunction("a_set(uint256)", u256(1)), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("b_set(uint256)", u256(3)), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("b()"), encodeArgs(u256(3)));
}
BOOST_AUTO_TEST_CASE(constant_string_literal)
@@ -6657,12 +6702,12 @@ BOOST_AUTO_TEST_CASE(constant_string_literal)
compileAndRun(sourceCode);
string longStr = "abefghijklmnopqabcdefghijklmnopqabcdefghijklmnopqabca";
string shortStr = "abcdefghijklmnopq";
- BOOST_CHECK(callContractFunction("b()") == encodeArgs(shortStr));
- BOOST_CHECK(callContractFunction("x()") == encodeDyn(longStr));
- BOOST_CHECK(callContractFunction("getB()") == encodeArgs(shortStr));
- BOOST_CHECK(callContractFunction("getX()") == encodeDyn(longStr));
- BOOST_CHECK(callContractFunction("getX2()") == encodeDyn(longStr));
- BOOST_CHECK(callContractFunction("unused()") == encodeArgs(2));
+ ABI_CHECK(callContractFunction("b()"), encodeArgs(shortStr));
+ ABI_CHECK(callContractFunction("x()"), encodeDyn(longStr));
+ ABI_CHECK(callContractFunction("getB()"), encodeArgs(shortStr));
+ ABI_CHECK(callContractFunction("getX()"), encodeDyn(longStr));
+ ABI_CHECK(callContractFunction("getX2()"), encodeDyn(longStr));
+ ABI_CHECK(callContractFunction("unused()"), encodeArgs(2));
}
BOOST_AUTO_TEST_CASE(storage_string_as_mapping_key_without_variable)
@@ -6677,7 +6722,7 @@ BOOST_AUTO_TEST_CASE(storage_string_as_mapping_key_without_variable)
}
)";
compileAndRun(sourceCode, 0, "Test");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(library_call)
@@ -6692,7 +6737,7 @@ BOOST_AUTO_TEST_CASE(library_call)
)";
compileAndRun(sourceCode, 0, "Lib");
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f(uint256)", u256(33)) == encodeArgs(u256(33) * 9));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(33)), encodeArgs(u256(33) * 9));
}
BOOST_AUTO_TEST_CASE(library_stray_values)
@@ -6709,7 +6754,7 @@ BOOST_AUTO_TEST_CASE(library_stray_values)
)";
compileAndRun(sourceCode, 0, "Lib");
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f(uint256)", u256(33)) == encodeArgs(u256(42)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(33)), encodeArgs(u256(42)));
}
BOOST_AUTO_TEST_CASE(cross_contract_types)
@@ -6724,7 +6769,7 @@ BOOST_AUTO_TEST_CASE(cross_contract_types)
}
)";
compileAndRun(sourceCode, 0, "Test");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(3)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(3)));
}
BOOST_AUTO_TEST_CASE(simple_throw)
@@ -6741,8 +6786,8 @@ BOOST_AUTO_TEST_CASE(simple_throw)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(uint256)", u256(11)) == encodeArgs(u256(21)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(1)) == encodeArgs());
+ ABI_CHECK(callContractFunction("f(uint256)", u256(11)), encodeArgs(u256(21)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(1)), encodeArgs());
}
BOOST_AUTO_TEST_CASE(strings_in_struct)
@@ -6781,10 +6826,10 @@ BOOST_AUTO_TEST_CASE(strings_in_struct)
)";
compileAndRun(sourceCode);
string s = "asdfghjkl";
- BOOST_CHECK(callContractFunction("getFirst()") == encodeArgs(u256(10)));
- BOOST_CHECK(callContractFunction("getSecond()") == encodeArgs(u256(20)));
- BOOST_CHECK(callContractFunction("getThird()") == encodeArgs(u256(30)));
- BOOST_CHECK(callContractFunction("getLast()") == encodeDyn(s));
+ ABI_CHECK(callContractFunction("getFirst()"), encodeArgs(u256(10)));
+ ABI_CHECK(callContractFunction("getSecond()"), encodeArgs(u256(20)));
+ ABI_CHECK(callContractFunction("getThird()"), encodeArgs(u256(30)));
+ ABI_CHECK(callContractFunction("getLast()"), encodeDyn(s));
}
BOOST_AUTO_TEST_CASE(fixed_arrays_as_return_type)
@@ -6810,7 +6855,7 @@ BOOST_AUTO_TEST_CASE(fixed_arrays_as_return_type)
}
)";
compileAndRun(sourceCode, 0, "B");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(
u256(2), u256(3), u256(4), u256(5), u256(6), // first return argument
u256(1000), u256(1001), u256(1002), u256(1003), u256(1004)) // second return argument
);
@@ -6842,7 +6887,7 @@ BOOST_AUTO_TEST_CASE(internal_types_in_library)
)";
compileAndRun(sourceCode, 0, "Lib");
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(4), u256(17)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(4), u256(17)));
}
BOOST_AUTO_TEST_CASE(using_library_structs)
@@ -6869,7 +6914,7 @@ BOOST_AUTO_TEST_CASE(using_library_structs)
)";
compileAndRun(sourceCode, 0, "Lib");
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(7), u256(8)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7), u256(8)));
}
BOOST_AUTO_TEST_CASE(library_struct_as_an_expression)
@@ -6890,7 +6935,7 @@ BOOST_AUTO_TEST_CASE(library_struct_as_an_expression)
}
)";
compileAndRun(sourceCode, 0, "Tsra");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(library_enum_as_an_expression)
@@ -6911,7 +6956,7 @@ BOOST_AUTO_TEST_CASE(library_enum_as_an_expression)
}
)";
compileAndRun(sourceCode, 0, "Tsra");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(short_strings)
@@ -7015,12 +7060,12 @@ BOOST_AUTO_TEST_CASE(short_strings)
}
)";
compileAndRun(sourceCode, 0, "A");
- BOOST_CHECK(callContractFunction("data1()") == encodeDyn(string("123")));
- BOOST_CHECK(callContractFunction("lengthChange()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("data1()"), encodeDyn(string("123")));
+ ABI_CHECK(callContractFunction("lengthChange()"), encodeArgs(u256(0)));
BOOST_CHECK(storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("deleteElements()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("deleteElements()"), encodeArgs(u256(0)));
BOOST_CHECK(storageEmpty(m_contractAddress));
- BOOST_CHECK(callContractFunction("copy()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("copy()"), encodeArgs(u256(0)));
BOOST_CHECK(storageEmpty(m_contractAddress));
}
@@ -7040,7 +7085,7 @@ BOOST_AUTO_TEST_CASE(calldata_offset)
}
)";
compileAndRun(sourceCode, 0, "CB", encodeArgs(u256(0x20)));
- BOOST_CHECK(callContractFunction("last()", encodeArgs()) == encodeDyn(string("nd")));
+ ABI_CHECK(callContractFunction("last()", encodeArgs()), encodeDyn(string("nd")));
}
BOOST_AUTO_TEST_CASE(contract_binary_dependencies)
@@ -7070,10 +7115,10 @@ BOOST_AUTO_TEST_CASE(reject_ether_sent_to_library)
compileAndRun(sourceCode, 10, "c");
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 10);
BOOST_CHECK_EQUAL(balanceAt(libraryAddress), 0);
- BOOST_CHECK(callContractFunction("f(address)", encodeArgs(u160(libraryAddress))) == encodeArgs(false));
+ ABI_CHECK(callContractFunction("f(address)", encodeArgs(u160(libraryAddress))), encodeArgs(false));
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 10);
BOOST_CHECK_EQUAL(balanceAt(libraryAddress), 0);
- BOOST_CHECK(callContractFunction("f(address)", encodeArgs(u160(m_contractAddress))) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("f(address)", encodeArgs(u160(m_contractAddress))), encodeArgs(true));
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 10);
BOOST_CHECK_EQUAL(balanceAt(libraryAddress), 0);
}
@@ -7099,7 +7144,7 @@ BOOST_AUTO_TEST_CASE(multi_variable_declaration)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()", encodeArgs()) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("f()", encodeArgs()), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(tuples)
@@ -7130,7 +7175,7 @@ BOOST_AUTO_TEST_CASE(tuples)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(string_tuples)
@@ -7149,8 +7194,8 @@ BOOST_AUTO_TEST_CASE(string_tuples)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0x40), u256(8), u256(3), string("abc")));
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(0x40), u256(0x80), u256(3), string("abc"), u256(3), string("def")));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0x40), u256(8), u256(3), string("abc")));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(0x40), u256(0x80), u256(3), string("abc"), u256(3), string("def")));
}
BOOST_AUTO_TEST_CASE(decayed_tuple)
@@ -7165,7 +7210,7 @@ BOOST_AUTO_TEST_CASE(decayed_tuple)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(inline_tuple_with_rational_numbers)
@@ -7179,7 +7224,7 @@ BOOST_AUTO_TEST_CASE(inline_tuple_with_rational_numbers)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(destructuring_assignment)
@@ -7218,7 +7263,7 @@ BOOST_AUTO_TEST_CASE(destructuring_assignment)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(bytes)", u256(0x20), u256(5), string("abcde")) == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(bytes)", u256(0x20), u256(5), string("abcde")), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(destructuring_assignment_wildcard)
@@ -7243,7 +7288,7 @@ BOOST_AUTO_TEST_CASE(destructuring_assignment_wildcard)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(lone_struct_array_type)
@@ -7258,7 +7303,7 @@ BOOST_AUTO_TEST_CASE(lone_struct_array_type)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(3)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(3)));
}
BOOST_AUTO_TEST_CASE(create_memory_array)
@@ -7280,9 +7325,33 @@ BOOST_AUTO_TEST_CASE(create_memory_array)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(string("A"), u256(8), u256(4), string("B")));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(string("A"), u256(8), u256(4), string("B")));
}
+BOOST_AUTO_TEST_CASE(create_memory_array_allocation_size)
+{
+ // Check allocation size of byte array. Should be 32 plus length rounded up to next
+ // multiple of 32
+ char const* sourceCode = R"(
+ contract C {
+ function f() pure returns (uint d1, uint d2, uint d3) {
+ bytes memory b1 = new bytes(31);
+ bytes memory b2 = new bytes(32);
+ bytes memory b3 = new bytes(256);
+ bytes memory b4 = new bytes(31);
+ assembly {
+ d1 := sub(b2, b1)
+ d2 := sub(b3, b2)
+ d3 := sub(b4, b3)
+ }
+ }
+ }
+ )";
+ compileAndRun(sourceCode);
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(0x40, 0x40, 0x20 + 256));
+}
+
+
BOOST_AUTO_TEST_CASE(memory_arrays_of_various_sizes)
{
// Computes binomial coefficients the chinese way
@@ -7301,8 +7370,8 @@ BOOST_AUTO_TEST_CASE(memory_arrays_of_various_sizes)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", encodeArgs(u256(3), u256(1))) == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", encodeArgs(u256(9), u256(5))) == encodeArgs(u256(70)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", encodeArgs(u256(3), u256(1))), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", encodeArgs(u256(9), u256(5))), encodeArgs(u256(70)));
}
BOOST_AUTO_TEST_CASE(memory_overwrite)
@@ -7317,7 +7386,7 @@ BOOST_AUTO_TEST_CASE(memory_overwrite)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeDyn(string("b23a5")));
+ ABI_CHECK(callContractFunction("f()"), encodeDyn(string("b23a5")));
}
BOOST_AUTO_TEST_CASE(addmod_mulmod)
@@ -7336,7 +7405,7 @@ BOOST_AUTO_TEST_CASE(addmod_mulmod)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(divisiod_by_zero)
@@ -7352,12 +7421,12 @@ BOOST_AUTO_TEST_CASE(divisiod_by_zero)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("div(uint256,uint256)", 7, 2) == encodeArgs(u256(3)));
+ ABI_CHECK(callContractFunction("div(uint256,uint256)", 7, 2), encodeArgs(u256(3)));
// throws
- BOOST_CHECK(callContractFunction("div(uint256,uint256)", 7, 0) == encodeArgs());
- BOOST_CHECK(callContractFunction("mod(uint256,uint256)", 7, 2) == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("div(uint256,uint256)", 7, 0), encodeArgs());
+ ABI_CHECK(callContractFunction("mod(uint256,uint256)", 7, 2), encodeArgs(u256(1)));
// throws
- BOOST_CHECK(callContractFunction("mod(uint256,uint256)", 7, 0) == encodeArgs());
+ ABI_CHECK(callContractFunction("mod(uint256,uint256)", 7, 0), encodeArgs());
}
BOOST_AUTO_TEST_CASE(string_allocation_bug)
@@ -7378,7 +7447,7 @@ BOOST_AUTO_TEST_CASE(string_allocation_bug)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("p(uint256)") == encodeArgs(
+ ABI_CHECK(callContractFunction("p(uint256)", 0), encodeArgs(
u256(0xbbbb),
u256(0xcccc),
u256(0x80),
@@ -7403,7 +7472,7 @@ BOOST_AUTO_TEST_CASE(using_for_function_on_int)
)";
compileAndRun(sourceCode, 0, "D");
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f(uint256)", u256(9)) == encodeArgs(u256(2 * 9)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(9)), encodeArgs(u256(2 * 9)));
}
BOOST_AUTO_TEST_CASE(using_for_function_on_struct)
@@ -7421,8 +7490,8 @@ BOOST_AUTO_TEST_CASE(using_for_function_on_struct)
)";
compileAndRun(sourceCode, 0, "D");
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f(uint256)", u256(7)) == encodeArgs(u256(3 * 7)));
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(3 * 7)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(3 * 7)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(3 * 7)));
}
BOOST_AUTO_TEST_CASE(using_for_overload)
@@ -7444,8 +7513,8 @@ BOOST_AUTO_TEST_CASE(using_for_overload)
)";
compileAndRun(sourceCode, 0, "D");
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f(uint256)", u256(7)) == encodeArgs(u256(6 * 7)));
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(6 * 7)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(6 * 7)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(6 * 7)));
}
BOOST_AUTO_TEST_CASE(using_for_by_name)
@@ -7463,8 +7532,8 @@ BOOST_AUTO_TEST_CASE(using_for_by_name)
)";
compileAndRun(sourceCode, 0, "D");
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f(uint256)", u256(7)) == encodeArgs(u256(6 * 7)));
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(6 * 7)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(6 * 7)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(6 * 7)));
}
BOOST_AUTO_TEST_CASE(bound_function_in_var)
@@ -7483,8 +7552,8 @@ BOOST_AUTO_TEST_CASE(bound_function_in_var)
)";
compileAndRun(sourceCode, 0, "D");
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f(uint256)", u256(7)) == encodeArgs(u256(6 * 7)));
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(6 * 7)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(6 * 7)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(6 * 7)));
}
BOOST_AUTO_TEST_CASE(bound_function_to_string)
@@ -7506,8 +7575,8 @@ BOOST_AUTO_TEST_CASE(bound_function_to_string)
)";
compileAndRun(sourceCode, 0, "D");
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(3)));
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(3)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(3)));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(3)));
}
BOOST_AUTO_TEST_CASE(inline_array_storage_to_memory_conversion_strings)
@@ -7523,7 +7592,7 @@ BOOST_AUTO_TEST_CASE(inline_array_storage_to_memory_conversion_strings)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0x40), u256(0x80), u256(3), string("ray"), u256(2), string("mi")));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0x40), u256(0x80), u256(3), string("ray"), u256(2), string("mi")));
}
BOOST_AUTO_TEST_CASE(inline_array_strings_from_document)
@@ -7537,10 +7606,10 @@ BOOST_AUTO_TEST_CASE(inline_array_strings_from_document)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunction("f(uint256)", u256(0)) == encodeArgs(u256(0x20), u256(4), string("This")));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(1)) == encodeArgs(u256(0x20), u256(2), string("is")));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(2)) == encodeArgs(u256(0x20), u256(2), string("an")));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(3)) == encodeArgs(u256(0x20), u256(5), string("array")));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(0)), encodeArgs(u256(0x20), u256(4), string("This")));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(1)), encodeArgs(u256(0x20), u256(2), string("is")));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(2)), encodeArgs(u256(0x20), u256(2), string("an")));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(3)), encodeArgs(u256(0x20), u256(5), string("array")));
}
BOOST_AUTO_TEST_CASE(inline_array_storage_to_memory_conversion_ints)
@@ -7556,7 +7625,7 @@ BOOST_AUTO_TEST_CASE(inline_array_storage_to_memory_conversion_ints)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(3, 6));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(3, 6));
}
BOOST_AUTO_TEST_CASE(inline_array_index_access_ints)
@@ -7569,7 +7638,7 @@ BOOST_AUTO_TEST_CASE(inline_array_index_access_ints)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(3));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(3));
}
BOOST_AUTO_TEST_CASE(inline_array_index_access_strings)
@@ -7586,8 +7655,8 @@ BOOST_AUTO_TEST_CASE(inline_array_index_access_strings)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs());
- BOOST_CHECK(callContractFunction("tester()") == encodeArgs(u256(0x20), u256(3), string("abc")));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs());
+ ABI_CHECK(callContractFunction("tester()"), encodeArgs(u256(0x20), u256(3), string("abc")));
}
BOOST_AUTO_TEST_CASE(inline_array_return)
@@ -7606,7 +7675,7 @@ BOOST_AUTO_TEST_CASE(inline_array_return)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(1, 2, 3, 4, 5));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(1, 2, 3, 4, 5));
}
BOOST_AUTO_TEST_CASE(inline_array_singleton)
@@ -7620,7 +7689,7 @@ BOOST_AUTO_TEST_CASE(inline_array_singleton)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(4)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(4)));
}
BOOST_AUTO_TEST_CASE(inline_long_string_return)
@@ -7635,7 +7704,7 @@ BOOST_AUTO_TEST_CASE(inline_long_string_return)
string strLong = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789001234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678900123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789001234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeDyn(strLong));
+ ABI_CHECK(callContractFunction("f()"), encodeDyn(strLong));
}
BOOST_AUTO_TEST_CASE(fixed_bytes_index_access)
@@ -7654,9 +7723,9 @@ BOOST_AUTO_TEST_CASE(fixed_bytes_index_access)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(bytes32)", "789") == encodeArgs("9"));
- BOOST_CHECK(callContractFunction("g(bytes32)", "789") == encodeArgs(u256(int('5'))));
- BOOST_CHECK(callContractFunction("data(uint256)", u256(1)) == encodeArgs("8"));
+ ABI_CHECK(callContractFunction("f(bytes32)", "789"), encodeArgs("9"));
+ ABI_CHECK(callContractFunction("g(bytes32)", "789"), encodeArgs(u256(int('5'))));
+ ABI_CHECK(callContractFunction("data(uint256)", u256(1)), encodeArgs("8"));
}
BOOST_AUTO_TEST_CASE(fixed_bytes_length_access)
@@ -7670,7 +7739,7 @@ BOOST_AUTO_TEST_CASE(fixed_bytes_length_access)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(bytes32)", "789") == encodeArgs(u256(32), u256(16), u256(8)));
+ ABI_CHECK(callContractFunction("f(bytes32)", "789"), encodeArgs(u256(32), u256(16), u256(8)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_write_to_stack)
@@ -7683,7 +7752,7 @@ BOOST_AUTO_TEST_CASE(inline_assembly_write_to_stack)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(7), string("abcdef")));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7), string("abcdef")));
}
BOOST_AUTO_TEST_CASE(inline_assembly_read_and_write_stack)
@@ -7697,7 +7766,7 @@ BOOST_AUTO_TEST_CASE(inline_assembly_read_and_write_stack)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(45)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(45)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_memory_access)
@@ -7714,7 +7783,7 @@ BOOST_AUTO_TEST_CASE(inline_assembly_memory_access)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(u256(0x20), u256(5), string("12345")));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(u256(0x20), u256(5), string("12345")));
}
BOOST_AUTO_TEST_CASE(inline_assembly_storage_access)
@@ -7739,8 +7808,8 @@ BOOST_AUTO_TEST_CASE(inline_assembly_storage_access)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(true));
- BOOST_CHECK(callContractFunction("z()") == encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(true));
+ ABI_CHECK(callContractFunction("z()"), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_storage_access_inside_function)
@@ -7766,8 +7835,8 @@ BOOST_AUTO_TEST_CASE(inline_assembly_storage_access_inside_function)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(true));
- BOOST_CHECK(callContractFunction("z()") == encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(true));
+ ABI_CHECK(callContractFunction("z()"), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_storage_access_via_pointer)
@@ -7791,10 +7860,10 @@ BOOST_AUTO_TEST_CASE(inline_assembly_storage_access_via_pointer)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(true));
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(7)));
- BOOST_CHECK(callContractFunction("separator()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("separator2()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(true));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("separator()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("separator2()"), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_jumps)
@@ -7819,8 +7888,8 @@ BOOST_AUTO_TEST_CASE(inline_assembly_jumps)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()", u256(5)) == encodeArgs(u256(13)));
- BOOST_CHECK(callContractFunction("f()", u256(7)) == encodeArgs(u256(34)));
+ ABI_CHECK(callContractFunction("f()", u256(5)), encodeArgs(u256(13)));
+ ABI_CHECK(callContractFunction("f()", u256(7)), encodeArgs(u256(34)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_function_access)
@@ -7839,8 +7908,8 @@ BOOST_AUTO_TEST_CASE(inline_assembly_function_access)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256)", u256(5)) == encodeArgs());
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(10)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(5)), encodeArgs());
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(10)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_function_call)
@@ -7864,7 +7933,7 @@ BOOST_AUTO_TEST_CASE(inline_assembly_function_call)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1), u256(2), u256(7)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1), u256(2), u256(7)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_function_call_assignment)
@@ -7889,7 +7958,7 @@ BOOST_AUTO_TEST_CASE(inline_assembly_function_call_assignment)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1), u256(2), u256(7)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1), u256(2), u256(7)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_function_call2)
@@ -7915,7 +7984,7 @@ BOOST_AUTO_TEST_CASE(inline_assembly_function_call2)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1), u256(2), u256(7), u256(0x10)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1), u256(2), u256(7), u256(0x10)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_embedded_function_call)
@@ -7942,7 +8011,7 @@ BOOST_AUTO_TEST_CASE(inline_assembly_embedded_function_call)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1), u256(4), u256(7), u256(0x10)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1), u256(4), u256(7), u256(0x10)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_switch)
@@ -7960,10 +8029,10 @@ BOOST_AUTO_TEST_CASE(inline_assembly_switch)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256)", u256(0)) == encodeArgs(u256(2)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(1)) == encodeArgs(u256(8)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(2)) == encodeArgs(u256(9)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(3)) == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(0)), encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(1)), encodeArgs(u256(8)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(2)), encodeArgs(u256(9)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(3)), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_recursion)
@@ -7984,11 +8053,11 @@ BOOST_AUTO_TEST_CASE(inline_assembly_recursion)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256)", u256(0)) == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(1)) == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(2)) == encodeArgs(u256(2)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(3)) == encodeArgs(u256(6)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(4)) == encodeArgs(u256(24)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(0)), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(1)), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(2)), encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(3)), encodeArgs(u256(6)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(4)), encodeArgs(u256(24)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_for)
@@ -8009,11 +8078,11 @@ BOOST_AUTO_TEST_CASE(inline_assembly_for)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256)", u256(0)) == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(1)) == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(2)) == encodeArgs(u256(2)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(3)) == encodeArgs(u256(6)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(4)) == encodeArgs(u256(24)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(0)), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(1)), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(2)), encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(3)), encodeArgs(u256(6)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(4)), encodeArgs(u256(24)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_for2)
@@ -8035,9 +8104,9 @@ BOOST_AUTO_TEST_CASE(inline_assembly_for2)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256)", u256(0)) == encodeArgs(u256(0), u256(2), u256(0)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(1)) == encodeArgs(u256(1), u256(4), u256(3)));
- BOOST_CHECK(callContractFunction("f(uint256)", u256(2)) == encodeArgs(u256(0), u256(2), u256(0)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(0)), encodeArgs(u256(0), u256(2), u256(0)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(1)), encodeArgs(u256(1), u256(4), u256(3)));
+ ABI_CHECK(callContractFunction("f(uint256)", u256(2)), encodeArgs(u256(0), u256(2), u256(0)));
}
BOOST_AUTO_TEST_CASE(index_access_with_type_conversion)
@@ -8075,7 +8144,7 @@ BOOST_AUTO_TEST_CASE(delete_on_array_of_structs)
compileAndRun(sourceCode, 0, "C");
// This code interprets x as an array length and thus will go out of gas.
// neither of the two should throw due to out-of-bounds access
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(true));
}
@@ -8100,7 +8169,7 @@ BOOST_AUTO_TEST_CASE(internal_library_function)
)";
// This has to work without linking, because everything will be inlined.
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(internal_library_function_calling_private)
@@ -8128,7 +8197,7 @@ BOOST_AUTO_TEST_CASE(internal_library_function_calling_private)
)";
// This has to work without linking, because everything will be inlined.
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(internal_library_function_bound)
@@ -8153,7 +8222,7 @@ BOOST_AUTO_TEST_CASE(internal_library_function_bound)
)";
// This has to work without linking, because everything will be inlined.
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(internal_library_function_return_var_size)
@@ -8178,7 +8247,7 @@ BOOST_AUTO_TEST_CASE(internal_library_function_return_var_size)
)";
// This has to work without linking, because everything will be inlined.
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(iszero_bnot_correct)
@@ -8198,7 +8267,7 @@ BOOST_AUTO_TEST_CASE(iszero_bnot_correct)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(cleanup_bytes_types)
@@ -8216,7 +8285,7 @@ BOOST_AUTO_TEST_CASE(cleanup_bytes_types)
)";
compileAndRun(sourceCode, 0, "C");
// We input longer data on purpose.
- BOOST_CHECK(callContractFunction("f(bytes2,uint16)", string("abc"), u256(0x040102)) == encodeArgs(0));
+ ABI_CHECK(callContractFunction("f(bytes2,uint16)", string("abc"), u256(0x040102)), encodeArgs(0));
}
BOOST_AUTO_TEST_CASE(skip_dynamic_types)
@@ -8235,7 +8304,7 @@ BOOST_AUTO_TEST_CASE(skip_dynamic_types)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(7), u256(8)));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(7), u256(8)));
}
BOOST_AUTO_TEST_CASE(skip_dynamic_types_for_structs)
@@ -8261,7 +8330,7 @@ BOOST_AUTO_TEST_CASE(skip_dynamic_types_for_structs)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(2), u256(6)));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(2), u256(6)));
}
BOOST_AUTO_TEST_CASE(failed_create)
@@ -8285,11 +8354,11 @@ BOOST_AUTO_TEST_CASE(failed_create)
)";
compileAndRun(sourceCode, 20, "C");
BOOST_CHECK(callContractFunction("f(uint256)", 20) != encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("f(uint256)", 20) == encodeArgs());
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("stack(uint256)", 1023) == encodeArgs());
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f(uint256)", 20), encodeArgs());
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("stack(uint256)", 1023), encodeArgs());
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(create_dynamic_array_with_zero_length)
@@ -8303,7 +8372,7 @@ BOOST_AUTO_TEST_CASE(create_dynamic_array_with_zero_length)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(return_does_not_skip_modifier)
@@ -8321,9 +8390,9 @@ BOOST_AUTO_TEST_CASE(return_does_not_skip_modifier)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2)));
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(9)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(9)));
}
BOOST_AUTO_TEST_CASE(break_in_modifier)
@@ -8343,9 +8412,9 @@ BOOST_AUTO_TEST_CASE(break_in_modifier)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("f()") == encodeArgs());
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs());
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(stacked_return_with_modifiers)
@@ -8365,9 +8434,9 @@ BOOST_AUTO_TEST_CASE(stacked_return_with_modifiers)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("f()") == encodeArgs());
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs());
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(mutex)
@@ -8429,11 +8498,11 @@ BOOST_AUTO_TEST_CASE(mutex)
auto fund = m_contractAddress;
BOOST_CHECK_EQUAL(balanceAt(fund), 500);
compileAndRun(sourceCode, 0, "Attacker", encodeArgs(u160(fund)));
- BOOST_CHECK(callContractFunction("setProtected(bool)", true) == encodeArgs());
- BOOST_CHECK(callContractFunction("attack()") == encodeArgs());
+ ABI_CHECK(callContractFunction("setProtected(bool)", true), encodeArgs());
+ ABI_CHECK(callContractFunction("attack()"), encodeArgs());
BOOST_CHECK_EQUAL(balanceAt(fund), 500);
- BOOST_CHECK(callContractFunction("setProtected(bool)", false) == encodeArgs());
- BOOST_CHECK(callContractFunction("attack()") == encodeArgs(u256(460)));
+ ABI_CHECK(callContractFunction("setProtected(bool)", false), encodeArgs());
+ ABI_CHECK(callContractFunction("attack()"), encodeArgs(u256(460)));
BOOST_CHECK_EQUAL(balanceAt(fund), 460);
}
@@ -8450,7 +8519,7 @@ BOOST_AUTO_TEST_CASE(failing_ecrecover_invalid_input)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(failing_ecrecover_invalid_input_proper)
@@ -8476,7 +8545,7 @@ BOOST_AUTO_TEST_CASE(failing_ecrecover_invalid_input_proper)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(failing_ecrecover_invalid_input_asm)
@@ -8497,7 +8566,7 @@ BOOST_AUTO_TEST_CASE(failing_ecrecover_invalid_input_asm)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(calling_nonexisting_contract_throws)
@@ -8521,9 +8590,9 @@ BOOST_AUTO_TEST_CASE(calling_nonexisting_contract_throws)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs());
- BOOST_CHECK(callContractFunction("g()") == encodeArgs());
- BOOST_CHECK(callContractFunction("h()") == encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs());
+ ABI_CHECK(callContractFunction("g()"), encodeArgs());
+ ABI_CHECK(callContractFunction("h()"), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(payable_constructor)
@@ -8550,11 +8619,11 @@ BOOST_AUTO_TEST_CASE(payable_function)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunctionWithValue("f()", 27) == encodeArgs(u256(27)));
+ ABI_CHECK(callContractFunctionWithValue("f()", 27), encodeArgs(u256(27)));
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 27);
- BOOST_CHECK(callContractFunctionWithValue("", 27) == encodeArgs());
+ ABI_CHECK(callContractFunctionWithValue("", 27), encodeArgs());
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 27 + 27);
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(28)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(28)));
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 27 + 27);
}
@@ -8572,7 +8641,7 @@ BOOST_AUTO_TEST_CASE(payable_function_calls_library)
)";
compileAndRun(sourceCode, 0, "L");
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"L", m_contractAddress}});
- BOOST_CHECK(callContractFunctionWithValue("f()", 27) == encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunctionWithValue("f()", 27), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(non_payable_throw)
@@ -8589,14 +8658,14 @@ BOOST_AUTO_TEST_CASE(non_payable_throw)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunctionWithValue("f()", 27) == encodeArgs());
+ ABI_CHECK(callContractFunctionWithValue("f()", 27), encodeArgs());
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 0);
- BOOST_CHECK(callContractFunction("") == encodeArgs());
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunctionWithValue("", 27) == encodeArgs());
+ ABI_CHECK(callContractFunction(""), encodeArgs());
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunctionWithValue("", 27), encodeArgs());
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 0);
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunctionWithValue("a()", 27) == encodeArgs());
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunctionWithValue("a()", 27), encodeArgs());
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 0);
}
@@ -8613,7 +8682,7 @@ BOOST_AUTO_TEST_CASE(no_nonpayable_circumvention_by_modifier)
}
)";
compileAndRun(sourceCode);
- BOOST_CHECK(callContractFunctionWithValue("f()", 27) == encodeArgs());
+ ABI_CHECK(callContractFunctionWithValue("f()", 27), encodeArgs());
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 0);
}
@@ -8635,7 +8704,7 @@ BOOST_AUTO_TEST_CASE(mem_resize_is_not_paid_at_call)
compileAndRun(sourceCode, 0, "C");
u160 cAddr = m_contractAddress;
compileAndRun(sourceCode, 0, "D");
- BOOST_CHECK(callContractFunction("f(address)", cAddr) == encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("f(address)", cAddr), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(calling_uninitialized_function)
@@ -8657,8 +8726,8 @@ BOOST_AUTO_TEST_CASE(calling_uninitialized_function)
compileAndRun(sourceCode, 0, "C");
// This should throw exceptions
- BOOST_CHECK(callContractFunction("intern()") == encodeArgs());
- BOOST_CHECK(callContractFunction("extern()") == encodeArgs());
+ ABI_CHECK(callContractFunction("intern()"), encodeArgs());
+ ABI_CHECK(callContractFunction("extern()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(calling_uninitialized_function_in_detail)
@@ -8679,7 +8748,7 @@ BOOST_AUTO_TEST_CASE(calling_uninitialized_function_in_detail)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("t()") == encodeArgs());
+ ABI_CHECK(callContractFunction("t()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(pass_function_types_internally)
@@ -8697,7 +8766,7 @@ BOOST_AUTO_TEST_CASE(pass_function_types_internally)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256)", 7) == encodeArgs(u256(8)));
+ ABI_CHECK(callContractFunction("f(uint256)", 7), encodeArgs(u256(8)));
}
BOOST_AUTO_TEST_CASE(pass_function_types_externally)
@@ -8718,8 +8787,8 @@ BOOST_AUTO_TEST_CASE(pass_function_types_externally)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256)", 7) == encodeArgs(u256(8)));
- BOOST_CHECK(callContractFunction("f2(uint256)", 7) == encodeArgs(u256(8)));
+ ABI_CHECK(callContractFunction("f(uint256)", 7), encodeArgs(u256(8)));
+ ABI_CHECK(callContractFunction("f2(uint256)", 7), encodeArgs(u256(8)));
}
BOOST_AUTO_TEST_CASE(receive_external_function_type)
@@ -8734,10 +8803,10 @@ BOOST_AUTO_TEST_CASE(receive_external_function_type)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction(
+ ABI_CHECK(callContractFunction(
"f(function)",
m_contractAddress.asBytes() + FixedHash<4>(dev::keccak256("g()")).asBytes() + bytes(32 - 4 - 20, 0)
- ) == encodeArgs(u256(7)));
+ ), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(return_external_function_type)
@@ -8752,8 +8821,8 @@ BOOST_AUTO_TEST_CASE(return_external_function_type)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(
- callContractFunction("f()") ==
+ ABI_CHECK(
+ callContractFunction("f()"),
m_contractAddress.asBytes() + FixedHash<4>(dev::keccak256("g()")).asBytes() + bytes(32 - 4 - 20, 0)
);
}
@@ -8782,7 +8851,7 @@ BOOST_AUTO_TEST_CASE(store_function)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("t()") == encodeArgs(u256(9)));
+ ABI_CHECK(callContractFunction("t()"), encodeArgs(u256(9)));
}
BOOST_AUTO_TEST_CASE(store_function_in_constructor)
@@ -8805,8 +8874,8 @@ BOOST_AUTO_TEST_CASE(store_function_in_constructor)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("use(uint256)", encodeArgs(u256(3))) == encodeArgs(u256(6)));
- BOOST_CHECK(callContractFunction("result_in_constructor()") == encodeArgs(u256(4)));
+ ABI_CHECK(callContractFunction("use(uint256)", encodeArgs(u256(3))), encodeArgs(u256(6)));
+ ABI_CHECK(callContractFunction("result_in_constructor()"), encodeArgs(u256(4)));
}
// TODO: store bound internal library functions
@@ -8829,7 +8898,7 @@ BOOST_AUTO_TEST_CASE(store_internal_unused_function_in_constructor)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("t()") == encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("t()"), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(store_internal_unused_library_function_in_constructor)
@@ -8848,7 +8917,7 @@ BOOST_AUTO_TEST_CASE(store_internal_unused_library_function_in_constructor)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("t()") == encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("t()"), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(same_function_in_construction_and_runtime)
@@ -8869,8 +8938,8 @@ BOOST_AUTO_TEST_CASE(same_function_in_construction_and_runtime)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("runtime(uint256)", encodeArgs(u256(3))) == encodeArgs(u256(6)));
- BOOST_CHECK(callContractFunction("initial()") == encodeArgs(u256(4)));
+ ABI_CHECK(callContractFunction("runtime(uint256)", encodeArgs(u256(3))), encodeArgs(u256(6)));
+ ABI_CHECK(callContractFunction("initial()"), encodeArgs(u256(4)));
}
BOOST_AUTO_TEST_CASE(same_function_in_construction_and_runtime_equality_check)
@@ -8891,7 +8960,7 @@ BOOST_AUTO_TEST_CASE(same_function_in_construction_and_runtime_equality_check)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(function_type_library_internal)
@@ -8916,7 +8985,7 @@ BOOST_AUTO_TEST_CASE(function_type_library_internal)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256[])", 0x20, 3, u256(1), u256(7), u256(3)) == encodeArgs(u256(11)));
+ ABI_CHECK(callContractFunction("f(uint256[])", 0x20, 3, u256(1), u256(7), u256(3)), encodeArgs(u256(11)));
}
@@ -8946,7 +9015,7 @@ BOOST_AUTO_TEST_CASE(call_function_returning_function)
)";
compileAndRun(sourceCode, 0, "test");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(mapping_of_functions)
@@ -8981,12 +9050,12 @@ BOOST_AUTO_TEST_CASE(mapping_of_functions)
)";
compileAndRun(sourceCode, 0, "Flow");
- BOOST_CHECK(callContractFunction("success()") == encodeArgs(false));
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(7)));
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(7)));
- BOOST_CHECK(callContractFunction("success()") == encodeArgs(false));
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(7)));
- BOOST_CHECK(callContractFunction("success()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("success()"), encodeArgs(false));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("success()"), encodeArgs(false));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("success()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(packed_functions)
@@ -9029,12 +9098,12 @@ BOOST_AUTO_TEST_CASE(packed_functions)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("set()") == encodeArgs());
- BOOST_CHECK(callContractFunction("t1()") == encodeArgs(u256(7)));
- BOOST_CHECK(callContractFunction("t2()") == encodeArgs(u256(8)));
- BOOST_CHECK(callContractFunction("t3()") == encodeArgs(u256(7)));
- BOOST_CHECK(callContractFunction("t4()") == encodeArgs(u256(8)));
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("set()"), encodeArgs());
+ ABI_CHECK(callContractFunction("t1()"), encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("t2()"), encodeArgs(u256(8)));
+ ABI_CHECK(callContractFunction("t3()"), encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("t4()"), encodeArgs(u256(8)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(function_memory_array)
@@ -9060,12 +9129,12 @@ BOOST_AUTO_TEST_CASE(function_memory_array)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(0)) == encodeArgs(u256(11)));
- BOOST_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(1)) == encodeArgs(u256(12)));
- BOOST_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(2)) == encodeArgs(u256(13)));
- BOOST_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(3)) == encodeArgs(u256(15)));
- BOOST_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(4)) == encodeArgs(u256(18)));
- BOOST_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(5)) == encodeArgs());
+ ABI_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(0)), encodeArgs(u256(11)));
+ ABI_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(1)), encodeArgs(u256(12)));
+ ABI_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(2)), encodeArgs(u256(13)));
+ ABI_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(3)), encodeArgs(u256(15)));
+ ABI_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(4)), encodeArgs(u256(18)));
+ ABI_CHECK(callContractFunction("test(uint256,uint256)", u256(10), u256(5)), encodeArgs());
}
BOOST_AUTO_TEST_CASE(function_delete_storage)
@@ -9089,10 +9158,10 @@ BOOST_AUTO_TEST_CASE(function_delete_storage)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("set()") == encodeArgs(u256(7)));
- BOOST_CHECK(callContractFunction("ca()") == encodeArgs(u256(7)));
- BOOST_CHECK(callContractFunction("d()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("ca()") == encodeArgs());
+ ABI_CHECK(callContractFunction("set()"), encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("ca()"), encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("d()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("ca()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(function_delete_stack)
@@ -9109,7 +9178,7 @@ BOOST_AUTO_TEST_CASE(function_delete_stack)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs());
+ ABI_CHECK(callContractFunction("test()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(copy_function_storage_array)
@@ -9131,7 +9200,7 @@ BOOST_AUTO_TEST_CASE(copy_function_storage_array)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(u256(7)));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(u256(7)));
}
BOOST_AUTO_TEST_CASE(function_array_cross_calls)
@@ -9170,7 +9239,7 @@ BOOST_AUTO_TEST_CASE(function_array_cross_calls)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(u256(5), u256(6), u256(7)));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(u256(5), u256(6), u256(7)));
}
BOOST_AUTO_TEST_CASE(external_function_to_address)
@@ -9187,8 +9256,8 @@ BOOST_AUTO_TEST_CASE(external_function_to_address)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(true));
- BOOST_CHECK(callContractFunction("g(function)", fromHex("00000000000000000000000000000000000004226121ff00000000000000000")) == encodeArgs(u160(0x42)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(true));
+ ABI_CHECK(callContractFunction("g(function)", fromHex("00000000000000000000000000000000000004226121ff00000000000000000")), encodeArgs(u160(0x42)));
}
@@ -9215,8 +9284,8 @@ BOOST_AUTO_TEST_CASE(copy_internal_function_array_to_storage)
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("one()") == encodeArgs(u256(3)));
- BOOST_CHECK(callContractFunction("two()") == encodeArgs());
+ ABI_CHECK(callContractFunction("one()"), encodeArgs(u256(3)));
+ ABI_CHECK(callContractFunction("two()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(shift_constant_left)
@@ -9227,7 +9296,7 @@ BOOST_AUTO_TEST_CASE(shift_constant_left)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(0x4200)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(0x4200)));
}
BOOST_AUTO_TEST_CASE(shift_negative_constant_left)
@@ -9238,7 +9307,7 @@ BOOST_AUTO_TEST_CASE(shift_negative_constant_left)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(-0x4200)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(-0x4200)));
}
BOOST_AUTO_TEST_CASE(shift_constant_right)
@@ -9249,7 +9318,7 @@ BOOST_AUTO_TEST_CASE(shift_constant_right)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(0x42)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(0x42)));
}
BOOST_AUTO_TEST_CASE(shift_negative_constant_right)
@@ -9260,7 +9329,7 @@ BOOST_AUTO_TEST_CASE(shift_negative_constant_right)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(-0x42)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(-0x42)));
}
BOOST_AUTO_TEST_CASE(shift_left)
@@ -9273,12 +9342,12 @@ BOOST_AUTO_TEST_CASE(shift_left)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(0)) == encodeArgs(u256(0x4266)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(8)) == encodeArgs(u256(0x426600)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(16)) == encodeArgs(u256(0x42660000)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(17)) == encodeArgs(u256(0x84cc0000)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(240)) == fromHex("4266000000000000000000000000000000000000000000000000000000000000"));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(256)) == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(0)), encodeArgs(u256(0x4266)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(8)), encodeArgs(u256(0x426600)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(16)), encodeArgs(u256(0x42660000)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(17)), encodeArgs(u256(0x84cc0000)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(240)), fromHex("4266000000000000000000000000000000000000000000000000000000000000"));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(256)), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_left_uint32)
@@ -9291,11 +9360,11 @@ BOOST_AUTO_TEST_CASE(shift_left_uint32)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(0)) == encodeArgs(u256(0x4266)));
- BOOST_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(8)) == encodeArgs(u256(0x426600)));
- BOOST_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(16)) == encodeArgs(u256(0x42660000)));
- BOOST_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(17)) == encodeArgs(u256(0x84cc0000)));
- BOOST_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(32)) == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(0)), encodeArgs(u256(0x4266)));
+ ABI_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(8)), encodeArgs(u256(0x426600)));
+ ABI_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(16)), encodeArgs(u256(0x42660000)));
+ ABI_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(17)), encodeArgs(u256(0x84cc0000)));
+ ABI_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(32)), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_left_uint8)
@@ -9308,8 +9377,8 @@ BOOST_AUTO_TEST_CASE(shift_left_uint8)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint8,uint8)", u256(0x66), u256(0)) == encodeArgs(u256(0x66)));
- BOOST_CHECK(callContractFunction("f(uint8,uint8)", u256(0x66), u256(8)) == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(uint8,uint8)", u256(0x66), u256(0)), encodeArgs(u256(0x66)));
+ ABI_CHECK(callContractFunction("f(uint8,uint8)", u256(0x66), u256(8)), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_left_larger_type)
@@ -9325,7 +9394,7 @@ BOOST_AUTO_TEST_CASE(shift_left_larger_type)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_left_assignment)
@@ -9339,12 +9408,12 @@ BOOST_AUTO_TEST_CASE(shift_left_assignment)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(0)) == encodeArgs(u256(0x4266)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(8)) == encodeArgs(u256(0x426600)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(16)) == encodeArgs(u256(0x42660000)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(17)) == encodeArgs(u256(0x84cc0000)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(240)) == fromHex("4266000000000000000000000000000000000000000000000000000000000000"));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(256)) == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(0)), encodeArgs(u256(0x4266)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(8)), encodeArgs(u256(0x426600)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(16)), encodeArgs(u256(0x42660000)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(17)), encodeArgs(u256(0x84cc0000)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(240)), fromHex("4266000000000000000000000000000000000000000000000000000000000000"));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(256)), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_left_assignment_different_type)
@@ -9358,11 +9427,11 @@ BOOST_AUTO_TEST_CASE(shift_left_assignment_different_type)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256,uint8)", u256(0x4266), u256(0)) == encodeArgs(u256(0x4266)));
- BOOST_CHECK(callContractFunction("f(uint256,uint8)", u256(0x4266), u256(8)) == encodeArgs(u256(0x426600)));
- BOOST_CHECK(callContractFunction("f(uint256,uint8)", u256(0x4266), u256(16)) == encodeArgs(u256(0x42660000)));
- BOOST_CHECK(callContractFunction("f(uint256,uint8)", u256(0x4266), u256(17)) == encodeArgs(u256(0x84cc0000)));
- BOOST_CHECK(callContractFunction("f(uint256,uint8)", u256(0x4266), u256(240)) == fromHex("4266000000000000000000000000000000000000000000000000000000000000"));
+ ABI_CHECK(callContractFunction("f(uint256,uint8)", u256(0x4266), u256(0)), encodeArgs(u256(0x4266)));
+ ABI_CHECK(callContractFunction("f(uint256,uint8)", u256(0x4266), u256(8)), encodeArgs(u256(0x426600)));
+ ABI_CHECK(callContractFunction("f(uint256,uint8)", u256(0x4266), u256(16)), encodeArgs(u256(0x42660000)));
+ ABI_CHECK(callContractFunction("f(uint256,uint8)", u256(0x4266), u256(17)), encodeArgs(u256(0x84cc0000)));
+ ABI_CHECK(callContractFunction("f(uint256,uint8)", u256(0x4266), u256(240)), fromHex("4266000000000000000000000000000000000000000000000000000000000000"));
}
BOOST_AUTO_TEST_CASE(shift_right)
@@ -9375,10 +9444,10 @@ BOOST_AUTO_TEST_CASE(shift_right)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(0)) == encodeArgs(u256(0x4266)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(8)) == encodeArgs(u256(0x42)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(16)) == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(17)) == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(0)), encodeArgs(u256(0x4266)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(8)), encodeArgs(u256(0x42)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(16)), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(17)), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_right_garbled)
@@ -9395,8 +9464,8 @@ BOOST_AUTO_TEST_CASE(shift_right_garbled)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint8,uint8)", u256(0x0), u256(4)) == encodeArgs(u256(0xf)));
- BOOST_CHECK(callContractFunction("f(uint8,uint8)", u256(0x0), u256(0x1004)) == encodeArgs(u256(0xf)));
+ ABI_CHECK(callContractFunction("f(uint8,uint8)", u256(0x0), u256(4)), encodeArgs(u256(0xf)));
+ ABI_CHECK(callContractFunction("f(uint8,uint8)", u256(0x0), u256(0x1004)), encodeArgs(u256(0xf)));
}
BOOST_AUTO_TEST_CASE(shift_right_uint32)
@@ -9409,10 +9478,10 @@ BOOST_AUTO_TEST_CASE(shift_right_uint32)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(0)) == encodeArgs(u256(0x4266)));
- BOOST_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(8)) == encodeArgs(u256(0x42)));
- BOOST_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(16)) == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(17)) == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(0)), encodeArgs(u256(0x4266)));
+ ABI_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(8)), encodeArgs(u256(0x42)));
+ ABI_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(16)), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(uint32,uint32)", u256(0x4266), u256(17)), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_right_uint8)
@@ -9425,8 +9494,8 @@ BOOST_AUTO_TEST_CASE(shift_right_uint8)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint8,uint8)", u256(0x66), u256(0)) == encodeArgs(u256(0x66)));
- BOOST_CHECK(callContractFunction("f(uint8,uint8)", u256(0x66), u256(8)) == encodeArgs(u256(0x0)));
+ ABI_CHECK(callContractFunction("f(uint8,uint8)", u256(0x66), u256(0)), encodeArgs(u256(0x66)));
+ ABI_CHECK(callContractFunction("f(uint8,uint8)", u256(0x66), u256(8)), encodeArgs(u256(0x0)));
}
BOOST_AUTO_TEST_CASE(shift_right_assignment)
@@ -9440,10 +9509,10 @@ BOOST_AUTO_TEST_CASE(shift_right_assignment)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(0)) == encodeArgs(u256(0x4266)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(8)) == encodeArgs(u256(0x42)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(16)) == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(17)) == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(0)), encodeArgs(u256(0x4266)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(8)), encodeArgs(u256(0x42)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(16)), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(uint256,uint256)", u256(0x4266), u256(17)), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_right_negative_lvalue)
@@ -9456,10 +9525,10 @@ BOOST_AUTO_TEST_CASE(shift_right_negative_lvalue)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(0)) == encodeArgs(u256(-4266)));
- BOOST_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(8)) == encodeArgs(u256(-16)));
- BOOST_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(16)) == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(17)) == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(0)), encodeArgs(u256(-4266)));
+ ABI_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(8)), encodeArgs(u256(-16)));
+ ABI_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(16)), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(17)), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_right_negative_lvalue_assignment)
@@ -9473,10 +9542,10 @@ BOOST_AUTO_TEST_CASE(shift_right_negative_lvalue_assignment)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(0)) == encodeArgs(u256(-4266)));
- BOOST_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(8)) == encodeArgs(u256(-16)));
- BOOST_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(16)) == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(17)) == encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(0)), encodeArgs(u256(-4266)));
+ ABI_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(8)), encodeArgs(u256(-16)));
+ ABI_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(16)), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("f(int256,int256)", u256(-4266), u256(17)), encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_negative_rvalue)
@@ -9492,8 +9561,8 @@ BOOST_AUTO_TEST_CASE(shift_negative_rvalue)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(int256,int256)", u256(1), u256(-1)) == encodeArgs());
- BOOST_CHECK(callContractFunction("g(int256,int256)", u256(1), u256(-1)) == encodeArgs());
+ ABI_CHECK(callContractFunction("f(int256,int256)", u256(1), u256(-1)), encodeArgs());
+ ABI_CHECK(callContractFunction("g(int256,int256)", u256(1), u256(-1)), encodeArgs());
}
BOOST_AUTO_TEST_CASE(shift_negative_rvalue_assignment)
@@ -9511,8 +9580,8 @@ BOOST_AUTO_TEST_CASE(shift_negative_rvalue_assignment)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(int256,int256)", u256(1), u256(-1)) == encodeArgs());
- BOOST_CHECK(callContractFunction("g(int256,int256)", u256(1), u256(-1)) == encodeArgs());
+ ABI_CHECK(callContractFunction("f(int256,int256)", u256(1), u256(-1)), encodeArgs());
+ ABI_CHECK(callContractFunction("g(int256,int256)", u256(1), u256(-1)), encodeArgs());
}
BOOST_AUTO_TEST_CASE(shift_constant_left_assignment)
@@ -9526,7 +9595,7 @@ BOOST_AUTO_TEST_CASE(shift_constant_left_assignment)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0x4200)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0x4200)));
}
BOOST_AUTO_TEST_CASE(shift_constant_right_assignment)
@@ -9540,7 +9609,7 @@ BOOST_AUTO_TEST_CASE(shift_constant_right_assignment)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0x42)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0x42)));
}
BOOST_AUTO_TEST_CASE(shift_cleanup)
@@ -9556,7 +9625,7 @@ BOOST_AUTO_TEST_CASE(shift_cleanup)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0x0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0x0)));
}
BOOST_AUTO_TEST_CASE(shift_cleanup_garbled)
@@ -9572,7 +9641,7 @@ BOOST_AUTO_TEST_CASE(shift_cleanup_garbled)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0x0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0x0)));
}
BOOST_AUTO_TEST_CASE(shift_overflow)
@@ -9588,13 +9657,13 @@ BOOST_AUTO_TEST_CASE(shift_overflow)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("leftU(uint8,uint8)", 255, 8) == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("leftU(uint8,uint8)", 255, 1) == encodeArgs(u256(254)));
- BOOST_CHECK(callContractFunction("leftU(uint8,uint8)", 255, 0) == encodeArgs(u256(255)));
+ ABI_CHECK(callContractFunction("leftU(uint8,uint8)", 255, 8), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("leftU(uint8,uint8)", 255, 1), encodeArgs(u256(254)));
+ ABI_CHECK(callContractFunction("leftU(uint8,uint8)", 255, 0), encodeArgs(u256(255)));
// Result is -128 and output is sign-extended, not zero-padded.
- BOOST_CHECK(callContractFunction("leftS(int8,int8)", 1, 7) == encodeArgs(u256(0) - 128));
- BOOST_CHECK(callContractFunction("leftS(int8,int8)", 1, 6) == encodeArgs(u256(64)));
+ ABI_CHECK(callContractFunction("leftS(int8,int8)", 1, 7), encodeArgs(u256(0) - 128));
+ ABI_CHECK(callContractFunction("leftS(int8,int8)", 1, 6), encodeArgs(u256(64)));
}
BOOST_AUTO_TEST_CASE(shift_bytes)
@@ -9610,8 +9679,8 @@ BOOST_AUTO_TEST_CASE(shift_bytes)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("left(bytes20,uint8)", "12345678901234567890", 8 * 8) == encodeArgs("901234567890" + string(8, 0)));
- BOOST_CHECK(callContractFunction("right(bytes20,uint8)", "12345678901234567890", 8 * 8) == encodeArgs(string(8, 0) + "123456789012"));
+ ABI_CHECK(callContractFunction("left(bytes20,uint8)", "12345678901234567890", 8 * 8), encodeArgs("901234567890" + string(8, 0)));
+ ABI_CHECK(callContractFunction("right(bytes20,uint8)", "12345678901234567890", 8 * 8), encodeArgs(string(8, 0) + "123456789012"));
}
BOOST_AUTO_TEST_CASE(shift_bytes_cleanup)
@@ -9631,8 +9700,8 @@ BOOST_AUTO_TEST_CASE(shift_bytes_cleanup)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("left(uint8)", 8 * 8) == encodeArgs("901234567890" + string(8, 0)));
- BOOST_CHECK(callContractFunction("right(uint8)", 8 * 8) == encodeArgs(string(8, 0) + "123456789012"));
+ ABI_CHECK(callContractFunction("left(uint8)", 8 * 8), encodeArgs("901234567890" + string(8, 0)));
+ ABI_CHECK(callContractFunction("right(uint8)", 8 * 8), encodeArgs(string(8, 0) + "123456789012"));
}
BOOST_AUTO_TEST_CASE(cleanup_in_compound_assign)
@@ -9650,7 +9719,7 @@ BOOST_AUTO_TEST_CASE(cleanup_in_compound_assign)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("test()") == encodeArgs(u256(0xff), u256(0xff)));
+ ABI_CHECK(callContractFunction("test()"), encodeArgs(u256(0xff), u256(0xff)));
}
BOOST_AUTO_TEST_CASE(inline_assembly_in_modifiers)
@@ -9672,7 +9741,7 @@ BOOST_AUTO_TEST_CASE(inline_assembly_in_modifiers)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(true));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(packed_storage_overflow)
@@ -9692,7 +9761,7 @@ BOOST_AUTO_TEST_CASE(packed_storage_overflow)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0x1234), u256(0), u256(0), u256(0xfffe)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0x1234), u256(0), u256(0), u256(0xfffe)));
}
BOOST_AUTO_TEST_CASE(contracts_separated_with_comment)
@@ -9756,7 +9825,7 @@ BOOST_AUTO_TEST_CASE(recursive_structs)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(invalid_instruction)
@@ -9771,7 +9840,7 @@ BOOST_AUTO_TEST_CASE(invalid_instruction)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs());
+ ABI_CHECK(callContractFunction("f()"), encodeArgs());
}
BOOST_AUTO_TEST_CASE(assert_require)
@@ -9792,11 +9861,11 @@ BOOST_AUTO_TEST_CASE(assert_require)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs());
- BOOST_CHECK(callContractFunction("g(bool)", false) == encodeArgs());
- BOOST_CHECK(callContractFunction("g(bool)", true) == encodeArgs(true));
- BOOST_CHECK(callContractFunction("h(bool)", false) == encodeArgs());
- BOOST_CHECK(callContractFunction("h(bool)", true) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs());
+ ABI_CHECK(callContractFunction("g(bool)", false), encodeArgs());
+ ABI_CHECK(callContractFunction("g(bool)", true), encodeArgs(true));
+ ABI_CHECK(callContractFunction("h(bool)", false), encodeArgs());
+ ABI_CHECK(callContractFunction("h(bool)", true), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(revert)
@@ -9817,10 +9886,10 @@ BOOST_AUTO_TEST_CASE(revert)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs());
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(42)));
- BOOST_CHECK(callContractFunction("g()") == encodeArgs());
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(42)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs());
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(42)));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs());
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(42)));
}
BOOST_AUTO_TEST_CASE(negative_stack_height)
@@ -9860,11 +9929,11 @@ BOOST_AUTO_TEST_CASE(literal_empty_string)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("g()") == encodeArgs());
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs());
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("a()"), encodeArgs(u256(2)));
}
BOOST_AUTO_TEST_CASE(scientific_notation)
@@ -9892,12 +9961,12 @@ BOOST_AUTO_TEST_CASE(scientific_notation)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(20000000000)));
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(2)));
- BOOST_CHECK(callContractFunction("h()") == encodeArgs(u256(25)));
- BOOST_CHECK(callContractFunction("i()") == encodeArgs(u256(-20000000000)));
- BOOST_CHECK(callContractFunction("j()") == encodeArgs(u256(-2)));
- BOOST_CHECK(callContractFunction("k()") == encodeArgs(u256(-25)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(20000000000)));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(2)));
+ ABI_CHECK(callContractFunction("h()"), encodeArgs(u256(25)));
+ ABI_CHECK(callContractFunction("i()"), encodeArgs(u256(-20000000000)));
+ ABI_CHECK(callContractFunction("j()"), encodeArgs(u256(-2)));
+ ABI_CHECK(callContractFunction("k()"), encodeArgs(u256(-25)));
}
BOOST_AUTO_TEST_CASE(interface_contract)
@@ -9932,7 +10001,7 @@ BOOST_AUTO_TEST_CASE(interface_contract)
compileAndRun(sourceCode, 0, "A");
u160 const recipient = m_contractAddress;
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f(address)", recipient) == encodeArgs(true));
+ ABI_CHECK(callContractFunction("f(address)", recipient), encodeArgs(true));
}
BOOST_AUTO_TEST_CASE(keccak256_assembly)
@@ -9968,10 +10037,10 @@ BOOST_AUTO_TEST_CASE(keccak256_assembly)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == fromHex("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"));
- BOOST_CHECK(callContractFunction("g()") == fromHex("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"));
- BOOST_CHECK(callContractFunction("h()") == fromHex("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"));
- BOOST_CHECK(callContractFunction("i()") == fromHex("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"));
+ ABI_CHECK(callContractFunction("f()"), fromHex("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"));
+ ABI_CHECK(callContractFunction("g()"), fromHex("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"));
+ ABI_CHECK(callContractFunction("h()"), fromHex("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"));
+ ABI_CHECK(callContractFunction("i()"), fromHex("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"));
}
BOOST_AUTO_TEST_CASE(multi_modifiers)
@@ -9995,10 +10064,10 @@ BOOST_AUTO_TEST_CASE(multi_modifiers)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f1()") == bytes());
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(8)));
- BOOST_CHECK(callContractFunction("f2()") == bytes());
- BOOST_CHECK(callContractFunction("x()") == encodeArgs(u256(12)));
+ ABI_CHECK(callContractFunction("f1()"), bytes());
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(8)));
+ ABI_CHECK(callContractFunction("f2()"), bytes());
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(12)));
}
BOOST_AUTO_TEST_CASE(inlineasm_empty_let)
@@ -10016,7 +10085,7 @@ BOOST_AUTO_TEST_CASE(inlineasm_empty_let)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0), u256(0)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0), u256(0)));
}
BOOST_AUTO_TEST_CASE(bare_call_invalid_address)
@@ -10036,9 +10105,9 @@ BOOST_AUTO_TEST_CASE(bare_call_invalid_address)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("h()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("h()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(delegatecall_return_value)
@@ -10064,17 +10133,17 @@ BOOST_AUTO_TEST_CASE(delegatecall_return_value)
}
)DELIMITER";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("get()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("assert0_delegated()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("get_delegated()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("set(uint256)", u256(1)) == encodeArgs());
- BOOST_CHECK(callContractFunction("get()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("assert0_delegated()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("get_delegated()") == encodeArgs(u256(1)));
- BOOST_CHECK(callContractFunction("set(uint256)", u256(42)) == encodeArgs());
- BOOST_CHECK(callContractFunction("get()") == encodeArgs(u256(42)));
- BOOST_CHECK(callContractFunction("assert0_delegated()") == encodeArgs(u256(0)));
- BOOST_CHECK(callContractFunction("get_delegated()") == encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("get()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("assert0_delegated()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("get_delegated()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("set(uint256)", u256(1)), encodeArgs());
+ ABI_CHECK(callContractFunction("get()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("assert0_delegated()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("get_delegated()"), encodeArgs(u256(1)));
+ ABI_CHECK(callContractFunction("set(uint256)", u256(42)), encodeArgs());
+ ABI_CHECK(callContractFunction("get()"), encodeArgs(u256(42)));
+ ABI_CHECK(callContractFunction("assert0_delegated()"), encodeArgs(u256(0)));
+ ABI_CHECK(callContractFunction("get_delegated()"), encodeArgs(u256(1)));
}
BOOST_AUTO_TEST_CASE(function_types_sig)
@@ -10096,9 +10165,9 @@ BOOST_AUTO_TEST_CASE(function_types_sig)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeArgs(asString(FixedHash<4>(dev::keccak256("f()")).asBytes())));
- BOOST_CHECK(callContractFunction("g()") == encodeArgs(asString(FixedHash<4>(dev::keccak256("f()")).asBytes())));
- BOOST_CHECK(callContractFunction("h()") == encodeArgs(asString(FixedHash<4>(dev::keccak256("f()")).asBytes())));
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(asString(FixedHash<4>(dev::keccak256("f()")).asBytes())));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(asString(FixedHash<4>(dev::keccak256("f()")).asBytes())));
+ ABI_CHECK(callContractFunction("h()"), encodeArgs(asString(FixedHash<4>(dev::keccak256("f()")).asBytes())));
}
BOOST_AUTO_TEST_CASE(constant_string)
@@ -10120,9 +10189,335 @@ BOOST_AUTO_TEST_CASE(constant_string)
}
)";
compileAndRun(sourceCode, 0, "C");
- BOOST_CHECK(callContractFunction("f()") == encodeDyn(string("\x03\x01\x02")));
- BOOST_CHECK(callContractFunction("g()") == encodeDyn(string("\x03\x01\x02")));
- BOOST_CHECK(callContractFunction("h()") == encodeDyn(string("hello")));
+ ABI_CHECK(callContractFunction("f()"), encodeDyn(string("\x03\x01\x02")));
+ ABI_CHECK(callContractFunction("g()"), encodeDyn(string("\x03\x01\x02")));
+ ABI_CHECK(callContractFunction("h()"), encodeDyn(string("hello")));
+}
+
+BOOST_AUTO_TEST_CASE(address_overload_resolution)
+{
+ char const* sourceCode = R"(
+ contract C {
+ function balance() returns (uint) {
+ return 1;
+ }
+ function transfer(uint amount) returns (uint) {
+ return amount;
+ }
+ }
+ contract D {
+ function f() returns (uint) {
+ return (new C()).balance();
+ }
+ function g() returns (uint) {
+ return (new C()).transfer(5);
+ }
+ }
+ )";
+ compileAndRun(sourceCode, 0, "D");
+ BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1)));
+ BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(5)));
+}
+
+BOOST_AUTO_TEST_CASE(snark)
+{
+ char const* sourceCode = R"(
+ library Pairing {
+ struct G1Point {
+ uint X;
+ uint Y;
+ }
+ // Encoding of field elements is: X[0] * z + X[1]
+ struct G2Point {
+ uint[2] X;
+ uint[2] Y;
+ }
+
+ /// @return the generator of G1
+ function P1() internal returns (G1Point) {
+ return G1Point(1, 2);
+ }
+
+ /// @return the generator of G2
+ function P2() internal returns (G2Point) {
+ return G2Point(
+ [11559732032986387107991004021392285783925812861821192530917403151452391805634,
+ 10857046999023057135944570762232829481370756359578518086990519993285655852781],
+ [4082367875863433681332203403145435568316851327593401208105741076214120093531,
+ 8495653923123431417604973247489272438418190587263600148770280649306958101930]
+ );
+ }
+
+ /// @return the negation of p, i.e. p.add(p.negate()) should be zero.
+ function negate(G1Point p) internal returns (G1Point) {
+ // The prime q in the base field F_q for G1
+ uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583;
+ if (p.X == 0 && p.Y == 0)
+ return G1Point(0, 0);
+ return G1Point(p.X, q - (p.Y % q));
+ }
+
+ /// @return the sum of two points of G1
+ function add(G1Point p1, G1Point p2) internal returns (G1Point r) {
+ uint[4] memory input;
+ input[0] = p1.X;
+ input[1] = p1.Y;
+ input[2] = p2.X;
+ input[3] = p2.Y;
+ bool success;
+ assembly {
+ success := call(sub(gas, 2000), 6, 0, input, 0xc0, r, 0x60)
+ // Use "invalid" to make gas estimation work
+ switch success case 0 { invalid() }
+ }
+ require(success);
+ }
+
+ /// @return the product of a point on G1 and a scalar, i.e.
+ /// p == p.mul(1) and p.add(p) == p.mul(2) for all points p.
+ function mul(G1Point p, uint s) internal returns (G1Point r) {
+ uint[3] memory input;
+ input[0] = p.X;
+ input[1] = p.Y;
+ input[2] = s;
+ bool success;
+ assembly {
+ success := call(sub(gas, 2000), 7, 0, input, 0x80, r, 0x60)
+ // Use "invalid" to make gas estimation work
+ switch success case 0 { invalid() }
+ }
+ require(success);
+ }
+
+ /// @return the result of computing the pairing check
+ /// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1
+ /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should
+ /// return true.
+ function pairing(G1Point[] p1, G2Point[] p2) internal returns (bool) {
+ require(p1.length == p2.length);
+ uint elements = p1.length;
+ uint inputSize = p1.length * 6;
+ uint[] memory input = new uint[](inputSize);
+ for (uint i = 0; i < elements; i++)
+ {
+ input[i * 6 + 0] = p1[i].X;
+ input[i * 6 + 1] = p1[i].Y;
+ input[i * 6 + 2] = p2[i].X[0];
+ input[i * 6 + 3] = p2[i].X[1];
+ input[i * 6 + 4] = p2[i].Y[0];
+ input[i * 6 + 5] = p2[i].Y[1];
+ }
+ uint[1] memory out;
+ bool success;
+ assembly {
+ success := call(sub(gas, 2000), 8, 0, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)
+ // Use "invalid" to make gas estimation work
+ switch success case 0 { invalid() }
+ }
+ require(success);
+ return out[0] != 0;
+ }
+ function pairingProd2(G1Point a1, G2Point a2, G1Point b1, G2Point b2) internal returns (bool) {
+ G1Point[] memory p1 = new G1Point[](2);
+ G2Point[] memory p2 = new G2Point[](2);
+ p1[0] = a1;
+ p1[1] = b1;
+ p2[0] = a2;
+ p2[1] = b2;
+ return pairing(p1, p2);
+ }
+ function pairingProd3(
+ G1Point a1, G2Point a2,
+ G1Point b1, G2Point b2,
+ G1Point c1, G2Point c2
+ ) internal returns (bool) {
+ G1Point[] memory p1 = new G1Point[](3);
+ G2Point[] memory p2 = new G2Point[](3);
+ p1[0] = a1;
+ p1[1] = b1;
+ p1[2] = c1;
+ p2[0] = a2;
+ p2[1] = b2;
+ p2[2] = c2;
+ return pairing(p1, p2);
+ }
+ function pairingProd4(
+ G1Point a1, G2Point a2,
+ G1Point b1, G2Point b2,
+ G1Point c1, G2Point c2,
+ G1Point d1, G2Point d2
+ ) internal returns (bool) {
+ G1Point[] memory p1 = new G1Point[](4);
+ G2Point[] memory p2 = new G2Point[](4);
+ p1[0] = a1;
+ p1[1] = b1;
+ p1[2] = c1;
+ p1[3] = d1;
+ p2[0] = a2;
+ p2[1] = b2;
+ p2[2] = c2;
+ p2[3] = d2;
+ return pairing(p1, p2);
+ }
+ }
+
+ contract Test {
+ using Pairing for *;
+ struct VerifyingKey {
+ Pairing.G2Point A;
+ Pairing.G1Point B;
+ Pairing.G2Point C;
+ Pairing.G2Point gamma;
+ Pairing.G1Point gammaBeta1;
+ Pairing.G2Point gammaBeta2;
+ Pairing.G2Point Z;
+ Pairing.G1Point[] IC;
+ }
+ struct Proof {
+ Pairing.G1Point A;
+ Pairing.G1Point A_p;
+ Pairing.G2Point B;
+ Pairing.G1Point B_p;
+ Pairing.G1Point C;
+ Pairing.G1Point C_p;
+ Pairing.G1Point K;
+ Pairing.G1Point H;
+ }
+ function f() returns (bool) {
+ Pairing.G1Point memory p1;
+ Pairing.G1Point memory p2;
+ p1.X = 1; p1.Y = 2;
+ p2.X = 1; p2.Y = 2;
+ var explict_sum = Pairing.add(p1, p2);
+ var scalar_prod = Pairing.mul(p1, 2);
+ return (explict_sum.X == scalar_prod.X &&
+ explict_sum.Y == scalar_prod.Y);
+ }
+ function g() returns (bool) {
+ Pairing.G1Point memory x = Pairing.add(Pairing.P1(), Pairing.negate(Pairing.P1()));
+ // should be zero
+ return (x.X == 0 && x.Y == 0);
+ }
+ function testMul() returns (bool) {
+ Pairing.G1Point memory p;
+ // @TODO The points here are reported to be not well-formed
+ p.X = 14125296762497065001182820090155008161146766663259912659363835465243039841726;
+ p.Y = 16229134936871442251132173501211935676986397196799085184804749187146857848057;
+ p = Pairing.mul(p, 13986731495506593864492662381614386532349950841221768152838255933892789078521);
+ return
+ p.X == 18256332256630856740336504687838346961237861778318632856900758565550522381207 &&
+ p.Y == 6976682127058094634733239494758371323697222088503263230319702770853579280803;
+ }
+ function pair() returns (bool) {
+ Pairing.G2Point memory fiveTimesP2 = Pairing.G2Point(
+ [4540444681147253467785307942530223364530218361853237193970751657229138047649, 20954117799226682825035885491234530437475518021362091509513177301640194298072],
+ [11631839690097995216017572651900167465857396346217730511548857041925508482915, 21508930868448350162258892668132814424284302804699005394342512102884055673846]
+ );
+ // The prime p in the base field F_p for G1
+ uint p = 21888242871839275222246405745257275088696311157297823662689037894645226208583;
+ Pairing.G1Point[] memory g1points = new Pairing.G1Point[](2);
+ Pairing.G2Point[] memory g2points = new Pairing.G2Point[](2);
+ // check e(5 P1, P2)e(-P1, 5 P2) == 1
+ g1points[0] = Pairing.P1().mul(5);
+ g1points[1] = Pairing.P1().negate();
+ g2points[0] = Pairing.P2();
+ g2points[1] = fiveTimesP2;
+ if (!Pairing.pairing(g1points, g2points))
+ return false;
+ // check e(P1, P2)e(-P1, P2) == 1
+ g1points[0] = Pairing.P1();
+ g1points[1] = Pairing.P1();
+ g1points[1].Y = p - g1points[1].Y;
+ g2points[0] = Pairing.P2();
+ g2points[1] = Pairing.P2();
+ if (!Pairing.pairing(g1points, g2points))
+ return false;
+ return true;
+ }
+ function verifyingKey() internal returns (VerifyingKey vk) {
+ vk.A = Pairing.G2Point([0x209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7, 0x04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678], [0x2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d, 0x120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550]);
+ vk.B = Pairing.G1Point(0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02, 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84);
+ vk.C = Pairing.G2Point([0x2e89718ad33c8bed92e210e81d1853435399a271913a6520736a4729cf0d51eb, 0x01a9e2ffa2e92599b68e44de5bcf354fa2642bd4f26b259daa6f7ce3ed57aeb3], [0x14a9a87b789a58af499b314e13c3d65bede56c07ea2d418d6874857b70763713, 0x178fb49a2d6cd347dc58973ff49613a20757d0fcc22079f9abd10c3baee24590]);
+ vk.gamma = Pairing.G2Point([0x25f83c8b6ab9de74e7da488ef02645c5a16a6652c3c71a15dc37fe3a5dcb7cb1, 0x22acdedd6308e3bb230d226d16a105295f523a8a02bfc5e8bd2da135ac4c245d], [0x065bbad92e7c4e31bf3757f1fe7362a63fbfee50e7dc68da116e67d600d9bf68, 0x06d302580dc0661002994e7cd3a7f224e7ddc27802777486bf80f40e4ca3cfdb]);
+ vk.gammaBeta1 = Pairing.G1Point(0x15794ab061441e51d01e94640b7e3084a07e02c78cf3103c542bc5b298669f21, 0x14db745c6780e9df549864cec19c2daf4531f6ec0c89cc1c7436cc4d8d300c6d);
+ vk.gammaBeta2 = Pairing.G2Point([0x1f39e4e4afc4bc74790a4a028aff2c3d2538731fb755edefd8cb48d6ea589b5e, 0x283f150794b6736f670d6a1033f9b46c6f5204f50813eb85c8dc4b59db1c5d39], [0x140d97ee4d2b36d99bc49974d18ecca3e7ad51011956051b464d9e27d46cc25e, 0x0764bb98575bd466d32db7b15f582b2d5c452b36aa394b789366e5e3ca5aabd4]);
+ vk.Z = Pairing.G2Point([0x217cee0a9ad79a4493b5253e2e4e3a39fc2df38419f230d341f60cb064a0ac29, 0x0a3d76f140db8418ba512272381446eb73958670f00cf46f1d9e64cba057b53c], [0x26f64a8ec70387a13e41430ed3ee4a7db2059cc5fc13c067194bcc0cb49a9855, 0x2fd72bd9edb657346127da132e5b82ab908f5816c826acb499e22f2412d1a2d7]);
+ vk.IC = new Pairing.G1Point[](10);
+ vk.IC[0] = Pairing.G1Point(0x0aee46a7ea6e80a3675026dfa84019deee2a2dedb1bbe11d7fe124cb3efb4b5a, 0x044747b6e9176e13ede3a4dfd0d33ccca6321b9acd23bf3683a60adc0366ebaf);
+ vk.IC[1] = Pairing.G1Point(0x1e39e9f0f91fa7ff8047ffd90de08785777fe61c0e3434e728fce4cf35047ddc, 0x2e0b64d75ebfa86d7f8f8e08abbe2e7ae6e0a1c0b34d028f19fa56e9450527cb);
+ vk.IC[2] = Pairing.G1Point(0x1c36e713d4d54e3a9644dffca1fc524be4868f66572516025a61ca542539d43f, 0x042dcc4525b82dfb242b09cb21909d5c22643dcdbe98c4d082cc2877e96b24db);
+ vk.IC[3] = Pairing.G1Point(0x17d5d09b4146424bff7e6fb01487c477bbfcd0cdbbc92d5d6457aae0b6717cc5, 0x02b5636903efbf46db9235bbe74045d21c138897fda32e079040db1a16c1a7a1);
+ vk.IC[4] = Pairing.G1Point(0x0f103f14a584d4203c27c26155b2c955f8dfa816980b24ba824e1972d6486a5d, 0x0c4165133b9f5be17c804203af781bcf168da7386620479f9b885ecbcd27b17b);
+ vk.IC[5] = Pairing.G1Point(0x232063b584fb76c8d07995bee3a38fa7565405f3549c6a918ddaa90ab971e7f8, 0x2ac9b135a81d96425c92d02296322ad56ffb16299633233e4880f95aafa7fda7);
+ vk.IC[6] = Pairing.G1Point(0x09b54f111d3b2d1b2fe1ae9669b3db3d7bf93b70f00647e65c849275de6dc7fe, 0x18b2e77c63a3e400d6d1f1fbc6e1a1167bbca603d34d03edea231eb0ab7b14b4);
+ vk.IC[7] = Pairing.G1Point(0x0c54b42137b67cc268cbb53ac62b00ecead23984092b494a88befe58445a244a, 0x18e3723d37fae9262d58b548a0575f59d9c3266db7afb4d5739555837f6b8b3e);
+ vk.IC[8] = Pairing.G1Point(0x0a6de0e2240aa253f46ce0da883b61976e3588146e01c9d8976548c145fe6e4a, 0x04fbaa3a4aed4bb77f30ebb07a3ec1c7d77a7f2edd75636babfeff97b1ea686e);
+ vk.IC[9] = Pairing.G1Point(0x111e2e2a5f8828f80ddad08f9f74db56dac1cc16c1cb278036f79a84cf7a116f, 0x1d7d62e192b219b9808faa906c5ced871788f6339e8d91b83ac1343e20a16b30);
+ }
+ function verify(uint[] input, Proof proof) internal returns (uint) {
+ VerifyingKey memory vk = verifyingKey();
+ require(input.length + 1 == vk.IC.length);
+ // Compute the linear combination vk_x
+ Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0);
+ for (uint i = 0; i < input.length; i++)
+ vk_x = Pairing.add(vk_x, Pairing.mul(vk.IC[i + 1], input[i]));
+ vk_x = Pairing.add(vk_x, vk.IC[0]);
+ if (!Pairing.pairingProd2(proof.A, vk.A, Pairing.negate(proof.A_p), Pairing.P2())) return 1;
+ if (!Pairing.pairingProd2(vk.B, proof.B, Pairing.negate(proof.B_p), Pairing.P2())) return 2;
+ if (!Pairing.pairingProd2(proof.C, vk.C, Pairing.negate(proof.C_p), Pairing.P2())) return 3;
+ if (!Pairing.pairingProd3(
+ proof.K, vk.gamma,
+ Pairing.negate(Pairing.add(vk_x, Pairing.add(proof.A, proof.C))), vk.gammaBeta2,
+ Pairing.negate(vk.gammaBeta1), proof.B
+ )) return 4;
+ if (!Pairing.pairingProd3(
+ Pairing.add(vk_x, proof.A), proof.B,
+ Pairing.negate(proof.H), vk.Z,
+ Pairing.negate(proof.C), Pairing.P2()
+ )) return 5;
+ return 0;
+ }
+ event Verified(string);
+ function verifyTx() returns (bool) {
+ uint[] memory input = new uint[](9);
+ Proof memory proof;
+ proof.A = Pairing.G1Point(12873740738727497448187997291915224677121726020054032516825496230827252793177, 21804419174137094775122804775419507726154084057848719988004616848382402162497);
+ proof.A_p = Pairing.G1Point(7742452358972543465462254569134860944739929848367563713587808717088650354556, 7324522103398787664095385319014038380128814213034709026832529060148225837366);
+ proof.B = Pairing.G2Point(
+ [8176651290984905087450403379100573157708110416512446269839297438960217797614, 15588556568726919713003060429893850972163943674590384915350025440408631945055],
+ [15347511022514187557142999444367533883366476794364262773195059233657571533367, 4265071979090628150845437155927259896060451682253086069461962693761322642015]);
+ proof.B_p = Pairing.G1Point(2979746655438963305714517285593753729335852012083057917022078236006592638393, 6470627481646078059765266161088786576504622012540639992486470834383274712950);
+ proof.C = Pairing.G1Point(6851077925310461602867742977619883934042581405263014789956638244065803308498, 10336382210592135525880811046708757754106524561907815205241508542912494488506);
+ proof.C_p = Pairing.G1Point(12491625890066296859584468664467427202390981822868257437245835716136010795448, 13818492518017455361318553880921248537817650587494176379915981090396574171686);
+ proof.H = Pairing.G1Point(12091046215835229523641173286701717671667447745509192321596954139357866668225, 14446807589950902476683545679847436767890904443411534435294953056557941441758);
+ proof.K = Pairing.G1Point(21341087976609916409401737322664290631992568431163400450267978471171152600502, 2942165230690572858696920423896381470344658299915828986338281196715687693170);
+ input[0] = 13986731495506593864492662381614386532349950841221768152838255933892789078521;
+ input[1] = 622860516154313070522697309645122400675542217310916019527100517240519630053;
+ input[2] = 11094488463398718754251685950409355128550342438297986977413505294941943071569;
+ input[3] = 6627643779954497813586310325594578844876646808666478625705401786271515864467;
+ input[4] = 2957286918163151606545409668133310005545945782087581890025685458369200827463;
+ input[5] = 1384290496819542862903939282897996566903332587607290986044945365745128311081;
+ input[6] = 5613571677741714971687805233468747950848449704454346829971683826953541367271;
+ input[7] = 9643208548031422463313148630985736896287522941726746581856185889848792022807;
+ input[8] = 18066496933330839731877828156604;
+ if (verify(input, proof) == 0) {
+ Verified("Transaction successfully verified.");
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ }
+ )";
+ compileAndRun(sourceCode, 0, "Pairing");
+ compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Pairing", m_contractAddress}});
+ // Disabled because the point seems to be not well-formed, we need to find another example.
+ //BOOST_CHECK(callContractFunction("testMul()") == encodeArgs(true));
+ BOOST_CHECK(callContractFunction("f()") == encodeArgs(true));
+ BOOST_CHECK(callContractFunction("g()") == encodeArgs(true));
+ BOOST_CHECK(callContractFunction("pair()") == encodeArgs(true));
+ BOOST_CHECK(callContractFunction("verifyTx()") == encodeArgs(true));
}
BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/libsolidity/SolidityExecutionFramework.h b/test/libsolidity/SolidityExecutionFramework.h
index a8e58c25..342d0875 100644
--- a/test/libsolidity/SolidityExecutionFramework.h
+++ b/test/libsolidity/SolidityExecutionFramework.h
@@ -24,7 +24,7 @@
#include <functional>
-#include "../ExecutionFramework.h"
+#include <test/ExecutionFramework.h>
#include <libsolidity/interface/CompilerStack.h>
#include <libsolidity/interface/Exceptions.h>
diff --git a/test/libsolidity/SolidityExpressionCompiler.cpp b/test/libsolidity/SolidityExpressionCompiler.cpp
index 58efa0a2..67747386 100644
--- a/test/libsolidity/SolidityExpressionCompiler.cpp
+++ b/test/libsolidity/SolidityExpressionCompiler.cpp
@@ -125,7 +125,7 @@ bytes compileFirstExpression(
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
{
- ETH_TEST_REQUIRE_NO_THROW(resolver.resolveNamesAndTypes(*contract), "Resolving names failed");
+ BOOST_REQUIRE_MESSAGE(resolver.resolveNamesAndTypes(*contract), "Resolving names failed");
inheritanceHierarchy = vector<ContractDefinition const*>(1, contract);
}
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp
index 39c47f9c..9b0647bf 100644
--- a/test/libsolidity/SolidityNameAndTypeResolution.cpp
+++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp
@@ -1395,6 +1395,61 @@ BOOST_AUTO_TEST_CASE(events_with_same_name)
BOOST_CHECK(success(text));
}
+BOOST_AUTO_TEST_CASE(events_with_same_name_unnamed_arguments)
+{
+ char const* text = R"(
+ contract test {
+ event A(uint);
+ event A(uint, uint);
+ }
+ )";
+ CHECK_SUCCESS(text);
+}
+
+BOOST_AUTO_TEST_CASE(events_with_same_name_different_types)
+{
+ char const* text = R"(
+ contract test {
+ event A(uint);
+ event A(bytes);
+ }
+ )";
+ CHECK_SUCCESS(text);
+}
+
+BOOST_AUTO_TEST_CASE(double_event_declaration)
+{
+ char const* text = R"(
+ contract test {
+ event A(uint i);
+ event A(uint i);
+ }
+ )";
+ CHECK_ERROR(text, DeclarationError, "Event with same name and arguments defined twice.");
+}
+
+BOOST_AUTO_TEST_CASE(double_event_declaration_ignores_anonymous)
+{
+ char const* text = R"(
+ contract test {
+ event A(uint i);
+ event A(uint i) anonymous;
+ }
+ )";
+ CHECK_ERROR(text, DeclarationError, "Event with same name and arguments defined twice.");
+}
+
+BOOST_AUTO_TEST_CASE(double_event_declaration_ignores_indexed)
+{
+ char const* text = R"(
+ contract test {
+ event A(uint i);
+ event A(uint indexed i);
+ }
+ )";
+ CHECK_ERROR(text, DeclarationError, "Event with same name and arguments defined twice.");
+}
+
BOOST_AUTO_TEST_CASE(event_call)
{
char const* text = R"(
@@ -2306,17 +2361,28 @@ BOOST_AUTO_TEST_CASE(assigning_value_to_const_variable)
CHECK_ERROR(text, TypeError, "Cannot assign to a constant variable.");
}
-BOOST_AUTO_TEST_CASE(assigning_state_to_const_variable)
+BOOST_AUTO_TEST_CASE(assigning_state_to_const_variable_0_4_x)
{
char const* text = R"(
contract C {
address constant x = msg.sender;
}
)";
- // Change to TypeError for 0.5.0.
CHECK_WARNING(text, "Initial value for constant variable has to be compile-time constant.");
}
+BOOST_AUTO_TEST_CASE(assigning_state_to_const_variable)
+{
+ char const* text = R"(
+ pragma experimental "v0.5.0";
+
+ contract C {
+ address constant x = msg.sender;
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Initial value for constant variable has to be compile-time constant.");
+}
+
BOOST_AUTO_TEST_CASE(constant_string_literal_disallows_assignment)
{
char const* text = R"(
@@ -2333,7 +2399,7 @@ BOOST_AUTO_TEST_CASE(constant_string_literal_disallows_assignment)
CHECK_ERROR(text, TypeError, "Index access for string is not possible.");
}
-BOOST_AUTO_TEST_CASE(assign_constant_function_value_to_constant)
+BOOST_AUTO_TEST_CASE(assign_constant_function_value_to_constant_0_4_x)
{
char const* text = R"(
contract C {
@@ -2341,10 +2407,22 @@ BOOST_AUTO_TEST_CASE(assign_constant_function_value_to_constant)
uint constant y = x();
}
)";
- // Change to TypeError for 0.5.0.
CHECK_WARNING(text, "Initial value for constant variable has to be compile-time constant.");
}
+BOOST_AUTO_TEST_CASE(assign_constant_function_value_to_constant)
+{
+ char const* text = R"(
+ pragma experimental "v0.5.0";
+
+ contract C {
+ function () constant returns (uint) x;
+ uint constant y = x();
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Initial value for constant variable has to be compile-time constant.");
+}
+
BOOST_AUTO_TEST_CASE(assignment_to_const_var_involving_conversion)
{
char const* text = R"(
@@ -4135,6 +4213,8 @@ BOOST_AUTO_TEST_CASE(rational_unary_operation)
}
)";
CHECK_SUCCESS_NO_WARNINGS(text);
+
+ // Test deprecation warning under < 0.5.0
text = R"(
contract test {
function f() pure public {
@@ -4154,6 +4234,29 @@ BOOST_AUTO_TEST_CASE(rational_unary_operation)
}
)";
CHECK_WARNING(text,"Use of unary + is deprecated");
+
+ // Test syntax error under 0.5.0
+ text = R"(
+ pragma experimental "v0.5.0";
+ contract test {
+ function f() pure public {
+ ufixed16x2 a = +3.25;
+ fixed16x2 b = -3.25;
+ a; b;
+ }
+ }
+ )";
+ CHECK_ERROR(text, SyntaxError, "Use of unary + is deprecated");
+ text = R"(
+ pragma experimental "v0.5.0";
+ contract test {
+ function f(uint x) pure public {
+ uint y = +x;
+ y;
+ }
+ }
+ )";
+ CHECK_ERROR(text, SyntaxError, "Use of unary + is deprecated");
}
BOOST_AUTO_TEST_CASE(leading_zero_rationals_convert)
@@ -4251,7 +4354,7 @@ BOOST_AUTO_TEST_CASE(invalid_array_declaration_with_rational)
}
}
)";
- CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal");
+ CHECK_ERROR(text, TypeError, "Array with fractional length specified.");
}
BOOST_AUTO_TEST_CASE(invalid_array_declaration_with_signed_fixed_type)
@@ -4263,7 +4366,7 @@ BOOST_AUTO_TEST_CASE(invalid_array_declaration_with_signed_fixed_type)
}
}
)";
- CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal");
+ CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal.");
}
BOOST_AUTO_TEST_CASE(invalid_array_declaration_with_unsigned_fixed_type)
@@ -4275,7 +4378,7 @@ BOOST_AUTO_TEST_CASE(invalid_array_declaration_with_unsigned_fixed_type)
}
}
)";
- CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal");
+ CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal.");
}
BOOST_AUTO_TEST_CASE(rational_to_bytes_implicit_conversion)
@@ -5434,7 +5537,7 @@ BOOST_AUTO_TEST_CASE(invalid_mobile_type)
}
}
)";
- CHECK_ERROR(text, TypeError, "Invalid mobile type.");
+ CHECK_ERROR(text, TypeError, "Invalid rational number.");
}
BOOST_AUTO_TEST_CASE(warns_msg_value_in_non_payable_public_function)
@@ -5776,6 +5879,28 @@ BOOST_AUTO_TEST_CASE(interface_function_bodies)
CHECK_ERROR(text, TypeError, "Functions in interfaces cannot have an implementation");
}
+BOOST_AUTO_TEST_CASE(interface_function_external)
+{
+ char const* text = R"(
+ pragma experimental "v0.5.0";
+ interface I {
+ function f() external;
+ }
+ )";
+ success(text);
+}
+
+BOOST_AUTO_TEST_CASE(interface_function_public)
+{
+ char const* text = R"(
+ pragma experimental "v0.5.0";
+ interface I {
+ function f() public;
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Functions in interfaces must be declared external.");
+}
+
BOOST_AUTO_TEST_CASE(interface_function_internal)
{
char const* text = R"(
@@ -6107,6 +6232,26 @@ BOOST_AUTO_TEST_CASE(warn_unused_return_parameter)
CHECK_SUCCESS_NO_WARNINGS(text);
}
+BOOST_AUTO_TEST_CASE(no_unused_warning_interface_arguments)
+{
+ char const* text = R"(
+ interface I {
+ function f(uint a) pure public returns (uint b);
+ }
+ )";
+ CHECK_SUCCESS_NO_WARNINGS(text);
+}
+
+BOOST_AUTO_TEST_CASE(no_unused_warning_abstract_arguments)
+{
+ char const* text = R"(
+ contract C {
+ function f(uint a) pure public returns (uint b);
+ }
+ )";
+ CHECK_SUCCESS_NO_WARNINGS(text);
+}
+
BOOST_AUTO_TEST_CASE(no_unused_warnings)
{
char const* text = R"(
@@ -6268,6 +6413,17 @@ BOOST_AUTO_TEST_CASE(function_override_is_not_shadowing)
CHECK_SUCCESS_NO_WARNINGS(text);
}
+BOOST_AUTO_TEST_CASE(event_parameter_cannot_shadow_state_variable)
+{
+ char const* text = R"(
+ contract C {
+ address a;
+ event E(address a);
+ }
+ )";
+ CHECK_SUCCESS_NO_WARNINGS(text);
+}
+
BOOST_AUTO_TEST_CASE(callable_crash)
{
char const* text = R"(
@@ -6409,7 +6565,19 @@ BOOST_AUTO_TEST_CASE(warn_unspecified_storage)
}
}
)";
- CHECK_WARNING(text, "is declared as a storage pointer. Use an explicit \"storage\" keyword to silence this warning");
+ CHECK_WARNING(text, "Variable is declared as a storage pointer. Use an explicit \"storage\" keyword to silence this warning");
+ text = R"(
+ pragma experimental "v0.5.0";
+ contract C {
+ struct S { uint a; }
+ S x;
+ function f() view public {
+ S y = x;
+ y;
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Storage location must be specified as either \"memory\" or \"storage\".");
}
BOOST_AUTO_TEST_CASE(implicit_conversion_disallowed)
@@ -6928,6 +7096,53 @@ BOOST_AUTO_TEST_CASE(non_external_fallback)
CHECK_ERROR(text, TypeError, "Fallback function must be defined as \"external\".");
}
+BOOST_AUTO_TEST_CASE(invalid_literal_in_tuple)
+{
+ char const* text = R"(
+ contract C {
+ function f() pure public {
+ uint x;
+ (x, ) = (1E111);
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "is not implicitly convertible to expected type");
+ text = R"(
+ contract C {
+ function f() pure public {
+ uint x;
+ (x, ) = (1, 1E111);
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Invalid rational number.");
+ text = R"(
+ contract C {
+ function f() pure public {
+ uint x;
+ (x, ) = (1E111, 1);
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Invalid rational number.");
+ text = R"(
+ contract C {
+ function f() pure public {
+ (2**270, 1);
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Invalid rational number.");
+ text = R"(
+ contract C {
+ function f() pure public {
+ ((2**270) / 2**100, 1);
+ }
+ }
+ )";
+ CHECK_SUCCESS(text);
+}
+
BOOST_AUTO_TEST_CASE(warn_about_sha3)
{
char const* text = R"(
@@ -6953,6 +7168,135 @@ BOOST_AUTO_TEST_CASE(warn_about_suicide)
CHECK_WARNING(text, "\"suicide\" has been deprecated in favour of \"selfdestruct\"");
}
+BOOST_AUTO_TEST_CASE(address_overload_resolution)
+{
+ char const* text = R"(
+ contract C {
+ function balance() returns (uint) {
+ this.balance; // to avoid pureness warning
+ return 1;
+ }
+ function transfer(uint amount) {
+ address(this).transfer(amount); // to avoid pureness warning
+ }
+ }
+ contract D {
+ function f() {
+ var x = (new C()).balance();
+ x;
+ (new C()).transfer(5);
+ }
+ }
+ )";
+ CHECK_SUCCESS(text);
+}
+
+BOOST_AUTO_TEST_CASE(array_length_too_large)
+{
+ char const* text = R"(
+ contract C {
+ uint[8**90] ids;
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal.");
+}
+
+BOOST_AUTO_TEST_CASE(array_length_not_convertible_to_integer)
+{
+ char const* text = R"(
+ contract C {
+ uint[true] ids;
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal.");
+}
+
+BOOST_AUTO_TEST_CASE(array_length_invalid_expression)
+{
+ char const* text = R"(
+ contract C {
+ uint[-true] ids;
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Invalid constant expression.");
+ text = R"(
+ contract C {
+ uint[true/1] ids;
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Invalid constant expression.");
+ text = R"(
+ contract C {
+ uint[1/true] ids;
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Invalid constant expression.");
+ text = R"(
+ contract C {
+ uint[1.111111E1111111111111] ids;
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Invalid literal value.");
+}
+
+BOOST_AUTO_TEST_CASE(no_address_members_on_contract)
+{
+ char const* text = R"(
+ pragma experimental "v0.5.0";
+ contract C {
+ function f() {
+ this.balance;
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Member \"balance\" not found or not visible after argument-dependent lookup in contract");
+ text = R"(
+ pragma experimental "v0.5.0";
+ contract C {
+ function f() {
+ this.transfer;
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Member \"transfer\" not found or not visible after argument-dependent lookup in contract");
+ text = R"(
+ pragma experimental "v0.5.0";
+ contract C {
+ function f() {
+ this.send;
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Member \"send\" not found or not visible after argument-dependent lookup in contract");
+ text = R"(
+ pragma experimental "v0.5.0";
+ contract C {
+ function f() {
+ this.call;
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Member \"call\" not found or not visible after argument-dependent lookup in contract");
+ text = R"(
+ pragma experimental "v0.5.0";
+ contract C {
+ function f() {
+ this.callcode;
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Member \"callcode\" not found or not visible after argument-dependent lookup in contract");
+ text = R"(
+ pragma experimental "v0.5.0";
+ contract C {
+ function f() {
+ this.delegatecall;
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Member \"delegatecall\" not found or not visible after argument-dependent lookup in contract");
+}
+
BOOST_AUTO_TEST_SUITE_END()
}
diff --git a/test/libsolidity/SolidityNatspecJSON.cpp b/test/libsolidity/SolidityNatspecJSON.cpp
index 149221d5..d83773bc 100644
--- a/test/libsolidity/SolidityNatspecJSON.cpp
+++ b/test/libsolidity/SolidityNatspecJSON.cpp
@@ -47,7 +47,7 @@ public:
{
m_compilerStack.reset(false);
m_compilerStack.addSource("", "pragma solidity >=0.0;\n" + _code);
- ETH_TEST_REQUIRE_NO_THROW(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
+ BOOST_REQUIRE_MESSAGE(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
Json::Value generatedDocumentation;
if (_userDocumentation)
diff --git a/test/libsolidity/SolidityParser.cpp b/test/libsolidity/SolidityParser.cpp
index 60ca03c9..72473c3e 100644
--- a/test/libsolidity/SolidityParser.cpp
+++ b/test/libsolidity/SolidityParser.cpp
@@ -167,6 +167,90 @@ BOOST_AUTO_TEST_CASE(single_function_param)
BOOST_CHECK(successParse(text));
}
+BOOST_AUTO_TEST_CASE(single_function_param_trailing_comma)
+{
+ char const* text = R"(
+ contract test {
+ function(uint a,) {}
+ }
+ )";
+ CHECK_PARSE_ERROR(text, "Unexpected trailing comma in parameter list.");
+}
+
+BOOST_AUTO_TEST_CASE(single_return_param_trailing_comma)
+{
+ char const* text = R"(
+ contract test {
+ function() returns (uint a,) {}
+ }
+ )";
+ CHECK_PARSE_ERROR(text, "Unexpected trailing comma in parameter list.");
+}
+
+BOOST_AUTO_TEST_CASE(single_modifier_arg_trailing_comma)
+{
+ char const* text = R"(
+ contract test {
+ modifier modTest(uint a,) { _; }
+ function(uint a) {}
+ }
+ )";
+ CHECK_PARSE_ERROR(text, "Unexpected trailing comma in parameter list.");
+}
+
+BOOST_AUTO_TEST_CASE(single_event_arg_trailing_comma)
+{
+ char const* text = R"(
+ contract test {
+ event Test(uint a,);
+ function(uint a) {}
+ }
+ )";
+ CHECK_PARSE_ERROR(text, "Unexpected trailing comma in parameter list.");
+}
+
+BOOST_AUTO_TEST_CASE(multiple_function_param_trailing_comma)
+{
+ char const* text = R"(
+ contract test {
+ function(uint a, uint b,) {}
+ }
+ )";
+ CHECK_PARSE_ERROR(text, "Unexpected trailing comma in parameter list.");
+}
+
+BOOST_AUTO_TEST_CASE(multiple_return_param_trailing_comma)
+{
+ char const* text = R"(
+ contract test {
+ function() returns (uint a, uint b,) {}
+ }
+ )";
+ CHECK_PARSE_ERROR(text, "Unexpected trailing comma in parameter list.");
+}
+
+BOOST_AUTO_TEST_CASE(multiple_modifier_arg_trailing_comma)
+{
+ char const* text = R"(
+ contract test {
+ modifier modTest(uint a, uint b,) { _; }
+ function(uint a) {}
+ }
+ )";
+ CHECK_PARSE_ERROR(text, "Unexpected trailing comma in parameter list.");
+}
+
+BOOST_AUTO_TEST_CASE(multiple_event_arg_trailing_comma)
+{
+ char const* text = R"(
+ contract test {
+ event Test(uint a, uint b,);
+ function(uint a) {}
+ }
+ )";
+ CHECK_PARSE_ERROR(text, "Unexpected trailing comma in parameter list.");
+}
+
BOOST_AUTO_TEST_CASE(function_no_body)
{
char const* text = R"(
@@ -250,7 +334,7 @@ BOOST_AUTO_TEST_CASE(function_natspec_documentation)
FunctionDefinition const* function = nullptr;
auto functions = contract->definedFunctions();
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
checkFunctionNatspec(function, "This is a test function");
}
@@ -268,7 +352,7 @@ BOOST_AUTO_TEST_CASE(function_normal_comments)
ErrorList errors;
ASTPointer<ContractDefinition> contract = parseText(text, errors);
auto functions = contract->definedFunctions();
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
BOOST_CHECK_MESSAGE(function->documentation() == nullptr,
"Should not have gotten a Natspecc comment for this function");
}
@@ -294,17 +378,17 @@ BOOST_AUTO_TEST_CASE(multiple_functions_natspec_documentation)
ASTPointer<ContractDefinition> contract = parseText(text, errors);
auto functions = contract->definedFunctions();
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
checkFunctionNatspec(function, "This is test function 1");
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(1), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(1), "Failed to retrieve function");
checkFunctionNatspec(function, "This is test function 2");
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(2), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(2), "Failed to retrieve function");
BOOST_CHECK_MESSAGE(function->documentation() == nullptr,
"Should not have gotten natspec comment for functionName3()");
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(3), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(3), "Failed to retrieve function");
checkFunctionNatspec(function, "This is test function 4");
}
@@ -323,7 +407,7 @@ BOOST_AUTO_TEST_CASE(multiline_function_documentation)
ErrorList errors;
ASTPointer<ContractDefinition> contract = parseText(text, errors);
auto functions = contract->definedFunctions();
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
checkFunctionNatspec(function, "This is a test function\n"
" and it has 2 lines");
}
@@ -351,10 +435,10 @@ BOOST_AUTO_TEST_CASE(natspec_comment_in_function_body)
ASTPointer<ContractDefinition> contract = parseText(text, errors);
auto functions = contract->definedFunctions();
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
checkFunctionNatspec(function, "fun1 description");
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(1), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(1), "Failed to retrieve function");
checkFunctionNatspec(function, "This is a test function\n"
" and it has 2 lines");
}
@@ -380,7 +464,7 @@ BOOST_AUTO_TEST_CASE(natspec_docstring_between_keyword_and_signature)
ASTPointer<ContractDefinition> contract = parseText(text, errors);
auto functions = contract->definedFunctions();
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
BOOST_CHECK_MESSAGE(!function->documentation(),
"Shouldn't get natspec docstring for this function");
}
@@ -406,7 +490,7 @@ BOOST_AUTO_TEST_CASE(natspec_docstring_after_signature)
ASTPointer<ContractDefinition> contract = parseText(text, errors);
auto functions = contract->definedFunctions();
- ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
+ BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
BOOST_CHECK_MESSAGE(!function->documentation(),
"Shouldn't get natspec docstring for this function");
}
diff --git a/test/libsolidity/StandardCompiler.cpp b/test/libsolidity/StandardCompiler.cpp
index 24f915c0..4504946b 100644
--- a/test/libsolidity/StandardCompiler.cpp
+++ b/test/libsolidity/StandardCompiler.cpp
@@ -226,6 +226,183 @@ BOOST_AUTO_TEST_CASE(basic_compilation)
);
}
+BOOST_AUTO_TEST_CASE(output_selection_explicit)
+{
+ char const* input = R"(
+ {
+ "language": "Solidity",
+ "settings": {
+ "outputSelection": {
+ "fileA": {
+ "A": [
+ "abi"
+ ]
+ }
+ }
+ },
+ "sources": {
+ "fileA": {
+ "content": "contract A { }"
+ }
+ }
+ }
+ )";
+ Json::Value result = compile(input);
+ BOOST_CHECK(containsAtMostWarnings(result));
+ Json::Value contract = getContractResult(result, "fileA", "A");
+ BOOST_CHECK(contract.isObject());
+ BOOST_CHECK(contract["abi"].isArray());
+ BOOST_CHECK_EQUAL(dev::jsonCompactPrint(contract["abi"]), "[]");
+}
+
+BOOST_AUTO_TEST_CASE(output_selection_all_contracts)
+{
+ char const* input = R"(
+ {
+ "language": "Solidity",
+ "settings": {
+ "outputSelection": {
+ "fileA": {
+ "*": [
+ "abi"
+ ]
+ }
+ }
+ },
+ "sources": {
+ "fileA": {
+ "content": "contract A { }"
+ }
+ }
+ }
+ )";
+ Json::Value result = compile(input);
+ BOOST_CHECK(containsAtMostWarnings(result));
+ Json::Value contract = getContractResult(result, "fileA", "A");
+ BOOST_CHECK(contract.isObject());
+ BOOST_CHECK(contract["abi"].isArray());
+ BOOST_CHECK_EQUAL(dev::jsonCompactPrint(contract["abi"]), "[]");
+}
+
+BOOST_AUTO_TEST_CASE(output_selection_all_files_single_contract)
+{
+ char const* input = R"(
+ {
+ "language": "Solidity",
+ "settings": {
+ "outputSelection": {
+ "*": {
+ "A": [
+ "abi"
+ ]
+ }
+ }
+ },
+ "sources": {
+ "fileA": {
+ "content": "contract A { }"
+ }
+ }
+ }
+ )";
+ Json::Value result = compile(input);
+ BOOST_CHECK(containsAtMostWarnings(result));
+ Json::Value contract = getContractResult(result, "fileA", "A");
+ BOOST_CHECK(contract.isObject());
+ BOOST_CHECK(contract["abi"].isArray());
+ BOOST_CHECK_EQUAL(dev::jsonCompactPrint(contract["abi"]), "[]");
+}
+
+BOOST_AUTO_TEST_CASE(output_selection_all_files_all_contracts)
+{
+ char const* input = R"(
+ {
+ "language": "Solidity",
+ "settings": {
+ "outputSelection": {
+ "*": {
+ "*": [
+ "abi"
+ ]
+ }
+ }
+ },
+ "sources": {
+ "fileA": {
+ "content": "contract A { }"
+ }
+ }
+ }
+ )";
+ Json::Value result = compile(input);
+ BOOST_CHECK(containsAtMostWarnings(result));
+ Json::Value contract = getContractResult(result, "fileA", "A");
+ BOOST_CHECK(contract.isObject());
+ BOOST_CHECK(contract["abi"].isArray());
+ BOOST_CHECK_EQUAL(dev::jsonCompactPrint(contract["abi"]), "[]");
+}
+
+BOOST_AUTO_TEST_CASE(output_selection_dependent_contract)
+{
+ char const* input = R"(
+ {
+ "language": "Solidity",
+ "settings": {
+ "outputSelection": {
+ "*": {
+ "A": [
+ "abi"
+ ]
+ }
+ }
+ },
+ "sources": {
+ "fileA": {
+ "content": "contract B { } contract A { function f() { new B(); } }"
+ }
+ }
+ }
+ )";
+ Json::Value result = compile(input);
+ BOOST_CHECK(containsAtMostWarnings(result));
+ Json::Value contract = getContractResult(result, "fileA", "A");
+ BOOST_CHECK(contract.isObject());
+ BOOST_CHECK(contract["abi"].isArray());
+ BOOST_CHECK_EQUAL(dev::jsonCompactPrint(contract["abi"]), "[{\"constant\":false,\"inputs\":[],\"name\":\"f\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]");
+}
+
+BOOST_AUTO_TEST_CASE(output_selection_dependent_contract_with_import)
+{
+ char const* input = R"(
+ {
+ "language": "Solidity",
+ "settings": {
+ "outputSelection": {
+ "*": {
+ "A": [
+ "abi"
+ ]
+ }
+ }
+ },
+ "sources": {
+ "fileA": {
+ "content": "import \"fileB\"; contract A { function f() { new B(); } }"
+ },
+ "fileB": {
+ "content": "contract B { }"
+ }
+ }
+ }
+ )";
+ Json::Value result = compile(input);
+ BOOST_CHECK(containsAtMostWarnings(result));
+ Json::Value contract = getContractResult(result, "fileA", "A");
+ BOOST_CHECK(contract.isObject());
+ BOOST_CHECK(contract["abi"].isArray());
+ BOOST_CHECK_EQUAL(dev::jsonCompactPrint(contract["abi"]), "[{\"constant\":false,\"inputs\":[],\"name\":\"f\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]");
+}
+
BOOST_AUTO_TEST_SUITE_END()
}
diff --git a/test/libsolidity/ViewPureChecker.cpp b/test/libsolidity/ViewPureChecker.cpp
index 80241519..6353ae8a 100644
--- a/test/libsolidity/ViewPureChecker.cpp
+++ b/test/libsolidity/ViewPureChecker.cpp
@@ -349,7 +349,7 @@ BOOST_AUTO_TEST_CASE(assembly)
assembly { x := 7 }
}
function g() view public {
- assembly { for {} 1 { pop(sload(0)) } { } }
+ assembly { for {} 1 { pop(sload(0)) } { } pop(gas) }
}
function h() view public {
assembly { function g() { pop(blockhash(20)) } }
@@ -357,6 +357,9 @@ BOOST_AUTO_TEST_CASE(assembly)
function j() public {
assembly { pop(call(0, 1, 2, 3, 4, 5, 6)) }
}
+ function k() public {
+ assembly { pop(call(gas, 1, 2, 3, 4, 5, 6)) }
+ }
}
)";
CHECK_SUCCESS_NO_WARNINGS(text);
@@ -367,7 +370,7 @@ BOOST_AUTO_TEST_CASE(assembly_staticcall)
string text = R"(
contract C {
function i() view public {
- assembly { pop(staticcall(0, 1, 2, 3, 4, 5)) }
+ assembly { pop(staticcall(gas, 1, 2, 3, 4, 5)) }
}
}
)";