(;module: lux (lux [io] (control [monad #+ do] pipe) (data text/format ["e" error] [bool "B/" Eq] [text "T/" Eq]) ["r" math/random] [meta] (meta [code]) test) (luxc (lang [";L" host] ["ls" synthesis] (translation [";T" expression] ["@;" runtime] ["@;" eval] ["@;" common]))) (test/luxc common)) (context: "Primitives." (<| (times +100) (do @ [%bool% r;bool %nat% r;nat %int% r;int %deg% r;deg %frac% r;frac %text% (r;text +5)] (with-expansions [ (do-template [ ] [(test (format "Can translate " ".") (|> (do meta;Monad [sampleI (expressionT;translate ( ))] (@eval;eval sampleI)) (meta;run (init-compiler [])) (case> (#e;Success valueT) ( (:! valueT)) _ false)))] ["bool" Bool code;bool %bool% B/=] ["nat" Nat code;nat %nat% n.=] ["int" Int code;int %int% i.=] ["deg" Deg code;deg %deg% d.=] ["frac" Frac code;frac %frac% f.=] ["text" Text code;text %text% T/=])] ($_ seq (test "Can translate unit." (|> (do meta;Monad [sampleI (expressionT;translate (' []))] (@eval;eval sampleI)) (meta;run (init-compiler [])) (case> (#e;Success valueT) (is hostL;unit (:! Text valueT)) _ false))) )))))