;;; triple-tests.lisp ;;; ;;; 09/20/2016 fixed equality test in find-connection-animals [CKR] ;;; 09/19/2016 file released [CKR] (defpackage #:triple-tests (:use #:common-lisp #:lisp-unit #:triples) ) (in-package #:triple-tests) (defparameter *animal-triples* '((mammal isa animal) (mammal has vertebra) (cat isa mammal) (cat has fur) (bear isa mammal) (bear has fur) (fish isa animal) (fish lives-in water) (whale isa mammal) (whale lives-in water) )) ;;; since there are multiple paths in most cases, we just check ;;; the length to make sure a shortest answer is found (define-test find-connection-animals (assert-equal '((cat isa mammal)) (find-connection 'cat 'mammal *animal-triples*)) (assert-equal '((whale lives-in water)) (find-connection 'whale 'water *animal-triples*)) (assert-equality set-equal '((mammal has vertebra) (cat isa mammal)) (find-connection 'cat 'vertebra *animal-triples*)) (assert-equal 1 (length (find-connection 'cat 'cat *animal-triples*))) (assert-equal 3 (length (find-connection 'cat 'water *animal-triples*))) (assert-equal 4 (length (find-connection 'fur 'fish *animal-triples*))) (assert-equal 3 (length (find-connection 'cat 'water *animal-triples* :limit 3))) (assert-false (find-connection 'cat 'water *animal-triples* :limit 2)) ) (defvar *movie-triples* nil) (define-test load-triples (assert-equal 2909 (length (setq *movie-triples* (load-triples *movie-file*)))) ) (define-test find-connection-movies (when (null *movie-triples*) (setq *movie-triples* (load-triples *movie-file*))) (assert-equal '((the_cotton_club director francis_ford_coppola)) (find-connection 'francis_ford_coppola 'the_cotton_club *movie-triples*)) (assert-equal '((blood_simple actor barry_sonnenfeld) (blood_simple director joel_coen)) (find-connection 'joel_coen 'barry_sonnenfeld *movie-triples*)) (when (y-or-n-p "Run very long Johansson - Coppola test?") (assert-equal 4 (length (find-connection 'scarlett_johansson 'francis_ford_coppola *movie-triples* :limit 4)))) )