aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/test/lux/target/ruby.lux59
-rw-r--r--stdlib/source/test/lux/tool.lux32
-rw-r--r--stdlib/source/test/lux/tool/compiler/language/lux/analysis/primitive.lux44
3 files changed, 117 insertions, 18 deletions
diff --git a/stdlib/source/test/lux/target/ruby.lux b/stdlib/source/test/lux/target/ruby.lux
index 87e781ebc..86a817703 100644
--- a/stdlib/source/test/lux/target/ruby.lux
+++ b/stdlib/source/test/lux/target/ruby.lux
@@ -11,7 +11,8 @@
["[0]" try {"+" Try} ("[1]#[0]" functor)]]
[data
["[0]" bit ("[1]#[0]" equivalence)]
- ["[0]" text ("[1]#[0]" equivalence)]
+ ["[0]" text ("[1]#[0]" equivalence)
+ ["%" format {"+" format}]]
[collection
["[0]" list ("[1]#[0]" functor)]]]
["[0]" math
@@ -20,7 +21,14 @@
["n" nat]
["i" int]
["f" frac]
- ["[0]" i64]]]]]
+ ["[0]" i64]]]
+ [tool
+ [compiler
+ [meta
+ ["[0]" packager "_"
+ ["[1]" ruby]]]]]
+ [world
+ ["[0]" file]]]]
[\\library
["[0]" /]])
@@ -580,15 +588,58 @@
..test/location)
)))
+(def: test|global
+ Test
+ ($_ _.and
+ (_.cover [/.script_name]
+ (expression (let [file (format (# file.default separator) packager.main_file)]
+ (|>> (:as Text)
+ (predicate.or (text.ends_with? file)
+ (text#= "<script>"))))
+ /.script_name))
+ (_.cover [/.input_record_separator]
+ (expression (|>> (:as Text)
+ (text#= text.\n))
+ /.input_record_separator))
+ (_.cover [/.output_record_separator]
+ (|> /.output_record_separator
+ /.code
+ ..eval
+ (try#each (function (_ it)
+ (case it
+ {.#None} true
+ {.#Some _} false)))
+ (try.else false)))
+ ))
+
+(def: random_expression
+ (Random /.Expression)
+ (let [literal (: (Random /.Literal)
+ ($_ random.either
+ (random#each /.bool random.bit)
+ (random#each /.float random.frac)
+ (random#each /.int random.int)
+ (random#each /.string (random.ascii/lower 5))
+ ))]
+ ($_ random.either
+ literal
+ )))
+
(def: .public test
Test
(do [! random.monad]
- []
+ [expected ..random_expression]
(<| (_.covering /._)
- (_.for [/.Code /.code])
+ (_.for [/.Code])
($_ _.and
+ (_.cover [/.code /.manual]
+ (|> (/.manual (/.code expected))
+ (: /.Expression)
+ (# /.code_equivalence = expected)))
(_.for [/.Expression]
..test|expression)
(_.for [/.Statement]
..test|statement)
+ (_.for [/.GVar]
+ ..test|global)
))))
diff --git a/stdlib/source/test/lux/tool.lux b/stdlib/source/test/lux/tool.lux
index ef83286b4..f7734328b 100644
--- a/stdlib/source/test/lux/tool.lux
+++ b/stdlib/source/test/lux/tool.lux
@@ -1,24 +1,28 @@
(.using
- [library
- [lux "*"
- ["_" test {"+" Test}]]]
- ["[0]" / "_"
- [compiler
- ["[1][0]" arity]
- ["[1][0]" reference]
- ... [language
- ... [lux
- ... ["[1][0]" syntax]
- ... [phase
- ... ["[1][0]" analysis]
- ... ["[1][0]" synthesis]]]]
- ]])
+ [library
+ [lux "*"
+ ["_" test {"+" Test}]]]
+ ["[0]" / "_"
+ [compiler
+ ["[1][0]" arity]
+ ["[1][0]" reference]
+ [language
+ [lux
+ ... ["[1][0]" syntax]
+ ["[1][0]" analysis "_"
+ ["[1]/[0]" primitive]]
+ ... [phase
+ ... ["[1][0]" analysis]
+ ... ["[1][0]" synthesis]]
+ ]]
+ ]])
(def: .public test
Test
($_ _.and
/arity.test
/reference.test
+ /analysis/primitive.test
... /syntax.test
... /analysis.test
... /synthesis.test
diff --git a/stdlib/source/test/lux/tool/compiler/language/lux/analysis/primitive.lux b/stdlib/source/test/lux/tool/compiler/language/lux/analysis/primitive.lux
new file mode 100644
index 000000000..4d67a47f9
--- /dev/null
+++ b/stdlib/source/test/lux/tool/compiler/language/lux/analysis/primitive.lux
@@ -0,0 +1,44 @@
+(.using
+ [library
+ [lux "*"
+ ["_" test {"+" Test}]
+ [abstract
+ [monad {"+" do}]
+ [\\specification
+ ["$[0]" equivalence]]]
+ [data
+ ["[0]" bit ("[1]#[0]" equivalence)]
+ ["[0]" text ("[1]#[0]" equivalence)]]
+ [math
+ ["[0]" random {"+" Random} ("[1]#[0]" monad)]
+ [number
+ ["f" frac]]]]]
+ [\\library
+ ["[0]" /]])
+
+(def: .public random
+ (Random /.Primitive)
+ ($_ random.or
+ (random#in [])
+ random.bit
+ random.nat
+ random.int
+ random.rev
+ (random.only (|>> f.not_a_number? not) random.frac)
+ (random.ascii/lower 5)
+ ))
+
+(def: .public test
+ Test
+ (<| (_.covering /._)
+ (_.for [/.Primitive])
+ ($_ _.and
+ (_.for [/.equivalence]
+ ($equivalence.spec /.equivalence ..random))
+ (do random.monad
+ [left ..random
+ right ..random]
+ (_.cover [/.format]
+ (bit#= (# /.equivalence = left right)
+ (text#= (/.format left) (/.format right)))))
+ )))