3 ;;; File: unittests-data-clos.lisp
4 ;;; Author: AJ Rossini <blindglobe@gmail.com>
5 ;;; Copyright: (c)2008, AJ Rossini. BSD, LLGPL, or GPLv2, depending
7 ;;; Purpose: unittests for the data-clos package
8 ;;; Time-stamp: <2009-03-31 08:30:13 tony>
9 ;;; Creation: <2008-05-09 14:18:19 tony>
11 ;;; What is this talk of 'release'? Klingons do not make software
12 ;;; 'releases'. Our software 'escapes', leaving a bloody trail of
13 ;;; designers and quality assurance people in its wake.
15 (in-package :lisp-stat-unittests
)
17 (deftestsuite lisp-stat-ut-dataclos
(lisp-stat-ut) ())
19 ;;; Ensure helper-functions work
21 (addtest (lisp-stat-ut-dataclos) genseq
23 (equal (lisp-stat-data-clos::gen-seq
4)
26 (addtest (lisp-stat-ut-dataclos) genseq-null
28 (equal (lisp-stat-data-clos::gen-seq
0)
31 (addtest (lisp-stat-ut-dataclos) genseq-offset
33 (equal (lisp-stat-data-clos::gen-seq
4 2)
37 (addtest (lisp-stat-ut-dataclos) repeatseq
39 (equal (lisp-stat-data-clos::repeat-seq
3 "d")
42 (equal (lisp-stat-data-clos::repeat-seq
3 'd
)
56 (addtest (lisp-stat-ut-dataclos) df-equalp
58 (equalp (dataset (make-instance 'dataframe-array
66 (defparameter *my-df-0
*
67 (make-instance 'dataframe-array
68 :storage
#2A
((1 2 3 4 5)
70 :doc
"This is an interesting dataframe-array"
71 :case-labels
(list "a" "b" "c" "d" "e")
72 :var-labels
(list "x" "y")))
75 (defparameter *my-df-1
*
76 (make-instance 'dataframe-array
77 :storage
#2A
((1 2 3 4 5)
79 :doc
"This is an interesting dataframe-array"
80 :case-labels
(list "x" "y")
81 :var-labels
(list "a" "b" "c" "d" "e")))
83 (addtest (lisp-stat-ut-dataclos) df-consdata
85 (consistent-dataframe-p *my-df-1
*)))
87 (addtest (lisp-stat-ut-dataclos) df-access-1
89 (slot-value *my-df-1
* 'store
)))
91 (addtest (lisp-stat-ut-dataclos) df-access-2
93 (slot-value *my-df-1
* 'store
)))
95 (addtest (lisp-stat-ut-dataclos) df-access-3
99 (addtest (lisp-stat-ut-dataclos) df-access-4
102 (slot-value *my-df-1
* 'lisp-stat-data-clos
::store
)
103 (lisp-stat-data-clos::dataset
*my-df-1
*))))
105 (addtest (lisp-stat-ut-dataclos) badAccess5
107 (eq (lisp-stat-data-clos::dataset
*my-df-1
*)
108 (slot-value *my-df-1
* 'lisp-stat-data-clos
::store
))))
111 ;; NEVER REACH INTO CLASS INTERIORS, NO PROMISE GUARANTEE OF LATER CONSISTENCY...
113 (addtest (lisp-stat-ut-dataclos) badAccess6
115 (lisp-stat-data-clos::doc-string
*my-df-1
*))
117 (doc-string *my-df-1
*)))
119 (addtest (lisp-stat-ut-dataclos) badAccess7
121 (lisp-stat-data-clos::case-labels
*my-df-1
*))
123 (case-labels *my-df-1
*)))
125 (addtest (lisp-stat-ut-dataclos) badAccess8
127 (lisp-stat-data-clos::var-labels
*my-df-1
*))
129 (var-labels *my-df-1
*)))
131 ;; need to ensure that for things like the following, that we protect
132 ;; this a bit more so that the results are not going to to be wrong.
133 ;; That would be a bit nasty if the dataframe-array becomes
136 (addtest (lisp-stat-ut-dataclos) badAccess9
138 (setf (lisp-stat-data-clos::var-labels
*my-df-1
*)
141 (addtest (lisp-stat-ut-dataclos) badAccess10
144 ;; no error, but corrupts structure
145 (setf (lisp-stat-data-clos::var-labels
*my-df-1
*)
147 ;; error happens here
148 (not (consistent-dataframe-like-p *my-df-1
*))))) ;; Nil
150 (addtest (lisp-stat-ut-dataclos) badAccess12
152 (setf (lisp-stat-data-clos::var-labels
*my-df-1
*)
155 (addtest (lisp-stat-ut-dataclos) badAccess13
157 (consistent-dataframe-like-p *my-df-1
*))) ;; T
159 ;; This is now done by:
160 (addtest (lisp-stat-ut-dataclos) badAccess14
162 (let ((old-varnames (varNames *my-df-1
*)))
163 (setf (varNames *my-df-1
*) (list "a" "b")) ;; should error
164 (setf (varNames *my-df-1
*) old-varnames
)
165 (error "don't reach this point in badaccess14"))))
168 (defvar origCaseNames nil
)
170 (addtest (lisp-stat-ut-dataclos) badAccess15
173 (setf origCaseNames
(caseNames *my-df-1
*))
174 (setf (caseNames *my-df-1
*) (list "a" "b" "c" 4 5))
175 (caseNames *my-df-1
*)
177 (setf (caseNames *my-df-1
*)
179 (setf (caseNames *my-df-1
*) origCaseNames
))))
183 ;; (describe (run-tests))