(.module: [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)]] [control [pipe (#+ case>)]] [data ["." error] ["." bit ("#@." equivalence)] [number ["." frac]] ["." text ("#@." equivalence) format]] [math ["r" random]] [tool [compiler ["." synthesis]]]] [/// [common (#+ Runner)]]) (def: (f/=' reference subject) (-> Frac Frac Bit) (or (f/= reference subject) (and (frac.not-a-number? reference) (frac.not-a-number? subject)))) (def: #export (spec run) (-> Runner Test) (`` ($_ _.and (~~ (template [ ] [(do r.monad [expected ] (_.test (%name (name-of )) (|> (run ( expected)) (case> (#error.Success actual) ( expected (:assume actual)) (#error.Failure error) false))))] ["bit" synthesis.bit r.bit bit@=] ["i64" synthesis.i64 r.i64 "lux i64 ="] ["f64" synthesis.f64 r.frac f/='] ["text" synthesis.text (r.ascii 5) text@=] )) )))