1 ;;; ase-tests.el -- Tests for ASE
2 ;; Copyright (C) 2006, 2007 Sebastian Freundt
4 ;; Author: Sebastian Freundt <hroptatyr@sxemacs.org>
7 ;; This file is part of SXEmacs.
9 ;; Redistribution and use in source and binary forms, with or without
10 ;; modification, are permitted provided that the following conditions
13 ;; 1. Redistributions of source code must retain the above copyright
14 ;; notice, this list of conditions and the following disclaimer.
16 ;; 2. Redistributions in binary form must reproduce the above copyright
17 ;; notice, this list of conditions and the following disclaimer in the
18 ;; documentation and/or other materials provided with the distribution.
20 ;; 3. Neither the name of the author nor the names of any contributors
21 ;; may be used to endorse or promote products derived from this
22 ;; software without specific prior written permission.
24 ;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
25 ;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26 ;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 ;; DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 ;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 ;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 ;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
31 ;; BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
32 ;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
33 ;; OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
34 ;; IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 ;;; Synched up with: Not in FSF.
39 ;; - test for conceptionally correct arithmetic
40 ;; See test-harness.el for instructions on how to run these tests.
44 (require 'test-harness)
47 (when (and (boundp 'load-file-name) (stringp load-file-name))
48 (push (file-name-directory load-file-name) load-path))
49 (require 'test-harness))))
53 (and (featurep 'modules)
54 (locate-module "ase-set")
56 (and (locate-module "ase-cartesian")
57 (require 'ase-cartesian)))
59 (when (featurep 'ase-set)
60 ;; create some intervals first
61 (setq i1 (ase-interval 0 1))
62 (setq i2 (ase-interval 1 2))
63 (setq i3 (ase-interval 2 3))
64 (setq i5 (ase-interval 0 1 t t))
65 (setq i6 (ase-interval 1 2 t t))
66 (setq i7 (ase-interval 2 3 t t))
67 (setq i8 (ase-interval 0 2))
68 (setq i9 (ase-interval 1 3))
69 (setq ia (ase-interval 1 1))
70 (setq ib (ase-interval 1 1 t t)) ;; should be transformed to empty interv
71 (setq ic (ase-interval 1 1 nil t)) ;; should be transformed to empty interv
72 (setq id (ase-interval 0 0))
73 (setq ie (ase-interval 2 2))
74 (setq if (ase-interval 3 3))
75 (setq aei (ase-empty-interval))
76 (setq aui (ase-universe-interval))
77 (setq it (ase-interval 2))
78 (setq i123 (ase-interval 0 3))
79 (setq i23 (ase-interval 1 3))
81 (setq i56 (ase-interval-union i5 i6))
82 (setq i67 (ase-interval-union i7 i6))
83 (setq i567 (ase-interval-union i5 i6 i7))
84 (setq i13 (ase-interval-union i3 i1))
85 (setq isp (ase-interval-union
86 (ase-interval -infinity
87 (if (featurep 'bigq) -3/2 -3)) (ase-interval -1)))
88 (setq huge (ase-interval 0 10))
89 (setq tiny (ase-interval 2 5))
91 (Assert (not (ase-interval-empty-p i1)))
92 (Assert (not (ase-interval-empty-p i2)))
93 (Assert (not (ase-interval-empty-p i3)))
94 (Assert (not (ase-interval-empty-p i5)))
95 (Assert (not (ase-interval-empty-p i6)))
96 (Assert (not (ase-interval-empty-p i7)))
97 (Assert (not (ase-interval-empty-p i8)))
98 (Assert (not (ase-interval-empty-p ia)))
99 (Assert (ase-interval-empty-p ib))
100 (Assert (ase-interval-empty-p ic))
101 (Assert (ase-interval-empty-p aei))
102 (Assert (not (ase-interval-empty-p aui)))
103 (Assert (ase-interval-empty-p (ase-interval-union)))
104 (Assert (ase-interval-empty-p (ase-interval-union (ase-interval-union))))
106 (Assert (not (ase-interval-imprimitive-p i1)))
107 (Assert (not (ase-interval-imprimitive-p i2)))
108 (Assert (not (ase-interval-imprimitive-p i3)))
109 (Assert (not (ase-interval-imprimitive-p i5)))
110 (Assert (not (ase-interval-imprimitive-p i6)))
111 (Assert (not (ase-interval-imprimitive-p i7)))
112 (Assert (not (ase-interval-imprimitive-p i8)))
113 (Assert (not (ase-interval-imprimitive-p i9)))
114 (Assert (ase-interval-imprimitive-p i567))
115 (Assert (ase-interval-imprimitive-p i13))
117 (Assert (ase-interval-contains-p i1 0))
118 (Assert (ase-interval-contains-p i2 2))
119 (Assert (not (ase-interval-contains-p i5 0)))
120 (when (featurep 'bigq)
121 (Assert (ase-interval-contains-p i5 1/2)))
122 (Assert (ase-interval-contains-p i5 0.9999))
123 (Assert (not (ase-interval-contains-p i8 i9)))
124 (Assert (not (ase-interval-contains-p i9 i8)))
125 (Assert (ase-interval-contains-p ia 1))
126 (Assert (not (ase-interval-contains-p ib 1)))
127 (Assert (not (ase-interval-contains-p i567 0)))
128 (Assert (not (ase-interval-contains-p i567 1)))
129 (when (featurep 'bigq)
130 (Assert (ase-interval-contains-p i567 1/2)))
131 (Assert (ase-interval-contains-p i567 i5))
132 (Assert (ase-interval-contains-p i567 i56))
133 (Assert (not (ase-interval-contains-p i567 i8)))
134 (Assert (not (ase-interval-contains-p
135 i567 (ase-interval-union i5 it))))
136 (when (featurep 'bigq)
137 (Assert (ase-interval-contains-p
138 i567 (ase-interval-union (ase-interval 1/2) (ase-interval 3/2))))
139 (Assert (ase-interval-contains-p
141 (ase-interval-union (ase-interval 1/2) (ase-interval 3/2)))))
142 (Assert (not (ase-interval-contains-p i23 i56)))
143 (Assert (ase-interval-contains-p i23 i67))
144 (Assert (ase-interval-contains-p i123 i567))
145 (Assert (not (ase-interval-contains-p i23 i567)))
146 (Assert (not (ase-interval-contains-p aei aei)))
147 (Assert (not (ase-interval-contains-p aei 0)))
148 (Assert (not (ase-interval-contains-p aei -1)))
149 (Assert (not (ase-interval-contains-p aei 1)))
150 (Assert (not (ase-interval-contains-p aei +infinity)))
151 (Assert (not (ase-interval-contains-p aei i1)))
152 (Assert (not (ase-interval-contains-p aei i2)))
153 (Assert (not (ase-interval-contains-p aei i3)))
154 (Assert (not (ase-interval-contains-p aei i5)))
155 (Assert (not (ase-interval-contains-p aei i6)))
156 (Assert (not (ase-interval-contains-p aei i7)))
157 (Assert (not (ase-interval-contains-p aei i8)))
158 (Assert (not (ase-interval-contains-p aei i9)))
159 (when (featurep 'bigq)
160 (Assert (eq t (ase-interval-contains-where
161 i567 (ase-interval-union (ase-interval 1/2)
162 (ase-interval 3/2)))))
163 (Assert (eq t (ase-interval-contains-where
164 i123 (ase-interval-union (ase-interval 1/2)
165 (ase-interval 3/2))))))
166 (Assert (eq t (ase-interval-contains-where i123 i56)))
167 (Assert (eq t (ase-interval-contains-where i123 i567)))
168 (Assert (not (ase-interval-contains-where i23 i567)))
169 (Assert (not (ase-interval-contains-where i567 0)))
170 (Assert (not (ase-interval-contains-where i567 1)))
171 (when (featurep 'bigq)
172 (Assert (ase-interval-equal-p (ase-interval-contains-where i567 1/2) i5)))
173 (Assert (ase-interval-equal-p (ase-interval-contains-where i567 i5) i5))
174 (Assert (not (ase-interval-contains-p i6 ia)))
175 (Assert (not (ase-interval-contains-p ia i6)))
177 (Assert (ase-interval-connected-p i1 i2))
178 (Assert (not (ase-interval-connected-p i1 i3)))
179 (Assert (ase-interval-connected-p i1 i5))
180 (Assert (ase-interval-connected-p i1 i6))
181 (Assert (not (ase-interval-connected-p i5 i6)))
182 (Assert (ase-interval-connected-p ia i5))
183 (Assert (ase-interval-connected-p i8 i9))
184 (Assert (not (ase-interval-connected-p i1 i3)))
185 (Assert (ase-interval-connected-p i2 i1 i3))
186 (Assert (ase-interval-connected-p i2 i13 i1 i3))
187 (Assert (not (ase-interval-connected-p i13 i1)))
188 (Assert (not (ase-interval-connected-p i13)))
189 (Assert (not (ase-interval-connected-p i13 i13)))
190 (Assert (ase-interval-connected-p i13 i2))
191 (Assert (ase-interval-connected-p aei i13 i2 aei i2))
192 (Assert (ase-interval-connected-p ia i6))
193 (Assert (ase-interval-connected-p i6 ia))
195 (Assert (not (ase-interval-disjoint-p i1 i2)))
196 (Assert (ase-interval-disjoint-p i1 i3))
197 (Assert (not (ase-interval-disjoint-p i1 i5)))
198 (Assert (ase-interval-disjoint-p i1 i6))
199 (Assert (ase-interval-disjoint-p i5 i6))
200 (Assert (ase-interval-disjoint-p ia i5))
201 (Assert (not (ase-interval-disjoint-p i8 i9)))
202 (Assert (not (ase-interval-disjoint-p i13 i1)))
203 (Assert (not (ase-interval-disjoint-p i13 i3)))
204 (Assert (not (ase-interval-disjoint-p i1 i13)))
205 (Assert (not (ase-interval-disjoint-p i3 i13)))
206 (Assert (not (ase-interval-disjoint-p i1 i1 i3)))
207 (Assert (not (ase-interval-disjoint-p i3 i1 i3)))
208 (Assert (not (ase-interval-disjoint-p i13 i1)))
209 (Assert (not (ase-interval-disjoint-p i13 i13)))
210 (Assert (not (ase-interval-disjoint-p i13 (ase-interval-union i5 i7))))
211 (Assert (ase-interval-disjoint-p i13 (ase-interval -infinity -1)))
212 (Assert (ase-interval-disjoint-p i13 isp))
214 (let ((i02o (ase-interval 0 2 t t)))
215 (Assert (ase-interval-equal-p i02o (ase-interval-union i5 ia i6)))
216 (Assert (ase-interval-equal-p i02o (ase-interval-union i5 ia i6)))
217 (Assert (ase-interval-equal-p i02o (ase-interval-union ia i5 i6)))
218 (Assert (ase-interval-equal-p i02o (ase-interval-union ia i6 i5)))
219 (Assert (ase-interval-equal-p i02o (ase-interval-union i5 i6 ia)))
220 (Assert (ase-interval-equal-p i02o (ase-interval-union i6 ia i5)))
221 (Assert (ase-interval-equal-p i02o (ase-interval-union i6 i5 ia))))
223 (Assert (ase-interval-open-p aei))
224 (Assert (ase-interval-open-p aui))
225 (Assert (ase-interval-open-p (ase-interval -infinity 2 t t)))
226 (Assert (not (ase-interval-open-p (ase-interval -infinity 2))))
227 (Assert (not (ase-interval-open-p i1)))
228 (Assert (not (ase-interval-open-p i2)))
229 (Assert (not (ase-interval-open-p i3)))
230 (Assert (not (ase-interval-open-p (ase-interval 1 2 t))))
231 (Assert (not (ase-interval-open-p (ase-interval 1 2 nil t))))
232 (Assert (ase-interval-open-p (ase-interval 1 2 t t)))
233 (Assert (ase-interval-open-p i5))
234 (Assert (ase-interval-open-p i6))
235 (Assert (ase-interval-open-p i7))
236 (Assert (not (ase-interval-open-p i123)))
237 (Assert (ase-interval-open-p i567))
238 (Assert (not (ase-interval-open-p
239 (ase-interval-union i5 (ase-interval 2 4)))))
240 (Assert (not (ase-interval-open-p
241 (ase-interval-union i1 (ase-interval 2 4)))))
242 (Assert (ase-interval-open-p
243 (ase-interval-union i5 (ase-interval 2 4 t t))))
245 (Assert (ase-interval-closed-p aei))
246 (Assert (ase-interval-closed-p aui))
247 (Assert (ase-interval-closed-p (ase-interval -infinity 2)))
248 (Assert (not (ase-interval-closed-p (ase-interval -infinity 2 t t))))
249 (Assert (ase-interval-closed-p i1))
250 (Assert (ase-interval-closed-p i2))
251 (Assert (ase-interval-closed-p i3))
252 (Assert (not (ase-interval-closed-p (ase-interval 1 2 t))))
253 (Assert (not (ase-interval-closed-p (ase-interval 1 2 nil t))))
254 (Assert (not (ase-interval-closed-p (ase-interval 1 2 t t))))
255 (Assert (not (ase-interval-closed-p i5)))
256 (Assert (not (ase-interval-closed-p i6)))
257 (Assert (not (ase-interval-closed-p i7)))
258 (Assert (ase-interval-closed-p i123))
259 (Assert (not (ase-interval-closed-p i567)))
260 (Assert (not (ase-interval-closed-p
261 (ase-interval-union i5 (ase-interval 2 4)))))
262 (Assert (ase-interval-closed-p
263 (ase-interval-union i1 (ase-interval 2 4))))
264 (Assert (not (ase-interval-closed-p
265 (ase-interval-union i5 (ase-interval 2 4 t t)))))
268 (Assert (ase-interval-equal-p ia (ase-interval-union ia)))
269 (Assert (ase-interval-equal-p huge (ase-interval-union huge)))
270 (Assert (ase-interval-equal-p huge (ase-interval-union huge i1)))
271 (Assert (ase-interval-equal-p huge (ase-interval-union huge i2)))
272 (Assert (ase-interval-equal-p huge (ase-interval-union huge i3)))
273 (Assert (ase-interval-equal-p huge (ase-interval-union huge i5)))
274 (Assert (ase-interval-equal-p huge (ase-interval-union huge i6)))
275 (Assert (ase-interval-equal-p huge (ase-interval-union huge i7)))
276 (Assert (ase-interval-equal-p huge (ase-interval-union huge i123)))
277 (Assert (ase-interval-equal-p huge (ase-interval-union huge i567)))
278 (Assert (ase-interval-equal-p huge (ase-interval-union huge tiny)))
279 (Assert (ase-interval-equal-p (ase-interval 1 2 nil t)
280 (ase-interval-union i6 ia)))
281 (Assert (ase-interval-equal-p (ase-interval 1 2 nil t)
282 (ase-interval-union ia i6)))
283 (Assert (ase-interval-equal-p (ase-interval-union i5 i3)
284 (ase-interval-union aei i3 aei i5 i5 aei)))
285 (Assert (ase-interval-equal-p (ase-interval-union i3 i5)
286 (ase-interval-union aei i3 i5 aei i5 aei)))
287 (Assert (ase-interval-equal-p
288 huge (ase-interval-union
289 (ase-interval-union i1 i3 (ase-interval 1 6)) huge)))
291 (Assert (not (ase-interval-imprimitive-p (ase-interval-union ia))))
292 (Assert (not (ase-interval-imprimitive-p (ase-interval-union huge))))
293 (Assert (not (ase-interval-imprimitive-p (ase-interval-union huge i1))))
294 (Assert (not (ase-interval-imprimitive-p (ase-interval-union huge i2))))
295 (Assert (not (ase-interval-imprimitive-p (ase-interval-union huge i3))))
296 (Assert (not (ase-interval-imprimitive-p (ase-interval-union huge i5))))
297 (Assert (not (ase-interval-imprimitive-p (ase-interval-union huge i6))))
298 (Assert (not (ase-interval-imprimitive-p (ase-interval-union huge i7))))
299 (Assert (not (ase-interval-imprimitive-p (ase-interval-union huge i123))))
300 (Assert (not (ase-interval-imprimitive-p (ase-interval-union huge i567))))
301 (Assert (not (ase-interval-imprimitive-p (ase-interval-union huge tiny))))
302 (Assert (not (ase-interval-imprimitive-p (ase-interval-union i6 ia))))
303 (Assert (not (ase-interval-imprimitive-p (ase-interval-union ia i6))))
304 (Assert (ase-interval-imprimitive-p (ase-interval-union aei i3 i5 aei i5 aei)))
308 (Assert (= (ase-interval-lebesgue-measure i1) 1))
309 (Assert (= (ase-interval-lebesgue-measure i2) 1))
310 (Assert (= (ase-interval-lebesgue-measure i3) 1))
311 (Assert (= (ase-interval-lebesgue-measure i5) 1))
312 (Assert (= (ase-interval-lebesgue-measure i6) 1))
313 (Assert (= (ase-interval-lebesgue-measure i7) 1))
314 (Assert (= (ase-interval-lebesgue-measure i8) 2))
315 (Assert (= (ase-interval-lebesgue-measure i9) 2))
316 (Assert (= (ase-interval-lebesgue-measure ia) 0))
317 (Assert (= (ase-interval-lebesgue-measure ib) 0))
318 (Assert (= (ase-interval-lebesgue-measure ic) 0))
319 (Assert (= (ase-interval-lebesgue-measure aei) 0))
320 (Assert (= (ase-interval-lebesgue-measure aui) +infinity))
321 (Assert (= (ase-interval-lebesgue-measure i56) 2))
322 (Assert (= (ase-interval-lebesgue-measure i567) 3))
323 (Assert (= (ase-interval-lebesgue-measure i13) 2))
324 (Assert (= (ase-interval-lebesgue-measure huge) 10))
325 (Assert (= (ase-interval-lebesgue-measure tiny) 3))
327 (almost= (ase-interval-lebesgue-measure (ase-interval 0.1 1.2)) 1.1 1e-4))
329 (almost= (ase-interval-lebesgue-measure (ase-interval -0.1 0.2)) 0.3 1e-4))
331 (almost= (ase-interval-lebesgue-measure (ase-interval -1.2 -1.1)) 0.1 1e-4))
333 (Assert (= (ase-interval-rational-measure i1) 2))
334 (Assert (= (ase-interval-rational-measure i2) 2))
335 (Assert (= (ase-interval-rational-measure i3) 2))
336 (Assert (= (ase-interval-rational-measure i5) 0))
337 (Assert (= (ase-interval-rational-measure i6) 0))
338 (Assert (= (ase-interval-rational-measure i7) 0))
339 (Assert (= (ase-interval-rational-measure i8) 3))
340 (Assert (= (ase-interval-rational-measure i9) 3))
341 (Assert (= (ase-interval-rational-measure ia) 1))
342 (Assert (= (ase-interval-rational-measure ib) 0))
343 (Assert (= (ase-interval-rational-measure ic) 0))
344 (Assert (= (ase-interval-rational-measure aei) 0))
345 (Assert (= (ase-interval-rational-measure aui) +infinity))
346 (Assert (= (ase-interval-rational-measure i56) 0))
347 (Assert (= (ase-interval-rational-measure i567) 0))
348 (Assert (= (ase-interval-rational-measure i13) 4))
349 (Assert (= (ase-interval-rational-measure huge) 11))
350 (Assert (= (ase-interval-rational-measure tiny) 4))
351 (Assert (= (ase-interval-rational-measure (ase-interval 0.1 1.2)) 1))
352 (Assert (= (ase-interval-rational-measure (ase-interval -0.1 0.2)) 1))
353 (Assert (= (ase-interval-rational-measure (ase-interval -1.2 -1.1)) 0))
354 (Assert (= (ase-interval-rational-measure (ase-interval -1 1)) 3))
355 (Assert (= (ase-interval-rational-measure (ase-interval -1 1 t t)) 1))
359 (Assert (= (ase-interval-lower i1) 0))
360 (Assert (= (ase-interval-lower i5) 0))
361 (Assert (= (ase-interval-lower i2) 1))
362 (Assert (= (ase-interval-lower i6) 1))
363 (Assert (= (ase-interval-lower i3) 2))
364 (Assert (= (ase-interval-lower i7) 2))
365 (Assert (= (ase-interval-upper i1) 1))
366 (Assert (= (ase-interval-upper i5) 1))
367 (Assert (= (ase-interval-upper i2) 2))
368 (Assert (= (ase-interval-upper i6) 2))
369 (Assert (= (ase-interval-upper i3) 3))
370 (Assert (= (ase-interval-upper i7) 3))
371 (Assert (ase-interval-equal-p
372 (dllist-car (ase-interval-explode-union i567)) i5))
374 ;; testing intersections
375 (Assert (ase-interval-equal-p (ase-interval-intersection i123 i8) i8))
376 (Assert (ase-interval-equal-p (ase-interval-intersection i567 i8) i56))
377 (Assert (ase-interval-equal-p
378 (ase-interval-intersection
379 (ase-interval 1 3) (ase-interval 2 4)) i3))
381 (ase-interval-intersection
382 (ase-interval 1 3) (ase-interval -2 -4)) aei))
383 (Assert (ase-interval-equal-p
384 (ase-interval-intersection huge tiny)
385 (ase-interval-intersection tiny huge)))
386 (Assert (ase-interval-equal-p
387 (ase-interval-intersection tiny tiny tiny tiny) tiny))
389 (ase-interval-intersection tiny aei huge) aei))
390 (Assert (ase-interval-equal-p
391 (ase-interval-intersection huge aui) huge))
393 ;; testing differences
394 (Assert (ase-interval-equal-p
395 (ase-interval-difference i8 i9) ;; [0 1)
396 (ase-interval 0 1 nil t)))
397 (Assert (ase-interval-equal-p
398 (ase-interval-difference i9 i8) ;; (2 3]
399 (ase-interval 2 3 t)))
400 (Assert (ase-interval-empty-p
401 (ase-interval-difference tiny huge)))
402 (Assert (ase-interval-empty-p
403 (ase-interval-difference tiny tiny)))
404 (Assert (ase-interval-empty-p
405 (ase-interval-difference aei tiny)))
406 (Assert (ase-interval-equal-p
407 (ase-interval-difference huge tiny) ;; [0 2) + (5 10]
409 (ase-interval 0 2 nil t) (ase-interval 5 10 t))))
410 (Assert (ase-interval-equal-p
411 (ase-interval-difference huge tiny tiny) ;; [0 2) + (5 10]
413 (ase-interval 0 2 nil t) (ase-interval 5 10 t))))
414 (Assert (ase-interval-equal-p
415 (ase-interval-difference tiny aei) tiny))
416 (Assert (ase-interval-equal-p
417 (ase-interval-difference huge aei) huge))
418 (Assert (ase-interval-equal-p
419 (ase-interval-difference i567 aei) i567))
420 (Assert (ase-interval-equal-p
421 (ase-interval-difference tiny) tiny))
422 (Assert (ase-interval-equal-p
423 (ase-interval-difference i123 i3)
424 (ase-interval 0 2 nil t)))
427 (Assert (ase-interval-equal-p
428 (ase-interval-boundary i1)
429 (ase-interval-union (ase-interval 0) (ase-interval 1))))
430 (Assert (ase-interval-empty-p
431 (ase-interval-boundary ia)))
432 (Assert (ase-interval-equal-p
433 (ase-interval-boundary i567)
435 (ase-interval 0) (ase-interval 1)
436 (ase-interval 2) (ase-interval 3))))
437 (Assert (ase-interval-empty-p
438 (ase-interval-boundary
439 (ase-interval-boundary i1))))
440 (Assert (ase-interval-empty-p
441 (ase-interval-boundary
442 (ase-interval-boundary i567))))
443 (Assert (ase-interval-equal-p
444 ;; i123 \ b(i567) => i567
445 (ase-interval-difference
446 i123 (ase-interval-boundary i567)) i567))
447 (Assert (ase-interval-empty-p
448 ;; i567 n b(i567) => ( )
449 (ase-interval-intersection
450 i567 (ase-interval-boundary i567))))
452 (Assert (ase-interval-equal-p (ase-interval-interior i1) i5))
453 (Assert (ase-interval-equal-p (ase-interval-interior i5) i5))
454 (Assert (ase-interval-empty-p (ase-interval-interior ia)))
455 (Assert (ase-interval-equal-p
456 (ase-interval-interior (ase-interval-union ia i7)) i7))
457 (Assert (ase-interval-equal-p
458 (ase-interval-interior i123) (ase-interval 0 3 t t)))
460 (Assert (ase-interval-equal-p (ase-interval-closure i1) i1))
461 (Assert (ase-interval-equal-p (ase-interval-closure i5) i1))
462 (Assert (ase-interval-equal-p (ase-interval-closure ia) ia))
463 (Assert (ase-interval-equal-p
464 (ase-interval-closure (ase-interval-union ia i7))
465 (ase-interval-union ia i3)))
466 (Assert (ase-interval-equal-p
467 (ase-interval-closure i567) i123))
470 ;; testing interior products of intervals
471 (when (featurep 'ase-cartesian)
472 ;; some interior products
473 (setq c11 (ase-cartesian* i1 i1))
474 (setq c12 (ase-cartesian* i1 i2))
475 (setq c21 (ase-cartesian* i2 i1))
476 (setq c22 (ase-cartesian* i2 i2))
477 (setq c33 (ase-cartesian* i3 i3))
478 (setq c555 (ase-cartesian* i5 i5 i5))
479 (setq c777 (ase-cartesian* i7 i7 i7))
480 (setq c788 (ase-cartesian* i7 i8 i8))
481 (setq c55 (ase-cartesian* i5 i5))
482 (setq c66 (ase-cartesian* i6 i6))
483 (setq c15 (ase-cartesian* i1 i5))
484 (setq c16 (ase-cartesian* i1 i6))
485 (setq c51 (ase-cartesian* i5 i1))
486 (setq c0303 (ase-cartesian* i123 i123))
487 (setq c030303 (ase-cartesian* i123 i123 i123))
488 (setq caa (ase-cartesian* ia ia))
489 (setq cHO (ase-cartesian* (ase-interval 0 2 t)
490 (ase-interval -1 1 nil t)))
491 ;; degenerated interior interval product
492 (setq cdeg (ase-cartesian* ia i1))
493 ;; only corner connected
494 (setq ccc1 (ase-cartesian* (ase-interval 0 1 nil t)
495 (ase-interval 0 1 t))
496 ccc2 (ase-cartesian* (ase-interval 1 2 nil t)
497 (ase-interval -1 0)))
499 (setq p00 (ase-cartesian* 0 0))
500 (setq p11 (ase-cartesian* 1 1))
501 (setq phalfhalf (ase-cartesian* 0.5 0.5))
503 (setq t1 (ase-interval-union c11 c22)) ;; doesnt merge
504 (setq t2 (ase-interval-union c11 c12)) ;; does merge (2nd dimension)
505 (setq t3 (ase-interval-union c21 c11)) ;; does merge (1st dimension)
506 (setq t4 (ase-interval-union c11 c22 c21 c12)) ;; does merge (all dimensions)
507 (setq t5 (ase-interval-union c21 c12))
508 (setq t133 (ase-interval-union t1 c33))
509 (setq t5566 (ase-interval-union c55 c66))
510 (setq t15 (ase-interval-union t1 t5))
511 (setq t555777 (ase-interval-union c555 c777))
512 (setq t555788 (ase-interval-union c555 c788))
513 (setq ttt12 (ase-interval-union ccc1 ccc2))
514 (setq chuge (ase-cartesian* huge huge))
515 (setq ctiny (ase-cartesian* tiny tiny))
516 (setq cst1 (ase-cartesian* i3 i2))
517 (setq cst2 (ase-cartesian* i123 i123))
518 (setq cst3 (ase-cartesian* i1 i2))
519 (setq cst4 (ase-cartesian* i8 i8))
520 (setq cst5 (ase-cartesian* (ase-interval 2 4 t t) i2))
521 (setq cst6 (ase-cartesian* (ase-interval 2 4 t t)
522 (ase-interval -1 1 t t)))
524 (Assert (ase-interval-imprimitive-p c11))
525 (Assert (ase-interval-imprimitive-p c555))
526 (Assert (eq (ase-cartesian-ground-domain c11) 'ase:interval))
527 (Assert (eq (ase-cartesian-ground-domain c555) 'ase:interval))
528 (Assert (ase-interval-closed-p c11))
529 (Assert (not (ase-interval-open-p c11)))
530 (Assert (ase-interval-open-p c555))
531 (Assert (not (ase-interval-closed-p c555)))
532 (Assert (not (ase-interval-open-p c15)))
533 (Assert (not (ase-interval-closed-p c15)))
534 (Assert (not (ase-interval-open-p c51)))
535 (Assert (not (ase-interval-closed-p c15)))
536 (Assert (ase-interval-empty-p (ase-cartesian* i1 aei)))
537 (Assert (ase-interval-empty-p (ase-cartesian* aei i1)))
538 (Assert (ase-interval-empty-p (ase-cartesian* i1 aei i1)))
539 (Assert (ase-interval-empty-p (ase-cartesian* i1 i1 i1 aei)))
541 (Assert (ase-interval-contains-p c11 c55))
542 (Assert (ase-interval-contains-p c0303 c11))
543 (Assert (ase-interval-contains-p c0303 c55))
544 (Assert (ase-interval-contains-p cHO c55))
545 (Assert (not (ase-interval-contains-p cHO c11)))
546 (Assert (not (ase-interval-contains-p c55 c11)))
547 (Assert (ase-interval-contains-p c030303 c555))
548 (Assert (not (ase-interval-contains-p c555 c030303)))
549 (Check-Error embed-error (ase-interval-contains-p c11 c555))
550 (Check-Error embed-error (ase-interval-contains-p c555 c55))
551 (Check-Error embed-error (ase-interval-contains-p huge c11))
552 (Check-Error embed-error (ase-interval-contains-p c11 i1))
553 (Check-Error embed-error (ase-interval-contains-p c11 0))
554 (Assert (ase-interval-contains-p c11 p00))
555 (Assert (ase-interval-contains-p c11 p11))
556 (Assert (ase-interval-contains-p c11 phalfhalf))
557 (Assert (ase-interval-contains-p c55 phalfhalf))
558 (Assert (not (ase-interval-contains-p c55 p00)))
559 (Assert (not (ase-interval-contains-p c55 p11)))
561 (Assert (not (ase-interval-disjoint-p c55 c11)))
562 (Assert (not (ase-interval-disjoint-p c11 c55)))
563 (Assert (not (ase-interval-disjoint-p c11 c12)))
564 (Assert (not (ase-interval-disjoint-p c12 c11)))
565 (Assert (ase-interval-disjoint-p c15 c16))
566 (Assert (ase-interval-disjoint-p c16 c15))
567 (Assert (not (ase-interval-disjoint-p cHO c11)))
568 (Assert (ase-interval-disjoint-p cHO c12))
569 (Assert (ase-interval-disjoint-p c12 cHO))
570 (Assert (not (ase-interval-disjoint-p c21 cHO)))
571 (Assert (ase-interval-disjoint-p ccc1 ccc2))
572 (Assert (ase-interval-disjoint-p c55 caa c66))
574 (Assert (ase-interval-equal-p c11 c11))
575 (Assert (ase-interval-equal-p c15 c15))
576 (Assert (not (ase-interval-equal-p c15 c51)))
577 (Assert (not (ase-interval-equal-p c51 c15)))
579 (Assert (ase-interval-connected-p cdeg))
580 (Assert (ase-interval-connected-p c11))
581 (Check-Error embed-error (ase-interval-connected-p i1 c11))
582 (Assert (ase-interval-connected-p c11 c11))
583 (Assert (ase-interval-connected-p c11 caa))
584 (Assert (ase-interval-connected-p caa c11))
585 (Assert (ase-interval-connected-p c11 cdeg))
586 (Assert (ase-interval-connected-p cdeg c11))
587 (Assert (ase-interval-connected-p c12 c15))
588 (Assert (ase-interval-connected-p c15 c12))
589 (Assert (ase-interval-connected-p c51 c15))
590 (Assert (ase-interval-connected-p c15 c51))
591 (Assert (ase-interval-connected-p c51 c11))
592 (Assert (ase-interval-connected-p c11 c51))
593 (Assert (ase-interval-connected-p c51 c16))
594 (Assert (ase-interval-connected-p c16 c51))
595 (Assert (ase-interval-connected-p c11 c22))
596 (Assert (ase-interval-connected-p c15 caa))
597 (Assert (ase-interval-connected-p c15 cdeg))
598 (Assert (ase-interval-connected-p caa cdeg))
599 (Assert (ase-interval-connected-p c55 caa))
600 (Assert (ase-interval-connected-p c55 cdeg))
601 (Assert (not (ase-interval-connected-p c55 c66)))
602 (Assert (ase-interval-connected-p caa c66))
603 (Assert (ase-interval-connected-p c55 caa c66))
604 (Assert (ase-interval-connected-p c030303 c555))
605 (Assert (ase-interval-connected-p c0303 c55))
606 (Assert (ase-interval-connected-p c0303 c11))
607 (Assert (ase-interval-connected-p cHO))
608 (Assert (ase-interval-connected-p cHO c11))
609 (Assert (ase-interval-connected-p cHO c12))
610 (Assert (ase-interval-connected-p c12 cHO))
611 (Assert (ase-interval-connected-p c21 cHO))
612 (Assert (ase-interval-connected-p ccc1 ccc2))
614 ;; testing unions of cartesian products
615 (Assert (ase-interval-equal-p
616 (ase-interval-union c11 aei) c11))
617 (Assert (ase-interval-equal-p
618 (ase-interval-union aei c11) c11))
619 (Assert (ase-interval-equal-p
620 (ase-interval-union c555 aei) c555))
621 (Assert (ase-interval-equal-p
622 (ase-interval-union aei c555) c555))
623 (Assert (ase-interval-equal-p
624 t133 (ase-interval-union c11 c22 c33)))
625 (Assert (ase-interval-equal-p
626 t133 (ase-interval-union c22 c33 c11)))
627 (Assert (ase-interval-equal-p
628 (ase-interval-union t1 c21)
629 (ase-interval-union c21 c22 aei c11)))
630 (Assert (ase-interval-equal-p t15 t4))
631 (Assert (ase-interval-contains-p t133 p00))
632 (Assert (ase-interval-contains-p t133 p11))
633 (Assert (ase-interval-contains-p t133 phalfhalf))
634 (Assert (ase-interval-contains-p t133 c55))
635 (Assert (ase-interval-contains-p t133 c66))
636 (Assert (not (ase-interval-contains-p t5566 p00)))
637 (Assert (not (ase-interval-contains-p t5566 p11)))
638 (Assert (ase-interval-contains-p t5566 phalfhalf))
639 (Assert (ase-interval-connected-p t133))
640 (Assert (not (ase-interval-connected-p t5566)))
641 (Assert (ase-interval-connected-p t4 c33))
642 (Assert (ase-interval-connected-p c33 t4))
643 (Assert (not (ase-interval-disjoint-p t15 t4)))
644 (Assert (not (ase-interval-disjoint-p t15 t4)))
645 (Assert (not (ase-interval-disjoint-p t4 c11)))
646 (Assert (not (ase-interval-disjoint-p c11 t4)))
647 (Assert (not (ase-interval-disjoint-p c66 t15)))
648 (Assert (not (ase-interval-disjoint-p t15 c66)))
649 (Assert (not (ase-interval-disjoint-p t133 c55)))
650 (Assert (not (ase-interval-disjoint-p c55 t133)))
651 (Assert (not (ase-interval-disjoint-p t4 c11 c22 c55 c66)))
652 (Assert (not (ase-interval-disjoint-p c11 t4 c22 c55 c66)))
653 (Assert (not (ase-interval-disjoint-p c11 c22 t4)))
656 (Assert (ase-interval-equal-p
657 (ase-interval-boundary c11)
658 ;; #<ase:interval-union [0] x [0 1] u [1] x [0 1] u
659 ;; [0 1] x [0] u [0 1] x [1]>
661 (ase-cartesian* id i1)
662 (ase-cartesian* ia i1)
663 (ase-cartesian* i1 id)
664 (ase-cartesian* i1 ia))))
665 (Assert (ase-interval-equal-p
666 (ase-interval-boundary cdeg)
667 ;; #<ase:interval-union [1] x [0] u [1] x [1]>
669 (ase-cartesian* ia id)
670 (ase-cartesian* ia ia))))
671 (Assert (ase-interval-empty-p
672 (ase-interval-boundary caa)))
673 (Assert (ase-interval-equal-p
674 (ase-interval-boundary t1)
675 ;; #<ase:interval-union
676 ;; [0] x [0 1] u [1] x [0 1] u [0 1] x [0] u [0 1] x [1] u
677 ;; [1] x [1 2] u [2] x [1 2] u [1 2] x [1] u [1 2] x [2]>
679 (ase-cartesian* id i1)
680 (ase-cartesian* ia i1)
681 (ase-cartesian* i1 id)
682 (ase-cartesian* i1 ia)
683 (ase-cartesian* ia i2)
684 (ase-cartesian* ie i2)
685 (ase-cartesian* i2 ia)
686 (ase-cartesian* i2 ie))))
687 (Assert (ase-interval-equal-p
688 (ase-interval-boundary cHO)
689 ;; #<ase:interval-union [0] x [-1 1) u [2] x [-1 1) u
690 ;; (0 2] x [-1] u (0 2] x [1]>
692 (ase-cartesian* id (ase-interval -1 1 nil t))
693 (ase-cartesian* ie (ase-interval -1 1 nil t))
694 (ase-cartesian* (ase-interval 0 2 t) (ase-interval -1 -1))
695 (ase-cartesian* (ase-interval 0 2 t) (ase-interval 1 1)))))
696 (Assert (ase-interval-equal-p
697 (ase-interval-boundary (ase-interval-boundary c11))
698 ;; #<ase:interval-union [0] x [0] u [0] x [1] u
699 ;; [1] x [0] u [1] x [1]>
701 (ase-cartesian* id id)
702 (ase-cartesian* id ia)
703 (ase-cartesian* ia id)
704 (ase-cartesian* ia ia))))
705 (Assert (ase-interval-empty-p
706 (ase-interval-boundary
707 (ase-interval-union (ase-interval 0) ia))))
710 (Assert (ase-interval-equal-p
711 (ase-interval-closure c55) c11))
712 (Assert (ase-interval-equal-p
713 (ase-interval-closure c11) c11))
714 (Assert (ase-interval-equal-p
715 (ase-interval-closure t5566) t1))
718 (Assert (ase-interval-equal-p
719 (ase-interval-interior c55) c55))
720 (Assert (ase-interval-equal-p
721 (ase-interval-interior c11) c55))
722 (Assert (ase-interval-equal-p
723 (ase-interval-interior t1) t5566))
727 (Assert (= (ase-interval-lebesgue-measure c11) 1))
728 (Assert (= (ase-interval-lebesgue-measure c12) 1))
729 (Assert (= (ase-interval-lebesgue-measure c555) 1))
730 (Assert (= (ase-interval-lebesgue-measure c11) 1))
731 (Assert (= (ase-interval-lebesgue-measure c0303) 9))
732 (Assert (= (ase-interval-lebesgue-measure c030303) 27))
733 (Assert (= (ase-interval-lebesgue-measure cHO) 4))
734 (Assert (= (ase-interval-lebesgue-measure cdeg) 0))
735 (Assert (= (ase-interval-lebesgue-measure caa) 0))
736 (Assert (= (ase-interval-lebesgue-measure t1) 2))
737 (Assert (= (ase-interval-lebesgue-measure t133) 3))
738 (Assert (= (ase-interval-lebesgue-measure t5) 2))
739 (Assert (= (ase-interval-lebesgue-measure t5566) 2))
740 (Assert (= (ase-interval-lebesgue-measure t555777) 2))
741 (Assert (= (ase-interval-lebesgue-measure t555788) 5))
742 (Assert (= (ase-interval-lebesgue-measure ttt12) 2))
743 (Assert (= (ase-interval-rational-measure c11) 4))
744 (Assert (= (ase-interval-rational-measure c12) 4))
745 (Assert (= (ase-interval-rational-measure c555) 0))
746 (Assert (= (ase-interval-rational-measure c0303) 16))
747 (Assert (= (ase-interval-rational-measure c030303) 64))
748 (Assert (= (ase-interval-rational-measure cHO) 4))
749 (Assert (= (ase-interval-rational-measure cdeg) 2))
750 (Assert (= (ase-interval-rational-measure caa) 1))
751 (Assert (= (ase-interval-rational-measure t1) 8))
752 (Assert (= (ase-interval-rational-measure t133) 12))
753 (Assert (= (ase-interval-rational-measure t5) 8))
754 (Assert (= (ase-interval-rational-measure t5566) 0))
755 (Assert (= (ase-interval-rational-measure t555777) 0))
756 (Assert (= (ase-interval-rational-measure t555788) 0))
757 (Assert (= (ase-interval-rational-measure ttt12) 3))
761 (Assert (ase-interval-equal-p
762 (ase-interval-intersection
764 (ase-interval 0.5 0.75) (ase-interval -1 2)))
766 (ase-interval 0.5 0.75) i1)))
767 (Assert (ase-interval-equal-p
768 (ase-interval-intersection t1 c11) c11))
769 (Assert (ase-interval-equal-p
770 (ase-interval-intersection t1 t2)
771 ;; #<ase:interval-union [0 1] x [0 1] u [1] x [1 2]>
773 c11 (ase-cartesian* ia i2))))
774 (Assert (ase-interval-equal-p
775 (ase-interval-intersection t1 t5)
776 ;; [0 2] x [1] u [1] x [0 2]
778 (ase-cartesian* (ase-interval 0 2) (ase-interval 1))
779 (ase-cartesian* (ase-interval 1) (ase-interval 0 2)))))
782 (Assert (ase-interval-equal-p
783 (ase-interval-difference chuge cst1)
784 ;;#<ase:interval-union [0 2) x [1 2] u (3 10] x [1 2] u
785 ;; [0 10] x [0 1) u [0 10] x (2 10]>
787 (ase-cartesian* (ase-interval 0 2 nil t) i2)
788 (ase-cartesian* (ase-interval 3 10 t) i2)
789 (ase-cartesian* huge (ase-interval 0 1 nil t))
790 (ase-cartesian* huge (ase-interval 2 10 t)))))
791 (Assert (ase-interval-equal-p
792 (ase-interval-difference cst2 cst1)
793 ;;#<ase:interval-union [0 2) x [1 2] u [0 3] x [0 1) u
796 (ase-cartesian* (ase-interval 0 2 nil t) i2)
797 (ase-cartesian* i123 (ase-interval 0 1 nil t))
798 (ase-cartesian* i123 (ase-interval 2 3 t)))))
799 (Assert (ase-interval-equal-p
800 (ase-interval-difference cst2 cst3)
801 ;;#<ase:interval-union (1 3] x [1 2] u [0 3] x [0 1) u
804 (ase-cartesian* (ase-interval 1 3 t) i2)
805 (ase-cartesian* i123 (ase-interval 0 1 nil t))
806 (ase-cartesian* i123 (ase-interval 2 3 t)))))
807 (Assert (ase-interval-equal-p
808 (ase-interval-difference cst4 cst1)
809 ;; #<ase:interval-union [0 2) x [1 2] u [0 2] x [0 1)>
811 (ase-cartesian* (ase-interval 0 2 nil t) i2)
812 (ase-cartesian* i8 (ase-interval 0 1 nil t)))))
813 (Assert (ase-interval-equal-p
814 (ase-interval-difference cst2 cst5)
815 ;;#<ase:interval-union [0 2] x [1 2] u [0 3] x [0 1) u
818 (ase-cartesian* i8 i2)
819 (ase-cartesian* i123 (ase-interval 0 1 nil t))
820 (ase-cartesian* i123 (ase-interval 2 3 t)))))
821 (Assert (ase-interval-equal-p
822 (ase-interval-difference cst2 cst6)
823 ;;#<ase:interval-union [0 2] x (-1 1) u [0 3] x [1 3]>
825 (ase-cartesian* i8 (ase-interval -1 1 t t))
826 (ase-cartesian* i123 (ase-interval 1 3)))))
832 ;; ase-interval-tests.el ends here