aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian <c@ethdev.com>2014-11-06 22:34:35 +0800
committerChristian <c@ethdev.com>2014-11-06 22:34:35 +0800
commit26150755f61c536051c22a1cc2174e877a1b3ab1 (patch)
treeb17149235bc104b96f04d243eb7a1596c1970156
parent34f16940eabe75a582fc864978ea67793c04a7bb (diff)
parent008a91ca9ded6950fce4f094e6cb46f50a6be4b7 (diff)
downloaddexon-solidity-26150755f61c536051c22a1cc2174e877a1b3ab1.tar.gz
dexon-solidity-26150755f61c536051c22a1cc2174e877a1b3ab1.tar.zst
dexon-solidity-26150755f61c536051c22a1cc2174e877a1b3ab1.zip
Merge remote-tracking branch 'ethereum/develop' into sol_optimizer
-rw-r--r--solidityEndToEndTest.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/solidityEndToEndTest.cpp b/solidityEndToEndTest.cpp
index b28b8499..116310ae 100644
--- a/solidityEndToEndTest.cpp
+++ b/solidityEndToEndTest.cpp
@@ -151,6 +151,55 @@ BOOST_AUTO_TEST_CASE(while_loop)
BOOST_CHECK(framework.callFunction(0, u256(4)) == toBigEndian(u256(24)));
}
+BOOST_AUTO_TEST_CASE(break_outside_loop)
+{
+ // break and continue outside loops should be simply ignored
+ char const* sourceCode = "contract test {\n"
+ " function f(uint x) returns(uint y) {\n"
+ " break; continue; return 2;\n"
+ " }\n"
+ "}\n";
+ ExecutionFramework framework;
+ framework.compileAndRun(sourceCode);
+ BOOST_CHECK(framework.callFunction(0, u256(0)) == toBigEndian(u256(2)));
+}
+
+BOOST_AUTO_TEST_CASE(nested_loops)
+{
+ // tests that break and continue statements in nested loops jump to the correct place
+ char const* sourceCode = "contract test {\n"
+ " function f(uint x) returns(uint y) {\n"
+ " while (x > 1) {\n"
+ " if (x == 10) break;\n"
+ " while (x > 5) {\n"
+ " if (x == 8) break;\n"
+ " x--;\n"
+ " if (x == 6) continue;\n"
+ " return x;\n"
+ " }\n"
+ " x--;\n"
+ " if (x == 3) continue;\n"
+ " break;\n"
+ " }\n"
+ " return x;\n"
+ " }\n"
+ "}\n";
+ ExecutionFramework framework;
+ framework.compileAndRun(sourceCode);
+ BOOST_CHECK(framework.callFunction(0, u256(0)) == toBigEndian(u256(0)));
+ BOOST_CHECK(framework.callFunction(0, u256(1)) == toBigEndian(u256(1)));
+ BOOST_CHECK(framework.callFunction(0, u256(2)) == toBigEndian(u256(1)));
+ BOOST_CHECK(framework.callFunction(0, u256(3)) == toBigEndian(u256(2)));
+ BOOST_CHECK(framework.callFunction(0, u256(4)) == toBigEndian(u256(2)));
+ BOOST_CHECK(framework.callFunction(0, u256(5)) == toBigEndian(u256(4)));
+ BOOST_CHECK(framework.callFunction(0, u256(6)) == toBigEndian(u256(5)));
+ BOOST_CHECK(framework.callFunction(0, u256(7)) == toBigEndian(u256(5)));
+ BOOST_CHECK(framework.callFunction(0, u256(8)) == toBigEndian(u256(7)));
+ BOOST_CHECK(framework.callFunction(0, u256(9)) == toBigEndian(u256(8)));
+ BOOST_CHECK(framework.callFunction(0, u256(10)) == toBigEndian(u256(10)));
+ BOOST_CHECK(framework.callFunction(0, u256(11)) == toBigEndian(u256(10)));
+}
+
BOOST_AUTO_TEST_CASE(calling_other_functions)
{
// note that the index of a function is its index in the sorted sequence of functions