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  | 
