diff options
Diffstat (limited to 'stdlib/source/test/lux/compiler/default/phase/synthesis/primitive.lux')
-rw-r--r-- | stdlib/source/test/lux/compiler/default/phase/synthesis/primitive.lux | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/stdlib/source/test/lux/compiler/default/phase/synthesis/primitive.lux b/stdlib/source/test/lux/compiler/default/phase/synthesis/primitive.lux new file mode 100644 index 000000000..87dccc9f5 --- /dev/null +++ b/stdlib/source/test/lux/compiler/default/phase/synthesis/primitive.lux @@ -0,0 +1,97 @@ +(.module: + [lux (#- primitive) + [control + [monad (#+ do)] + pipe] + [data + ["." error] + [text + format]] + [compiler + [default + ["." phase + ["." analysis (#+ Analysis)] + ["//" synthesis (#+ Synthesis) + ["." expression]] + [extension + ["." bundle]]]]] + [math + ["r" random]] + test]) + +(def: #export primitive + (r.Random Analysis) + (do r.monad + [primitive (: (r.Random analysis.Primitive) + ($_ r.or + (wrap []) + r.bit + r.nat + r.int + r.rev + r.frac + (r.unicode 5)))] + (wrap (#analysis.Primitive primitive)))) + +(def: #export (corresponds? analysis synthesis) + (-> Analysis Synthesis Bit) + (case [synthesis analysis] + [(#//.Primitive (#//.Text valueS)) + (#analysis.Primitive (#analysis.Unit valueA))] + (is? valueS (:coerce Text valueA)) + + [(#//.Primitive (#//.Bit valueS)) + (#analysis.Primitive (#analysis.Bit valueA))] + (is? valueS valueA) + + [(#//.Primitive (#//.I64 valueS)) + (#analysis.Primitive (#analysis.Nat valueA))] + (is? (.i64 valueS) (.i64 valueA)) + + [(#//.Primitive (#//.I64 valueS)) + (#analysis.Primitive (#analysis.Int valueA))] + (is? (.i64 valueS) (.i64 valueA)) + + [(#//.Primitive (#//.I64 valueS)) + (#analysis.Primitive (#analysis.Rev valueA))] + (is? (.i64 valueS) (.i64 valueA)) + + [(#//.Primitive (#//.F64 valueS)) + (#analysis.Primitive (#analysis.Frac valueA))] + (is? valueS valueA) + + [(#//.Primitive (#//.Text valueS)) + (#analysis.Primitive (#analysis.Text valueA))] + (is? valueS valueA) + + _ + #0)) + +(context: "Primitives." + (<| (times 100) + (do @ + [|bit| r.bit + |nat| r.nat + |int| r.int + |rev| r.rev + |frac| r.frac + |text| (r.unicode 5)] + (`` ($_ seq + (~~ (do-template [<desc> <analysis> <synthesis> <sample>] + [(test (format "Can synthesize " <desc> ".") + (|> (#analysis.Primitive (<analysis> <sample>)) + expression.phase + (phase.run [bundle.empty //.init]) + (case> (#error.Success (#//.Primitive (<synthesis> value))) + (is? <sample> value) + + _ + #0)))] + + ["unit" #analysis.Unit #//.Text //.unit] + ["bit" #analysis.Bit #//.Bit |bit|] + ["nat" #analysis.Nat #//.I64 (.i64 |nat|)] + ["int" #analysis.Int #//.I64 (.i64 |int|)] + ["rev" #analysis.Rev #//.I64 (.i64 |rev|)] + ["frac" #analysis.Frac #//.F64 |frac|] + ["text" #analysis.Text #//.Text |text|]))))))) |