racket/collects/tests/datalog/runtime.rkt

45 lines
1.4 KiB
Racket

#lang racket
(require rackunit
datalog/parse
datalog/runtime
"util.rkt")
(provide runtime-tests)
(define pc (parse-clause (open-input-string "parent(john, douglas)")))
(define pl (parse-literal (open-input-string "parent(john, douglas)")))
(define runtime-tests
(test-suite
"runtime"
(test-suite
"safe-clause?"
(test-not-false "safe" (safe-clause? pc))
(test-not-false "safe" (safe-clause? (parse-clause (open-input-string "ancestor(A, B) :- parent(A, B)"))))
(test-false "not safe" (safe-clause? (parse-clause (open-input-string "ancestor(A, B) :- parent(jay, B)"))))
(test-not-false "safe" (safe-clause? (parse-clause (open-input-string "ancestor(A, B) :- parent(A, C), ancestor(C, B)")))))
(test-suite
"mut simple"
(test-equal? "empty" (prove (make-theory) pl) empty)
(test-literal "ass->prov"
(let ([thy (make-theory)])
(assume! thy pc)
(first (prove thy pl)))
pl)
(test-equal? "ass->ret->prov"
(let ([thy (make-theory)])
(assume! thy pc)
(retract! thy pc)
(prove thy pl))
empty)
(test-equal? "ret->prov"
(let ([thy (make-theory)])
(retract! thy pc)
(prove thy pl))
empty))
))