annotate bindings/sb-alien/tests.lisp @ 770:c54bc2ffbf92 tip

update tags
author convert-repo
date Fri, 16 Dec 2011 11:34:01 +0000
parents fb85aadab85d
children
rev   line source
mas01cr@511 1 (in-package "SB-ADB")
mas01cr@511 2
mas01cr@661 3 (load-shared-object "../../libaudioDB.so.0.0")
mas01cr@661 4
mas01cr@511 5 (define-symbol-macro %default-query-args nil)
mas01cr@511 6 (defmacro with-default-query-args (args &body body &environment env)
mas01cr@511 7 (let ((current-args (macroexpand '%default-query-args env)))
mas01cr@511 8 `(symbol-macrolet ((%default-query-args ,(append args current-args)))
mas01cr@511 9 ,@body)))
mas01cr@511 10
mas01cr@511 11 (defmacro with-query-result-assertions
mas01cr@511 12 ((query db &rest query-args) &body body &environment env)
mas01cr@511 13 (let ((results (gensym "RESULTS"))
mas01cr@511 14 (default-args (macroexpand '%default-query-args env)))
mas01cr@511 15 `(let* ((,results (query ,query ,db ,@query-args ,@default-args))
mas01cr@511 16 (length (length ,results)))
mas01cr@511 17 (flet ((%present (list)
mas01cr@511 18 (find-if (lambda (r)
mas01cr@511 19 (and
mas01cr@674 20 (string= (first list) (result-ikey r))
mas01cr@511 21 (< (abs (- (second list) (result-distance r))) 1e-4)
mas01cr@511 22 (= (third list) (result-qpos r))
mas01cr@511 23 (= (fourth list) (result-ipos r))))
mas01cr@511 24 ,results)))
mas01cr@511 25 (declare (ignorable #'%present))
mas01cr@511 26 (macrolet ((present (&rest forms)
mas01cr@511 27 `(and ,@(loop for f in forms collect `(%present ',f)))))
mas01cr@511 28 ,@(loop for b in body collect `(assert ,b)))))))
mas01cr@511 29
mas01cr@511 30 (defmacro with-asserted-query-results ((query db &rest query-args) &body body)
mas01cr@511 31 `(with-query-result-assertions (,query ,db ,@query-args)
mas01cr@511 32 (= length ,(length body))
mas01cr@511 33 (present ,@body)))
mas01cr@511 34
mas01cr@634 35 (defmacro assert-erroneous (form)
mas01cr@634 36 `(handler-case ,form
mas01cr@634 37 (error ())
mas01cr@634 38 (:no-error (&rest values)
mas01cr@634 39 (error "No error: returned ~S" values))))
mas01cr@634 40
mas01cr@511 41 (declaim (optimize debug))
mas01cr@511 42
mas01cr@511 43 (defun test-0003 ()
mas01cr@511 44 (let ((datum (make-datum "testfeature" '((1d0)))))
mas01cr@511 45 (with-adb (db "testdb.0003" :direction :output :if-exists :supersede)
mas01cr@511 46 (l2norm db)
mas01cr@511 47 (insert datum db)
mas01cr@511 48 (with-asserted-query-results
mas01cr@511 49 (datum db :npoints 10 :accumulation :db :distance :dot-product)
mas01cr@511 50 ("testfeature" 1 0 0)))))
mas01cr@511 51
mas01cr@511 52 (defun test-0004 ()
mas01cr@511 53 (let ((feature (make-datum "testfeature" '((0d0 1d0) (1d0 0d0))))
mas01cr@511 54 (query05 (make-datum "testquery" '((0d0 0.5d0))))
mas01cr@511 55 (query50 (make-datum "testquery" '((0.5d0 0d0)))))
mas01cr@511 56 (with-adb (db "testdb.0004" :direction :output :if-exists :supersede)
mas01cr@511 57 (l2norm db)
mas01cr@511 58 (insert feature db)
mas01cr@511 59 (with-default-query-args (:accumulation :db :distance :dot-product)
mas01cr@511 60 (with-asserted-query-results (query05 db :npoints 10)
mas01cr@511 61 ("testfeature" 0.5 0 0) ("testfeature" 0 0 1))
mas01cr@511 62 (with-asserted-query-results (query05 db :npoints 1)
mas01cr@511 63 ("testfeature" 0.5 0 0))
mas01cr@511 64 (with-asserted-query-results (query50 db :npoints 10)
mas01cr@511 65 ("testfeature" 0.5 0 1) ("testfeature" 0 0 0))
mas01cr@511 66 (with-asserted-query-results (query50 db :npoints 1)
mas01cr@511 67 ("testfeature" 0.5 0 1))))))
mas01cr@511 68
mas01cr@511 69 (defun test-0010 ()
mas01cr@511 70 (let ((feature01 (make-datum "testfeature01" '((0d0 1d0))))
mas01cr@511 71 (feature10 (make-datum "testfeature10" '((1d0 0d0))))
mas01cr@511 72 (query05 (make-datum "testquery" '((0d0 0.5d0))))
mas01cr@511 73 (query50 (make-datum "testquery" '((0.5d0 0d0)))))
mas01cr@511 74 (with-adb (db "testdb.0010" :direction :output :if-exists :supersede)
mas01cr@511 75 (insert feature01 db)
mas01cr@511 76 (insert feature10 db)
mas01cr@511 77 (l2norm db)
mas01cr@511 78 (with-default-query-args
mas01cr@511 79 (:accumulation :per-track :ntracks 10 :npoints 10 :distance :euclidean-normed)
mas01cr@511 80 (with-asserted-query-results (query05 db)
mas01cr@511 81 ("testfeature01" 0 0 0) ("testfeature10" 2 0 0))
mas01cr@511 82 (with-asserted-query-results (query05 db :radius 5)
mas01cr@511 83 ("testfeature01" 0 0 0) ("testfeature10" 2 0 0))
mas01cr@511 84 (with-asserted-query-results (query05 db :radius 1)
mas01cr@511 85 ("testfeature01" 0 0 0))
mas01cr@511 86 (with-asserted-query-results (query50 db)
mas01cr@511 87 ("testfeature01" 2 0 0) ("testfeature10" 0 0 0))
mas01cr@511 88 (with-asserted-query-results (query50 db :radius 5)
mas01cr@511 89 ("testfeature01" 2 0 0) ("testfeature10" 0 0 0))
mas01cr@511 90 (with-asserted-query-results (query50 db :radius 1)
mas01cr@511 91 ("testfeature10" 0 0 0))))))
mas01cr@511 92
mas01cr@511 93 (defun test-0031 ()
mas01cr@511 94 (let ((feature01 (make-datum "testfeature01" '((0d0 1d0))))
mas01cr@511 95 (feature10 (make-datum "testfeature10" '((1d0 0d0))))
mas01cr@511 96 (query05 (make-datum "testquery" '((0d0 0.5d0)))))
mas01cr@511 97 (with-adb (db "testdb.0031" :direction :output :if-exists :supersede)
mas01cr@511 98 (insert feature01 db)
mas01cr@511 99 (insert feature10 db)
mas01cr@511 100 (l2norm db)
mas01cr@511 101 (with-default-query-args
mas01cr@511 102 (:accumulation :per-track :ntracks 10 :npoints 10 :distance :euclidean-normed)
mas01cr@511 103 (with-asserted-query-results (query05 db)
mas01cr@511 104 ("testfeature01" 0 0 0) ("testfeature10" 2 0 0))
mas01cr@511 105 (with-asserted-query-results (query05 db :include-keys ()))
mas01cr@511 106 (with-asserted-query-results (query05 db :include-keys '("testfeature01"))
mas01cr@511 107 ("testfeature01" 0 0 0))
mas01cr@511 108 (with-asserted-query-results (query05 db :include-keys '("testfeature10"))
mas01cr@511 109 ("testfeature10" 2 0 0))
mas01cr@511 110 (with-asserted-query-results (query05 db :include-keys '("testfeature10" "testfeature01"))
mas01cr@511 111 ("testfeature01" 0 0 0) ("testfeature10" 2 0 0))
mas01cr@511 112
mas01cr@511 113 (with-asserted-query-results (query05 db :exclude-keys '("testfeature10" "testfeature01")))
mas01cr@511 114
mas01cr@511 115 (with-asserted-query-results (query05 db :exclude-keys '("testfeature01"))
mas01cr@511 116 ("testfeature10" 2 0 0))
mas01cr@511 117 (with-asserted-query-results (query05 db :exclude-keys '("testfeature10"))
mas01cr@511 118 ("testfeature01" 0 0 0))
mas01cr@511 119 (with-asserted-query-results (query05 db :exclude-keys ())
mas01cr@511 120 ("testfeature01" 0 0 0) ("testfeature10" 2 0 0))))))
mas01cr@511 121
mas01cr@511 122 (defun test-0036 ()
mas01cr@511 123 (let ((feature01 (make-datum "testfeature01" '((0d0 1d0) (1d0 0d0))))
mas01cr@511 124 (feature10 (make-datum "testfeature10" '((1d0 0d0) (0d0 1d0))))
mas01cr@511 125 (query05 (make-datum "testquery" '((0d0 0.5d0))))
mas01cr@511 126 (query50 (make-datum "testquery" '((0.5d0 0d0)))))
mas01cr@511 127 (with-adb (db "testdb.0036" :direction :output :if-exists :supersede)
mas01cr@511 128 (insert feature01 db)
mas01cr@511 129 (insert feature10 db)
mas01cr@511 130 (l2norm db)
mas01cr@511 131 (with-default-query-args
mas01cr@511 132 (:accumulation :per-track :ntracks 10 :distance :euclidean-normed)
mas01cr@511 133 (dolist (npoints '(10 2 5))
mas01cr@511 134 (with-asserted-query-results (query05 db :npoints npoints)
mas01cr@511 135 ("testfeature01" 0 0 0) ("testfeature01" 2 0 1)
mas01cr@511 136 ("testfeature10" 0 0 1) ("testfeature10" 2 0 0)))
mas01cr@511 137 (with-asserted-query-results (query05 db :npoints 1)
mas01cr@511 138 ("testfeature01" 0 0 0) ("testfeature10" 0 0 1))
mas01cr@511 139 (dolist (npoints '(10 2 5))
mas01cr@511 140 (with-asserted-query-results (query50 db :npoints npoints)
mas01cr@511 141 ("testfeature01" 0 0 1) ("testfeature01" 2 0 0)
mas01cr@511 142 ("testfeature10" 0 0 0) ("testfeature10" 2 0 1)))
mas01cr@511 143 (with-asserted-query-results (query50 db :npoints 1)
mas01cr@511 144 ("testfeature01" 0 0 1) ("testfeature10" 0 0 0))))))
mas01cr@634 145
mas01cr@634 146 (defun test-0048 ()
mas01cr@634 147 (let ((datum1 (make-datum "testfeature01" '((0d0 0.5d0) (0.5d0 0d0))
mas01cr@634 148 :times (coerce '(0d0 1d0 1d0 2d0) '(vector double-float))))
mas01cr@634 149 (datum2 (make-datum "testfeature10" '((0.5d0 0d0) (0d0 0.5d0) (0.5d0 0d0))
mas01cr@634 150 :times (coerce '(0d0 2d0 2d0 3d0 3d0 4d0) '(vector double-float)))))
mas01cr@634 151 (with-adb (db "testdb.0048" :direction :output :if-exists :supersede)
mas01cr@634 152 (insert datum1 db)
mas01cr@634 153 (insert datum2 db)
mas01cr@634 154 (l2norm db)
mas01cr@634 155 (assert-erroneous (retrieve "testfeature" db))
mas01cr@634 156 (assert (equalp (retrieve "testfeature01" db) datum1))
mas01cr@634 157 (assert (equalp (retrieve "testfeature10" db) datum2)))))
mas01cr@661 158
mas01cr@661 159 (defun run-tests ()
mas01cr@661 160 (test-0003)
mas01cr@661 161 (test-0004)
mas01cr@661 162 (test-0010)
mas01cr@661 163 (test-0031)
mas01cr@661 164 (test-0036)
mas01cr@661 165 (test-0048))