60 lines
3.3 KiB
Racket
60 lines
3.3 KiB
Racket
#lang racket
|
|
(require rackunit
|
|
datalog/ast
|
|
datalog/private/variant)
|
|
(require/expose datalog/private/variant
|
|
(variant-terms variant-term variant-var variant? term-hash mk-literal-hash))
|
|
|
|
(provide variant-tests)
|
|
|
|
(define (test-not-equal? n v1 v2)
|
|
(test-case n (check-not-equal? v1 v2)))
|
|
|
|
(define variant-tests
|
|
(test-suite
|
|
"variant"
|
|
|
|
(test-suite
|
|
"variant?"
|
|
(test-not-false "same" (variant? (make-literal #f 'lit1 empty) (make-literal #f 'lit1 empty)))
|
|
(test-false "dif lit" (variant? (make-literal #f 'lit1 empty) (make-literal #f 'lit2 empty)))
|
|
(test-not-false "same" (variant? (make-literal #f 'lit1 (list (make-constant #f 'k1)))
|
|
(make-literal #f 'lit1 (list (make-constant #f 'k1)))))
|
|
(test-false "dif con" (variant? (make-literal #f 'lit1 (list (make-constant #f 'k1)))
|
|
(make-literal #f 'lit1 (list (make-constant #f 'k2)))))
|
|
(test-false "dif var/con" (variant? (make-literal #f 'lit1 (list (make-variable #f 'v1)))
|
|
(make-literal #f 'lit1 (list (make-constant #f 'k1)))))
|
|
(test-false "dif con/var" (variant? (make-literal #f 'lit1 (list (make-constant #f 'k1)))
|
|
(make-literal #f 'lit1 (list (make-variable #f 'v1)))))
|
|
(test-not-false "same" (variant? (make-literal #f 'lit1 (list (make-variable #f 'v1)))
|
|
(make-literal #f 'lit1 (list (make-variable #f 'v1)))))
|
|
|
|
(test-not-false "var (dif name)" (variant? (make-literal #f 'lit1 (list (make-variable #f 'v2)))
|
|
(make-literal #f 'lit1 (list (make-variable #f 'v1))))))
|
|
|
|
(test-suite
|
|
"mem-literal"
|
|
(test-false "mt" (mem-literal (make-literal #f 'lit1 empty) empty))
|
|
(test-not-false "in" (mem-literal (make-literal #f 'lit1 empty) (list (make-literal #f 'lit1 empty))))
|
|
(test-not-false "var" (mem-literal (make-literal #f 'lit1 (list (make-variable #f 'v2)))
|
|
(list (make-literal #f 'lit1 (list (make-variable #f 'v1)))))))
|
|
|
|
(test-suite
|
|
"term-hash"
|
|
(test-equal? "var" (term-hash (make-variable #f (gensym)) equal-hash-code) 101)
|
|
(test-equal? "con" (term-hash (make-constant #f 'v2) equal-hash-code) (equal-hash-code 'v2)))
|
|
|
|
(local [(define literal-hash (mk-literal-hash equal-hash-code))
|
|
(define (literal-hash-equal? l1 l2)
|
|
(equal? (literal-hash l1) (literal-hash l2)))]
|
|
(test-suite
|
|
"mk-literal-hash"
|
|
(test-not-false "same" (literal-hash-equal? (make-literal #f 'lit1 empty) (make-literal #f 'lit1 empty)))
|
|
(test-not-false "same" (literal-hash-equal? (make-literal #f 'lit1 (list (make-constant #f 'k1)))
|
|
(make-literal #f 'lit1 (list (make-constant #f 'k1)))))
|
|
(test-not-false "same" (literal-hash-equal? (make-literal #f 'lit1 (list (make-variable #f 'v1)))
|
|
(make-literal #f 'lit1 (list (make-variable #f 'v1)))))
|
|
|
|
(test-not-false "var (dif name)" (literal-hash-equal? (make-literal #f 'lit1 (list (make-variable #f 'v2)))
|
|
(make-literal #f 'lit1 (list (make-variable #f 'v1)))))))))
|