;; 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!)
