annotate src/clojure/contrib/test_contrib/datalog/tests/test_database.clj @ 10:ef7dbbd6452c

added clojure source goodness
author Robert McIntyre <rlm@mit.edu>
date Sat, 21 Aug 2010 06:25:44 -0400
parents
children
rev   line source
rlm@10 1 ;; Copyright (c) Jeffrey Straszheim. All rights reserved. The use and
rlm@10 2 ;; distribution terms for this software are covered by the Eclipse Public
rlm@10 3 ;; License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can
rlm@10 4 ;; be found in the file epl-v10.html at the root of this distribution. By
rlm@10 5 ;; using this software in any fashion, you are agreeing to be bound by the
rlm@10 6 ;; terms of this license. You must not remove this notice, or any other,
rlm@10 7 ;; from this software.
rlm@10 8 ;;
rlm@10 9 ;; test-database.clj
rlm@10 10 ;;
rlm@10 11 ;; A Clojure implementation of Datalog -- Database
rlm@10 12 ;;
rlm@10 13 ;; straszheimjeffrey (gmail)
rlm@10 14 ;; Created 12 Feburary 2009
rlm@10 15
rlm@10 16
rlm@10 17 (ns clojure.contrib.datalog.tests.test-database
rlm@10 18 (:use clojure.test
rlm@10 19 clojure.contrib.datalog.database))
rlm@10 20
rlm@10 21
rlm@10 22 (def test-db
rlm@10 23 (make-database
rlm@10 24 (relation :fred [:mary :sue])
rlm@10 25 (index :fred :mary)
rlm@10 26 (relation :sally [:jen :becky :joan])
rlm@10 27 (index :sally :jen)
rlm@10 28 (index :sally :becky)))
rlm@10 29
rlm@10 30 (deftest test-make-database
rlm@10 31 (is (= test-db
rlm@10 32 (datalog-database
rlm@10 33 {:sally (datalog-relation
rlm@10 34 #{:jen :joan :becky}
rlm@10 35 #{}
rlm@10 36 {:becky {}
rlm@10 37 :jen {}})
rlm@10 38 :fred (datalog-relation
rlm@10 39 #{:sue :mary}
rlm@10 40 #{}
rlm@10 41 {:mary {}})}))))
rlm@10 42
rlm@10 43
rlm@10 44 (deftest test-ensure-relation
rlm@10 45 (is (contains? (ensure-relation test-db :bob [:sam :george] [:sam]) :bob))
rlm@10 46 (is (contains? (ensure-relation test-db :fred [:mary :sue] [:mary]) :fred))
rlm@10 47 (is (thrown? AssertionError (ensure-relation test-db :fred [:bob :joe] []))))
rlm@10 48
rlm@10 49 (deftest test-add-tuple
rlm@10 50 (let [new-db (add-tuple test-db :fred {:mary 1 :sue 2})]
rlm@10 51 (is (= (select new-db :fred {:mary 1}) [{:mary 1 :sue 2}])))
rlm@10 52 (is (thrown? AssertionError (add-tuple test-db :fred {:mary 1}))))
rlm@10 53
rlm@10 54 (def test-db-1
rlm@10 55 (add-tuples test-db
rlm@10 56 [:fred :mary 1 :sue 2]
rlm@10 57 [:fred :mary 2 :sue 3]
rlm@10 58 [:sally :jen 1 :becky 2 :joan 0]
rlm@10 59 [:sally :jen 1 :becky 4 :joan 3]
rlm@10 60 [:sally :jen 1 :becky 3 :joan 0]
rlm@10 61 [:sally :jen 1 :becky 2 :joan 3]
rlm@10 62 [:fred :mary 1 :sue 1]
rlm@10 63 [:fred :mary 3 :sue 1]))
rlm@10 64
rlm@10 65 (deftest test-add-tuples
rlm@10 66 (is (= test-db-1
rlm@10 67 (datalog-database
rlm@10 68 {:sally (datalog-relation
rlm@10 69 #{:jen :joan :becky}
rlm@10 70 #{{:jen 1, :joan 0, :becky 3}
rlm@10 71 {:jen 1, :joan 0, :becky 2}
rlm@10 72 {:jen 1, :joan 3, :becky 2}
rlm@10 73 {:jen 1, :joan 3, :becky 4}}
rlm@10 74 {:becky {3
rlm@10 75 #{{:jen 1, :joan 0, :becky 3}}
rlm@10 76 4
rlm@10 77 #{{:jen 1, :joan 3, :becky 4}}
rlm@10 78 2
rlm@10 79 #{{:jen 1, :joan 0, :becky 2}
rlm@10 80 {:jen 1, :joan 3, :becky 2}}}
rlm@10 81 :jen {1
rlm@10 82 #{{:jen 1, :joan 0, :becky 3}
rlm@10 83 {:jen 1, :joan 0, :becky 2}
rlm@10 84 {:jen 1, :joan 3, :becky 2}
rlm@10 85 {:jen 1, :joan 3, :becky 4}}}})
rlm@10 86 :fred (datalog-relation
rlm@10 87 #{:sue :mary}
rlm@10 88 #{{:sue 2, :mary 1}
rlm@10 89 {:sue 1, :mary 1}
rlm@10 90 {:sue 3, :mary 2}
rlm@10 91 {:sue 1, :mary 3}}
rlm@10 92 {:mary {3
rlm@10 93 #{{:sue 1, :mary 3}}
rlm@10 94 2
rlm@10 95 #{{:sue 3, :mary 2}}
rlm@10 96 1
rlm@10 97 #{{:sue 2, :mary 1}
rlm@10 98 {:sue 1, :mary 1}}}})}))))
rlm@10 99
rlm@10 100 (deftest test-remove-tuples
rlm@10 101 (let [db (reduce #(apply remove-tuple %1 (first %2) (next %2))
rlm@10 102 test-db-1
rlm@10 103 [[:fred {:mary 1 :sue 1}]
rlm@10 104 [:fred {:mary 3 :sue 1}]
rlm@10 105 [:sally {:jen 1 :becky 2 :joan 0}]
rlm@10 106 [:sally {:jen 1 :becky 4 :joan 3}]])]
rlm@10 107 (is (= db
rlm@10 108 (datalog-database
rlm@10 109 {:sally (datalog-relation
rlm@10 110 #{:jen :joan :becky}
rlm@10 111 #{{:jen 1, :joan 0, :becky 3}
rlm@10 112 {:jen 1, :joan 3, :becky 2}}
rlm@10 113 {:becky
rlm@10 114 {3
rlm@10 115 #{{:jen 1, :joan 0, :becky 3}}
rlm@10 116 2
rlm@10 117 #{{:jen 1, :joan 3, :becky 2}}}
rlm@10 118 :jen
rlm@10 119 {1
rlm@10 120 #{{:jen 1, :joan 0, :becky 3}
rlm@10 121 {:jen 1, :joan 3, :becky 2}}}})
rlm@10 122 :fred (datalog-relation
rlm@10 123 #{:sue :mary}
rlm@10 124 #{{:sue 2, :mary 1}
rlm@10 125 {:sue 3, :mary 2}}
rlm@10 126 {:mary
rlm@10 127 {2
rlm@10 128 #{{:sue 3, :mary 2}}
rlm@10 129 1
rlm@10 130 #{{:sue 2, :mary 1}}}})})))))
rlm@10 131
rlm@10 132
rlm@10 133
rlm@10 134 (deftest test-select
rlm@10 135 (is (= (set (select test-db-1 :sally {:jen 1 :becky 2}))
rlm@10 136 #{{:jen 1 :joan 0 :becky 2} {:jen 1 :joan 3 :becky 2}}))
rlm@10 137 (is (= (set (select test-db-1 :fred {:sue 1})))
rlm@10 138 #{{:mary 3 :sue 1} {:mary 1 :sue 1}})
rlm@10 139 (is (empty? (select test-db-1 :sally {:joan 5 :jen 1}))))
rlm@10 140
rlm@10 141 (deftest test-any-match?
rlm@10 142 (is (any-match? test-db-1 :fred {:mary 3}))
rlm@10 143 (is (any-match? test-db-1 :sally {:jen 1 :becky 2 :joan 3}))
rlm@10 144 (is (not (any-match? test-db-1 :sally {:jen 5})))
rlm@10 145 (is (not (any-match? test-db-1 :fred {:mary 1 :sue 5}))))
rlm@10 146
rlm@10 147
rlm@10 148 (comment
rlm@10 149 (run-tests)
rlm@10 150 )
rlm@10 151
rlm@10 152 ;; End of file
rlm@10 153