diff options
Diffstat (limited to 'stdlib/source/test/lux/target/python.lux')
-rw-r--r-- | stdlib/source/test/lux/target/python.lux | 90 |
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 |