aboutsummaryrefslogtreecommitdiffstats
path: root/test/libsolidity
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2016-11-11 00:13:45 +0800
committerGitHub <noreply@github.com>2016-11-11 00:13:45 +0800
commita40dcfef1257c4b159eb8248ecb0f837b42d8ead (patch)
tree0d50154179583e9f2e6d7588c22f88cade14717c /test/libsolidity
parent81118de51273a5aef711b321f20ee02da9e55533 (diff)
parent4524ad08701939cc22d28494c57dda1cdfba9e10 (diff)
downloaddexon-solidity-a40dcfef1257c4b159eb8248ecb0f837b42d8ead.tar.gz
dexon-solidity-a40dcfef1257c4b159eb8248ecb0f837b42d8ead.tar.zst
dexon-solidity-a40dcfef1257c4b159eb8248ecb0f837b42d8ead.zip
Merge pull request #768 from roadriverrail/do_while_loops
Add support for do/while loops
Diffstat (limited to 'test/libsolidity')
-rw-r--r--test/libsolidity/SolidityEndToEndTest.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp
index 8600443d..a1430b02 100644
--- a/test/libsolidity/SolidityEndToEndTest.cpp
+++ b/test/libsolidity/SolidityEndToEndTest.cpp
@@ -353,6 +353,34 @@ BOOST_AUTO_TEST_CASE(while_loop)
testSolidityAgainstCppOnRange("f(uint256)", while_loop_cpp, 0, 5);
}
+
+BOOST_AUTO_TEST_CASE(do_while_loop)
+{
+ char const* sourceCode = "contract test {\n"
+ " function f(uint n) returns(uint nfac) {\n"
+ " nfac = 1;\n"
+ " var i = 2;\n"
+ " do { nfac *= i++; } while (i <= n);\n"
+ " }\n"
+ "}\n";
+ compileAndRun(sourceCode);
+
+ auto do_while_loop_cpp = [](u256 const& n) -> u256
+ {
+ u256 nfac = 1;
+ u256 i = 2;
+ do
+ {
+ nfac *= i++;
+ }
+ while (i <= n);
+
+ return nfac;
+ };
+
+ testSolidityAgainstCppOnRange("f(uint256)", do_while_loop_cpp, 0, 5);
+}
+
BOOST_AUTO_TEST_CASE(nested_loops)
{
// tests that break and continue statements in nested loops jump to the correct place