Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 52s
(nafc g) is a three-line primitive: peek the goal's stream for one answer; if empty, yield (unit s); else mzero. Carries the standard miniKanren caveats — open-world unsound, diverges on infinite streams. 7 tests: failed-goal-succeeds, successful-goal-fails, double-negation, conde-all-fail-makes-nafc-succeed, conde-any-success-makes-nafc-fail, nafc as a guard accepting and blocking. 201/201 cumulative.
51 lines
892 B
Plaintext
51 lines
892 B
Plaintext
;; lib/minikanren/tests/nafc.sx — Phase 5 piece C tests for `nafc`.
|
|
|
|
(mk-test
|
|
"nafc-failed-goal-succeeds"
|
|
(run* q (nafc (== 1 2)))
|
|
(list (make-symbol "_.0")))
|
|
|
|
(mk-test
|
|
"nafc-successful-goal-fails"
|
|
(run* q (nafc (== 1 1)))
|
|
(list))
|
|
|
|
(mk-test
|
|
"nafc-double-negation"
|
|
(run* q (nafc (nafc (== 1 1))))
|
|
(list (make-symbol "_.0")))
|
|
|
|
(mk-test
|
|
"nafc-with-conde-no-clauses-succeed"
|
|
(run*
|
|
q
|
|
(nafc
|
|
(conde ((== 1 2)) ((== 3 4)))))
|
|
(list (make-symbol "_.0")))
|
|
|
|
(mk-test
|
|
"nafc-with-conde-some-clause-succeeds-fails"
|
|
(run*
|
|
q
|
|
(nafc
|
|
(conde ((== 1 1)) ((== 3 4)))))
|
|
(list))
|
|
|
|
;; --- composing nafc with == as a guard ---
|
|
|
|
(mk-test
|
|
"nafc-as-guard"
|
|
(run*
|
|
q
|
|
(fresh (x) (== x 5) (nafc (== x 99)) (== q x)))
|
|
(list 5))
|
|
|
|
(mk-test
|
|
"nafc-guard-blocking"
|
|
(run*
|
|
q
|
|
(fresh (x) (== x 5) (nafc (== x 5)) (== q x)))
|
|
(list))
|
|
|
|
(mk-tests-run!)
|