From 23f6d4d19c7f5d1f5b4f6db8a72cf52388689357 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sat, 19 Feb 2022 08:03:44 -0400 Subject: Optimizations for the pure-Lux JVM compiler. [Part 3] --- stdlib/source/test/lux/target/python.lux | 50 +++++++++++++++++++--- stdlib/source/test/lux/tool.lux | 4 +- .../source/test/lux/tool/compiler/meta/cache.lux | 44 +++++++++++++++++++ .../source/test/lux/tool/compiler/meta/context.lux | 13 +++++- 4 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 stdlib/source/test/lux/tool/compiler/meta/cache.lux (limited to 'stdlib/source/test') diff --git a/stdlib/source/test/lux/target/python.lux b/stdlib/source/test/lux/target/python.lux index 3908f9d3c..bb601a007 100644 --- a/stdlib/source/test/lux/target/python.lux +++ b/stdlib/source/test/lux/target/python.lux @@ -432,19 +432,55 @@ (def: test|statement Test (do [! random.monad] - [prefix (# ! each (|>> %.nat (text.enclosed ["def_" "_"])) random.nat) + [$def (# ! each (|>> %.nat (format "def_") /.var) random.nat) $input/0 (# ! each (|>> %.nat (format "input_") /.var) random.nat) expected/0 random.safe_frac - .let [def (: (-> Nat /.SVar) - (|>> %.nat (format prefix) /.var))]] + test random.bit + then random.safe_frac + else random.safe_frac + .let [expected/? (if test then else)]] ($_ _.and - (_.cover [/.def] + (_.cover [/.def /.return] + (|> (..statement + (function (_ $output) + ($_ /.then + (/.def $def (list $input/0) + (/.return $input/0)) + (/.set (list $output) (/.apply/* $def (list (/.float expected/0))))))) + (:as Frac) + (f.= expected/0))) + (_.cover [/.if] + (|> (..statement + (function (_ $output) + ($_ /.then + (/.def $def (list) + (/.if (/.bool test) + (/.return (/.float then)) + (/.return (/.float else)))) + (/.set (list $output) (/.apply/* $def (list)))))) + (:as Frac) + (f.= expected/?))) + (_.cover [/.when /.then] + (|> (..statement + (function (_ $output) + ($_ /.then + (/.def $def (list) + ($_ /.then + (/.when (/.bool test) + (/.return (/.float then))) + (/.return (/.float else)))) + (/.set (list $output) (/.apply/* $def (list)))))) + (:as Frac) + (f.= expected/?))) + (_.cover [/.statement] (|> (..statement (function (_ $output) ($_ /.then - (/.def (def 0) (list $input/0) (/.return $input/0)) - (/.set (list $output) - (/.apply/* (def 0) (list (/.float expected/0))))))) + (/.def $def (list) + ($_ /.then + (/.statement (/.+ (/.float expected/0) (/.float expected/0))) + (/.return (/.float expected/0)))) + (/.set (list $output) (/.apply/* $def (list)))))) (:as Frac) (f.= expected/0))) ))) diff --git a/stdlib/source/test/lux/tool.lux b/stdlib/source/test/lux/tool.lux index 22267936f..ed089e095 100644 --- a/stdlib/source/test/lux/tool.lux +++ b/stdlib/source/test/lux/tool.lux @@ -27,7 +27,8 @@ ["[1]/[0]" cli] ["[1]/[0]" export] ["[1]/[0]" import] - ["[1]/[0]" context]] + ["[1]/[0]" context] + ["[1]/[0]" cache]] ]]) (def: .public test @@ -43,6 +44,7 @@ /meta/export.test /meta/import.test /meta/context.test + /meta/cache.test /phase/extension.test /phase/analysis/simple.test /phase/analysis/complex.test diff --git a/stdlib/source/test/lux/tool/compiler/meta/cache.lux b/stdlib/source/test/lux/tool/compiler/meta/cache.lux new file mode 100644 index 000000000..9ffcd4ada --- /dev/null +++ b/stdlib/source/test/lux/tool/compiler/meta/cache.lux @@ -0,0 +1,44 @@ +(.using + [library + [lux "*" + ["_" test {"+" Test}] + [abstract + [monad {"+" do}]] + [control + ["[0]" try] + [concurrency + ["[0]" async]]] + [math + ["[0]" random]] + [world + ["[0]" file]]]] + [\\library + ["[0]" /]] + ["$[0]" // "_" + ["[1][0]" context]]) + +(def: .public test + Test + (<| (_.covering /._) + (do [! random.monad] + [.let [/ "/" + fs (file.mock /)] + context $//context.random] + ($_ _.and + (in (do async.monad + [pre/0 (# fs directory? (/.path fs context)) + pre/1 (/.enabled? fs context) + outcome (/.enable! fs context) + post/0 (# fs directory? (/.path fs context)) + post/1 (/.enabled? fs context)] + (_.cover' [/.path /.enabled? /.enable!] + (and (not pre/0) + (not pre/1) + + (case outcome + {try.#Success _} true + {try.#Failure _} false) + + post/0 + post/1)))) + )))) diff --git a/stdlib/source/test/lux/tool/compiler/meta/context.lux b/stdlib/source/test/lux/tool/compiler/meta/context.lux index 382bd12d6..1d9d5b67d 100644 --- a/stdlib/source/test/lux/tool/compiler/meta/context.lux +++ b/stdlib/source/test/lux/tool/compiler/meta/context.lux @@ -10,12 +10,23 @@ ["[0]" set] ["[0]" list ("[1]#[0]" functor)]]] [math - ["[0]" random] + ["[0]" random {"+" Random}] [number ["n" nat]]]]] [\\library ["[0]" /]]) +(def: .public random + (Random /.Context) + (do [! random.monad] + [context ($_ random.either + (in /.js) + (in /.jvm) + (in /.lua) + (in /.python) + (in /.ruby))] + (# ! each context (random.ascii/lower 1)))) + (def: .public test Test (<| (_.covering /._) -- cgit v1.2.3