(mac catcherr body `(on-err (fn (e) (list 'err-QFhlw05j4y (details e))) (fn () ,@body))) (def assert-iso3 (desc result expected) (if (errsafe:iso expected result) (do (pr "ok " desc " => ") (write result) (prn)) (do (pr "FAIL " desc " => ") (write result) (pr ", not the expected result ") (write expected) (prn)))) (mac assert-iso2 (expr expected) `(assert-iso3 ',expr ,expr ,expected)) (mac assert-iso args (if (is len.args 2) `(assert-iso2 ,args.0 ,args.1) `(assert-iso3 ,args.0 ,args.1 ,args.2))) (mac test (expected expr (o qexpr expr)) `(assert-iso (tostring (write ',qexpr)) (catcherr ,expr) ,expected)) (mac testf (input f qf expected) (w/uniq (gexpected gresult) `(with (,gexpected ,expected ,gresult (catcherr (,f ,input))) (assert-iso (tostring (write ',input) (pr " ") (write ',qf)) ,gresult ,gexpected)))) (mac ptest (str parser expected) `(testf ,str [parse _ (on-parsefail '<> ,parser)] ,parser ,expected)) (mac ptest-err (str parser err) `(ptest ,str ,parser (list 'err-QFhlw05j4y ,err))) (mac test-parsepos (input parser expected) `(test (ascons ,expected) (parse ,input (do ,parser) parsepos*))) (mac ptests (parser . body) `(do ,@(map (fn ((input expected)) `(ptest ,input ,parser ,expected)) (pair body))))