aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/target/python.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/test/lux/target/python.lux')
-rw-r--r--stdlib/source/test/lux/target/python.lux90
1 files changed, 90 insertions, 0 deletions
diff --git a/stdlib/source/test/lux/target/python.lux b/stdlib/source/test/lux/target/python.lux
index b68adfedd..8ff0e74a2 100644
--- a/stdlib/source/test/lux/target/python.lux
+++ b/stdlib/source/test/lux/target/python.lux
@@ -579,6 +579,94 @@
false)))
)))
+(def: test|loop
+ Test
+ (do [! random.monad]
+ [base (# ! each (n.% 100) random.nat)
+ factor (# ! each (|>> (n.% 10) ++) random.nat)
+ extra (# ! each (|>> (n.% 10) ++) random.nat)
+ .let [expected (n.* factor base)]
+ $iteration (# ! each (|>> %.nat (format "iteration_") /.var) random.nat)
+ $temp (# ! each (|>> %.nat (format "temp_") /.var) random.nat)]
+ ($_ _.and
+ (_.cover [/.while]
+ (and (|> (..statement
+ (function (_ $output)
+ ($_ /.then
+ (/.set (list $output) (/.int +0))
+ (/.set (list $iteration) (/.int +0))
+ (/.while (/.< (/.int (.int factor)) $iteration)
+ ($_ /.then
+ (/.set (list $output) (/.+ (/.int (.int base))
+ $output))
+ (/.set (list $iteration) (/.+ (/.int +1)
+ $iteration))
+ )
+ {.#None}))))
+ (:as Nat)
+ (n.= expected))
+ (|> (..statement
+ (function (_ $output)
+ ($_ /.then
+ (/.set (list $temp) (/.int +0))
+ (/.set (list $iteration) (/.int +0))
+ (/.while (/.< (/.int (.int factor)) $iteration)
+ ($_ /.then
+ (/.set (list $temp) (/.+ (/.int (.int base))
+ $temp))
+ (/.set (list $iteration) (/.+ (/.int +1)
+ $iteration))
+ )
+ {.#Some (/.set (list $output) $temp)}))))
+ (:as Nat)
+ (n.= expected))))
+ (_.cover [/.for_in]
+ (|> (..statement
+ (function (_ $output)
+ ($_ /.then
+ (/.set (list $output) (/.int +0))
+ (/.for_in $iteration
+ (/.list (list.repeated factor (/.int (.int base))))
+ (/.set (list $output) (/.+ $iteration
+ $output))))))
+ (:as Nat)
+ (n.= expected)))
+ (_.cover [/.pass]
+ (|> (..statement
+ (function (_ $output)
+ ($_ /.then
+ (/.set (list $output) (/.int +0))
+ (/.set (list $iteration) (/.int +0))
+ (/.while (/.< (/.int (.int (n.+ extra factor))) $iteration)
+ ($_ /.then
+ (/.set (list $iteration) (/.+ (/.int +1)
+ $iteration))
+ (/.if (/.> (/.int (.int extra)) $iteration)
+ (/.set (list $output) (/.+ (/.int (.int base))
+ $output))
+ /.pass))
+ {.#None}))))
+ (:as Nat)
+ (n.= expected)))
+ (_.cover [/.continue]
+ (|> (..statement
+ (function (_ $output)
+ ($_ /.then
+ (/.set (list $output) (/.int +0))
+ (/.set (list $iteration) (/.int +0))
+ (/.while (/.< (/.int (.int (n.+ extra factor))) $iteration)
+ ($_ /.then
+ (/.set (list $iteration) (/.+ (/.int +1)
+ $iteration))
+ (/.if (/.> (/.int (.int extra)) $iteration)
+ (/.set (list $output) (/.+ (/.int (.int base))
+ $output))
+ /.continue))
+ {.#None}))))
+ (:as Nat)
+ (n.= expected)))
+ )))
+
(def: test|statement
Test
(do [! random.monad]
@@ -636,6 +724,8 @@
..test|exception
(_.for [/.Location]
..test|location)
+ (_.for [/.Loop]
+ ..test|loop)
)))
(def: random_expression