Mercurial > lasercutter
diff 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 |
line wrap: on
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/clojure/contrib/test_contrib/datalog/tests/test_database.clj Sat Aug 21 06:25:44 2010 -0400 1.3 @@ -0,0 +1,153 @@ 1.4 +;; Copyright (c) Jeffrey Straszheim. All rights reserved. The use and 1.5 +;; distribution terms for this software are covered by the Eclipse Public 1.6 +;; License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can 1.7 +;; be found in the file epl-v10.html at the root of this distribution. By 1.8 +;; using this software in any fashion, you are agreeing to be bound by the 1.9 +;; terms of this license. You must not remove this notice, or any other, 1.10 +;; from this software. 1.11 +;; 1.12 +;; test-database.clj 1.13 +;; 1.14 +;; A Clojure implementation of Datalog -- Database 1.15 +;; 1.16 +;; straszheimjeffrey (gmail) 1.17 +;; Created 12 Feburary 2009 1.18 + 1.19 + 1.20 +(ns clojure.contrib.datalog.tests.test-database 1.21 + (:use clojure.test 1.22 + clojure.contrib.datalog.database)) 1.23 + 1.24 + 1.25 +(def test-db 1.26 + (make-database 1.27 + (relation :fred [:mary :sue]) 1.28 + (index :fred :mary) 1.29 + (relation :sally [:jen :becky :joan]) 1.30 + (index :sally :jen) 1.31 + (index :sally :becky))) 1.32 + 1.33 +(deftest test-make-database 1.34 + (is (= test-db 1.35 + (datalog-database 1.36 + {:sally (datalog-relation 1.37 + #{:jen :joan :becky} 1.38 + #{} 1.39 + {:becky {} 1.40 + :jen {}}) 1.41 + :fred (datalog-relation 1.42 + #{:sue :mary} 1.43 + #{} 1.44 + {:mary {}})})))) 1.45 + 1.46 + 1.47 +(deftest test-ensure-relation 1.48 + (is (contains? (ensure-relation test-db :bob [:sam :george] [:sam]) :bob)) 1.49 + (is (contains? (ensure-relation test-db :fred [:mary :sue] [:mary]) :fred)) 1.50 + (is (thrown? AssertionError (ensure-relation test-db :fred [:bob :joe] [])))) 1.51 + 1.52 +(deftest test-add-tuple 1.53 + (let [new-db (add-tuple test-db :fred {:mary 1 :sue 2})] 1.54 + (is (= (select new-db :fred {:mary 1}) [{:mary 1 :sue 2}]))) 1.55 + (is (thrown? AssertionError (add-tuple test-db :fred {:mary 1})))) 1.56 + 1.57 +(def test-db-1 1.58 + (add-tuples test-db 1.59 + [:fred :mary 1 :sue 2] 1.60 + [:fred :mary 2 :sue 3] 1.61 + [:sally :jen 1 :becky 2 :joan 0] 1.62 + [:sally :jen 1 :becky 4 :joan 3] 1.63 + [:sally :jen 1 :becky 3 :joan 0] 1.64 + [:sally :jen 1 :becky 2 :joan 3] 1.65 + [:fred :mary 1 :sue 1] 1.66 + [:fred :mary 3 :sue 1])) 1.67 + 1.68 +(deftest test-add-tuples 1.69 + (is (= test-db-1 1.70 + (datalog-database 1.71 + {:sally (datalog-relation 1.72 + #{:jen :joan :becky} 1.73 + #{{:jen 1, :joan 0, :becky 3} 1.74 + {:jen 1, :joan 0, :becky 2} 1.75 + {:jen 1, :joan 3, :becky 2} 1.76 + {:jen 1, :joan 3, :becky 4}} 1.77 + {:becky {3 1.78 + #{{:jen 1, :joan 0, :becky 3}} 1.79 + 4 1.80 + #{{:jen 1, :joan 3, :becky 4}} 1.81 + 2 1.82 + #{{:jen 1, :joan 0, :becky 2} 1.83 + {:jen 1, :joan 3, :becky 2}}} 1.84 + :jen {1 1.85 + #{{:jen 1, :joan 0, :becky 3} 1.86 + {:jen 1, :joan 0, :becky 2} 1.87 + {:jen 1, :joan 3, :becky 2} 1.88 + {:jen 1, :joan 3, :becky 4}}}}) 1.89 + :fred (datalog-relation 1.90 + #{:sue :mary} 1.91 + #{{:sue 2, :mary 1} 1.92 + {:sue 1, :mary 1} 1.93 + {:sue 3, :mary 2} 1.94 + {:sue 1, :mary 3}} 1.95 + {:mary {3 1.96 + #{{:sue 1, :mary 3}} 1.97 + 2 1.98 + #{{:sue 3, :mary 2}} 1.99 + 1 1.100 + #{{:sue 2, :mary 1} 1.101 + {:sue 1, :mary 1}}}})})))) 1.102 + 1.103 +(deftest test-remove-tuples 1.104 + (let [db (reduce #(apply remove-tuple %1 (first %2) (next %2)) 1.105 + test-db-1 1.106 + [[:fred {:mary 1 :sue 1}] 1.107 + [:fred {:mary 3 :sue 1}] 1.108 + [:sally {:jen 1 :becky 2 :joan 0}] 1.109 + [:sally {:jen 1 :becky 4 :joan 3}]])] 1.110 + (is (= db 1.111 + (datalog-database 1.112 + {:sally (datalog-relation 1.113 + #{:jen :joan :becky} 1.114 + #{{:jen 1, :joan 0, :becky 3} 1.115 + {:jen 1, :joan 3, :becky 2}} 1.116 + {:becky 1.117 + {3 1.118 + #{{:jen 1, :joan 0, :becky 3}} 1.119 + 2 1.120 + #{{:jen 1, :joan 3, :becky 2}}} 1.121 + :jen 1.122 + {1 1.123 + #{{:jen 1, :joan 0, :becky 3} 1.124 + {:jen 1, :joan 3, :becky 2}}}}) 1.125 + :fred (datalog-relation 1.126 + #{:sue :mary} 1.127 + #{{:sue 2, :mary 1} 1.128 + {:sue 3, :mary 2}} 1.129 + {:mary 1.130 + {2 1.131 + #{{:sue 3, :mary 2}} 1.132 + 1 1.133 + #{{:sue 2, :mary 1}}}})}))))) 1.134 + 1.135 + 1.136 + 1.137 +(deftest test-select 1.138 + (is (= (set (select test-db-1 :sally {:jen 1 :becky 2})) 1.139 + #{{:jen 1 :joan 0 :becky 2} {:jen 1 :joan 3 :becky 2}})) 1.140 + (is (= (set (select test-db-1 :fred {:sue 1}))) 1.141 + #{{:mary 3 :sue 1} {:mary 1 :sue 1}}) 1.142 + (is (empty? (select test-db-1 :sally {:joan 5 :jen 1})))) 1.143 + 1.144 +(deftest test-any-match? 1.145 + (is (any-match? test-db-1 :fred {:mary 3})) 1.146 + (is (any-match? test-db-1 :sally {:jen 1 :becky 2 :joan 3})) 1.147 + (is (not (any-match? test-db-1 :sally {:jen 5}))) 1.148 + (is (not (any-match? test-db-1 :fred {:mary 1 :sue 5})))) 1.149 + 1.150 + 1.151 +(comment 1.152 + (run-tests) 1.153 +) 1.154 + 1.155 +;; End of file 1.156 +