aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-07-09 06:30:17 +0800
committerGitHub <noreply@github.com>2017-07-09 06:30:17 +0800
commit7d1ddfc6522294808f17b4d40b4419acaa643324 (patch)
treec0276f49be7884fd54ee935089db047acf76a8d8
parentf129372245d1b4fd4ff6425e9f7cbe701247cdc1 (diff)
parente3c58eada6e7309ddbb7a460e0cd81e92dbd8c57 (diff)
downloaddexon-solidity-7d1ddfc6522294808f17b4d40b4419acaa643324.tar.gz
dexon-solidity-7d1ddfc6522294808f17b4d40b4419acaa643324.tar.zst
dexon-solidity-7d1ddfc6522294808f17b4d40b4419acaa643324.zip
Merge pull request #2540 from benjaminion/lll-for-test
LLL: Test cases for for and while loops.
-rw-r--r--test/liblll/EndToEndTest.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/liblll/EndToEndTest.cpp b/test/liblll/EndToEndTest.cpp
index f3bfb438..7f4dd91a 100644
--- a/test/liblll/EndToEndTest.cpp
+++ b/test/liblll/EndToEndTest.cpp
@@ -387,6 +387,37 @@ BOOST_AUTO_TEST_CASE(assembly_codecopy)
BOOST_CHECK(callFallback() == encodeArgs(string("abcdef")));
}
+BOOST_AUTO_TEST_CASE(for_loop)
+{
+ char const* sourceCode = R"(
+ (returnlll
+ (seq
+ (for
+ { (set 'i 1) (set 'j 1) } ; INIT
+ (<= @i 10) ; PRED
+ [i]:(+ @i 1) ; POST
+ [j]:(* @j @i)) ; BODY
+ (return j 0x20)))
+ )";
+ compileAndRun(sourceCode);
+ BOOST_CHECK(callFallback() == encodeArgs(u256(3628800))); // 10!
+}
+
+BOOST_AUTO_TEST_CASE(while_loop)
+{
+ char const* sourceCode = R"(
+ (returnlll
+ (seq
+ ;; Euclid's GCD algorithm
+ (set 'a 1071)
+ (set 'b 462)
+ (while @b
+ [a]:(raw @b [b]:(mod @a @b)))
+ (return a 0x20)))
+ )";
+ compileAndRun(sourceCode);
+ BOOST_CHECK(callFallback() == encodeArgs(u256(21))); // GCD(1071,462)
+}
BOOST_AUTO_TEST_CASE(keccak256_32bytes)
{