Commit | Line | Data |
---|---|---|
66e9b24d KR |
1 | ;;;; ramap.test --- test array mapping functions -*- scheme -*- |
2 | ;;;; | |
0d7f3a6d | 3 | ;;;; Copyright (C) 2004, 2005, 2006, 2009, 2013 Free Software Foundation, Inc. |
66e9b24d KR |
4 | ;;;; |
5 | ;;;; This library is free software; you can redistribute it and/or | |
6 | ;;;; modify it under the terms of the GNU Lesser General Public | |
7 | ;;;; License as published by the Free Software Foundation; either | |
53befeb7 | 8 | ;;;; version 3 of the License, or (at your option) any later version. |
66e9b24d KR |
9 | ;;;; |
10 | ;;;; This library is distributed in the hope that it will be useful, | |
11 | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | ;;;; Lesser General Public License for more details. | |
14 | ;;;; | |
15 | ;;;; You should have received a copy of the GNU Lesser General Public | |
16 | ;;;; License along with this library; if not, write to the Free Software | |
92205699 | 17 | ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
66e9b24d KR |
18 | |
19 | (define-module (test-suite test-ramap) | |
20 | #:use-module (test-suite lib)) | |
21 | ||
8269f0be DL |
22 | (define exception:shape-mismatch |
23 | (cons 'misc-error ".*shape mismatch.*")) | |
24 | ||
848431b6 DL |
25 | (define (array-row a i) |
26 | (make-shared-array a (lambda (j) (list i j)) | |
27 | (cadr (array-dimensions a)))) | |
28 | ||
29 | (define (array-col a j) | |
30 | (make-shared-array a (lambda (i) (list i j)) | |
31 | (car (array-dimensions a)))) | |
32 | ||
ab2a10e0 KR |
33 | ;;; |
34 | ;;; array-index-map! | |
35 | ;;; | |
36 | ||
37 | (with-test-prefix "array-index-map!" | |
38 | ||
b0d9b074 DL |
39 | (pass-if "basic test" |
40 | (let ((nlst '())) | |
41 | (array-index-map! (make-array #f '(1 1)) | |
42 | (lambda (n) | |
43 | (set! nlst (cons n nlst)))) | |
44 | (equal? nlst '(1)))) | |
45 | ||
46 | (with-test-prefix "empty arrays" | |
47 | ||
48 | (pass-if "all axes empty" | |
49 | (array-index-map! (make-typed-array 'f64 0 0 0) (const 0)) | |
50 | (array-index-map! (make-typed-array 'b #t 0 0) (const #t)) | |
8269f0be DL |
51 | (array-index-map! (make-typed-array #t 0 0 0) (const 0)) |
52 | #t) | |
b0d9b074 DL |
53 | |
54 | (pass-if "last axis empty" | |
55 | (array-index-map! (make-typed-array 'f64 0 2 0) (const 0)) | |
56 | (array-index-map! (make-typed-array 'b #t 2 0) (const #t)) | |
8269f0be DL |
57 | (array-index-map! (make-typed-array #t 0 2 0) (const 0)) |
58 | #t) | |
b0d9b074 | 59 | |
8269f0be | 60 | ; the 'f64 cases fail in 2.0.9 with out-of-range. |
b0d9b074 DL |
61 | (pass-if "axis empty, other than last" |
62 | (array-index-map! (make-typed-array 'f64 0 0 2) (const 0)) | |
63 | (array-index-map! (make-typed-array 'b #t 0 2) (const #t)) | |
8269f0be | 64 | (array-index-map! (make-typed-array #t 0 0 2) (const 0)) |
b98e2f47 DL |
65 | #t)) |
66 | ||
67 | (pass-if "rank 2" | |
68 | (let ((a (make-array 0 2 2)) | |
69 | (b (make-array 0 2 2))) | |
70 | (array-index-map! a (lambda (i j) i)) | |
71 | (array-index-map! b (lambda (i j) j)) | |
72 | (and (array-equal? a #2((0 0) (1 1))) | |
73 | (array-equal? b #2((0 1) (0 1))))))) | |
7e7e3b7f DL |
74 | |
75 | ;;; | |
76 | ;;; array-copy! | |
77 | ;;; | |
78 | ||
79 | (with-test-prefix "array-copy!" | |
80 | ||
8269f0be DL |
81 | (with-test-prefix "empty arrays" |
82 | ||
83 | (pass-if "empty other than last, #t" | |
84 | (let* ((b (make-array 0 2 2)) | |
85 | (c (make-shared-array b (lambda (i j) (list i j)) 0 2))) | |
86 | (array-copy! #2:0:2() c) | |
87 | (array-equal? #2:0:2() c))) | |
88 | ||
89 | (pass-if "empty other than last, 'f64" | |
90 | (let* ((b (make-typed-array 'f64 0 2 2)) | |
91 | (c (make-shared-array b (lambda (i j) (list i j)) 0 2))) | |
92 | (array-copy! #2:0:2() c) | |
93 | (array-equal? #2f64:0:2() c))) | |
94 | ||
dd60e934 DL |
95 | ;; FIXME add empty, type 'b cases. |
96 | ||
97 | ) | |
98 | ||
99 | ;; note that it is the opposite of array-map!. This is, unfortunately, | |
100 | ;; documented in the manual. | |
101 | ||
102 | (pass-if "matching behavior I" | |
103 | (let ((a #(1 2)) | |
104 | (b (make-array 0 3))) | |
105 | (array-copy! a b) | |
106 | (equal? b #(1 2 0)))) | |
107 | ||
108 | (pass-if-exception "matching behavior II" exception:shape-mismatch | |
109 | (let ((a #(1 2 3)) | |
110 | (b (make-array 0 2))) | |
111 | (array-copy! a b) | |
112 | (equal? b #(1 2)))) | |
113 | ||
f26eae9a DL |
114 | ;; here both a & b are are unrollable down to the first axis, but the |
115 | ;; size mismatch limits unrolling to the last axis only. | |
116 | ||
117 | (pass-if "matching behavior III" | |
118 | (let ((a #3(((1 2) (3 4)) ((5 6) (7 8)))) | |
119 | (b (make-array 0 2 3 2))) | |
120 | (array-copy! a b) | |
121 | (array-equal? b #3(((1 2) (3 4) (0 0)) ((5 6) (7 8) (0 0)))))) | |
122 | ||
123 | (pass-if "rank 0" | |
124 | (let ((a #0(99)) | |
125 | (b (make-array 0))) | |
126 | (array-copy! a b) | |
127 | (equal? b #0(99)))) | |
128 | ||
129 | (pass-if "rank 1" | |
130 | (let* ((a #2((1 2) (3 4))) | |
131 | (b (make-shared-array a (lambda (j) (list 1 j)) 2)) | |
132 | (c (make-shared-array a (lambda (i) (list (- 1 i) 1)) 2)) | |
133 | (d (make-array 0 2)) | |
134 | (e (make-array 0 2))) | |
135 | (array-copy! b d) | |
136 | (array-copy! c e) | |
137 | (and (equal? d #(3 4)) | |
138 | (equal? e #(4 2))))) | |
139 | ||
dd60e934 DL |
140 | (pass-if "rank 2" |
141 | (let ((a #2((1 2) (3 4))) | |
142 | (b (make-array 0 2 2)) | |
143 | (c (make-array 0 2 2)) | |
144 | (d (make-array 0 2 2)) | |
145 | (e (make-array 0 2 2))) | |
146 | (array-copy! a b) | |
147 | (array-copy! a (transpose-array c 1 0)) | |
148 | (array-copy! (transpose-array a 1 0) d) | |
149 | (array-copy! (transpose-array a 1 0) (transpose-array e 1 0)) | |
150 | (and (equal? a #2((1 2) (3 4))) | |
151 | (equal? b #2((1 2) (3 4))) | |
152 | (equal? c #2((1 3) (2 4))) | |
153 | (equal? d #2((1 3) (2 4))) | |
154 | (equal? e #2((1 2) (3 4)))))) | |
155 | ||
f26eae9a DL |
156 | (pass-if "rank 2, discontinuous" |
157 | (let ((A #2((0 1) (2 3) (4 5))) | |
158 | (B #2((10 11) (12 13) (14 15))) | |
159 | (C #2((20) (21) (22))) | |
160 | (X (make-array 0 3 5)) | |
161 | (piece (lambda (X w s) | |
162 | (make-shared-array | |
163 | X (lambda (i j) (list i (+ j s))) 3 w)))) | |
164 | (array-copy! A (piece X 2 0)) | |
165 | (array-copy! B (piece X 2 2)) | |
166 | (array-copy! C (piece X 1 4)) | |
167 | (and (array-equal? X #2((0 1 10 11 20) (2 3 12 13 21) (4 5 14 15 22)))))) | |
168 | ||
169 | (pass-if "null increments, not empty" | |
170 | (let ((a (make-array 0 2 2))) | |
171 | (array-copy! (make-shared-array #0(1) (lambda x '()) 2 2) a) | |
172 | (array-equal? #2((1 1) (1 1)))))) | |
ab2a10e0 | 173 | |
66e9b24d KR |
174 | ;;; |
175 | ;;; array-map! | |
176 | ;;; | |
177 | ||
178 | (with-test-prefix "array-map!" | |
179 | ||
180 | (pass-if-exception "no args" exception:wrong-num-args | |
181 | (array-map!)) | |
182 | ||
917abf70 | 183 | (pass-if-exception "one arg" exception:wrong-num-args |
66e9b24d KR |
184 | (array-map! (make-array #f 5))) |
185 | ||
917abf70 | 186 | (with-test-prefix "no sources" |
66e9b24d | 187 | |
917abf70 KR |
188 | (pass-if "closure 0" |
189 | (array-map! (make-array #f 5) (lambda () #f)) | |
190 | #t) | |
66e9b24d | 191 | |
917abf70 KR |
192 | (pass-if-exception "closure 1" exception:wrong-num-args |
193 | (array-map! (make-array #f 5) (lambda (x) #f))) | |
194 | ||
195 | (pass-if-exception "closure 2" exception:wrong-num-args | |
196 | (array-map! (make-array #f 5) (lambda (x y) #f))) | |
197 | ||
198 | (pass-if-exception "subr_1" exception:wrong-num-args | |
199 | (array-map! (make-array #f 5) length)) | |
200 | ||
201 | (pass-if-exception "subr_2" exception:wrong-num-args | |
202 | (array-map! (make-array #f 5) logtest)) | |
203 | ||
204 | (pass-if-exception "subr_2o" exception:wrong-num-args | |
205 | (array-map! (make-array #f 5) number->string)) | |
206 | ||
207 | (pass-if-exception "dsubr" exception:wrong-num-args | |
ad79736c | 208 | (array-map! (make-array #f 5) sqrt)) |
917abf70 KR |
209 | |
210 | (pass-if "rpsubr" | |
211 | (let ((a (make-array 'foo 5))) | |
212 | (array-map! a =) | |
213 | (equal? a (make-array #t 5)))) | |
214 | ||
215 | (pass-if "asubr" | |
216 | (let ((a (make-array 'foo 5))) | |
217 | (array-map! a +) | |
218 | (equal? a (make-array 0 5)))) | |
219 | ||
220 | ;; in Guile 1.6.4 and earlier this resulted in a segv | |
221 | (pass-if "noop" | |
222 | (array-map! (make-array #f 5) noop) | |
223 | #t)) | |
224 | ||
225 | (with-test-prefix "one source" | |
226 | ||
227 | (pass-if-exception "closure 0" exception:wrong-num-args | |
228 | (array-map! (make-array #f 5) (lambda () #f) | |
7e7e3b7f | 229 | (make-array #f 5))) |
917abf70 KR |
230 | |
231 | (pass-if "closure 1" | |
232 | (let ((a (make-array #f 5))) | |
233 | (array-map! a (lambda (x) 'foo) (make-array #f 5)) | |
234 | (equal? a (make-array 'foo 5)))) | |
235 | ||
236 | (pass-if-exception "closure 2" exception:wrong-num-args | |
237 | (array-map! (make-array #f 5) (lambda (x y) #f) | |
dd60e934 | 238 | (make-array #f 5))) |
917abf70 KR |
239 | |
240 | (pass-if "subr_1" | |
241 | (let ((a (make-array #f 5))) | |
7e7e3b7f DL |
242 | (array-map! a length (make-array '(x y z) 5)) |
243 | (equal? a (make-array 3 5)))) | |
917abf70 KR |
244 | |
245 | (pass-if-exception "subr_2" exception:wrong-num-args | |
246 | (array-map! (make-array #f 5) logtest | |
7e7e3b7f | 247 | (make-array 999 5))) |
917abf70 KR |
248 | |
249 | (pass-if "subr_2o" | |
250 | (let ((a (make-array #f 5))) | |
251 | (array-map! a number->string (make-array 99 5)) | |
252 | (equal? a (make-array "99" 5)))) | |
253 | ||
254 | (pass-if "dsubr" | |
255 | (let ((a (make-array #f 5))) | |
ad79736c | 256 | (array-map! a sqrt (make-array 16.0 5)) |
917abf70 KR |
257 | (equal? a (make-array 4.0 5)))) |
258 | ||
259 | (pass-if "rpsubr" | |
260 | (let ((a (make-array 'foo 5))) | |
261 | (array-map! a = (make-array 0 5)) | |
262 | (equal? a (make-array #t 5)))) | |
263 | ||
264 | (pass-if "asubr" | |
265 | (let ((a (make-array 'foo 5))) | |
266 | (array-map! a - (make-array 99 5)) | |
267 | (equal? a (make-array -99 5)))) | |
268 | ||
269 | ;; in Guile 1.6.5 and 1.6.6 this was an error | |
270 | (pass-if "1+" | |
271 | (let ((a (make-array #f 5))) | |
272 | (array-map! a 1+ (make-array 123 5)) | |
f26eae9a DL |
273 | (equal? a (make-array 124 5)))) |
274 | ||
275 | (pass-if "rank 0" | |
276 | (let ((a #0(99)) | |
277 | (b (make-array 0))) | |
278 | (array-map! b values a) | |
279 | (equal? b #0(99)))) | |
280 | ||
281 | (pass-if "rank 2, discontinuous" | |
282 | (let ((A #2((0 1) (2 3) (4 5))) | |
283 | (B #2((10 11) (12 13) (14 15))) | |
284 | (C #2((20) (21) (22))) | |
285 | (X (make-array 0 3 5)) | |
286 | (piece (lambda (X w s) | |
287 | (make-shared-array | |
288 | X (lambda (i j) (list i (+ j s))) 3 w)))) | |
289 | (array-map! (piece X 2 0) values A) | |
290 | (array-map! (piece X 2 2) values B) | |
291 | (array-map! (piece X 1 4) values C) | |
292 | (and (array-equal? X #2((0 1 10 11 20) (2 3 12 13 21) (4 5 14 15 22)))))) | |
293 | ||
294 | (pass-if "null increments, not empty" | |
295 | (let ((a (make-array 0 2 2))) | |
296 | (array-map! a values (make-shared-array #0(1) (lambda x '()) 2 2)) | |
297 | (array-equal? a #2((1 1) (1 1)))))) | |
917abf70 KR |
298 | |
299 | (with-test-prefix "two sources" | |
300 | ||
301 | (pass-if-exception "closure 0" exception:wrong-num-args | |
302 | (array-map! (make-array #f 5) (lambda () #f) | |
7e7e3b7f | 303 | (make-array #f 5) (make-array #f 5))) |
917abf70 KR |
304 | |
305 | (pass-if-exception "closure 1" exception:wrong-num-args | |
306 | (array-map! (make-array #f 5) (lambda (x) #f) | |
7e7e3b7f | 307 | (make-array #f 5) (make-array #f 5))) |
917abf70 KR |
308 | |
309 | (pass-if "closure 2" | |
310 | (let ((a (make-array #f 5))) | |
7e7e3b7f DL |
311 | (array-map! a (lambda (x y) 'foo) |
312 | (make-array #f 5) (make-array #f 5)) | |
313 | (equal? a (make-array 'foo 5)))) | |
917abf70 | 314 | |
df338a22 | 315 | (pass-if-exception "subr_1" exception:wrong-num-args |
917abf70 KR |
316 | (array-map! (make-array #f 5) length |
317 | (make-array #f 5) (make-array #f 5))) | |
318 | ||
319 | (pass-if "subr_2" | |
320 | (let ((a (make-array 'foo 5))) | |
321 | (array-map! a logtest | |
322 | (make-array 999 5) (make-array 999 5)) | |
323 | (equal? a (make-array #t 5)))) | |
324 | ||
325 | (pass-if "subr_2o" | |
326 | (let ((a (make-array #f 5))) | |
327 | (array-map! a number->string | |
328 | (make-array 32 5) (make-array 16 5)) | |
329 | (equal? a (make-array "20" 5)))) | |
330 | ||
ad79736c | 331 | (pass-if-exception "dsubr" exception:wrong-num-args |
917abf70 | 332 | (let ((a (make-array #f 5))) |
ad79736c | 333 | (array-map! a sqrt |
917abf70 KR |
334 | (make-array 16.0 5) (make-array 16.0 5)) |
335 | (equal? a (make-array 4.0 5)))) | |
336 | ||
337 | (pass-if "rpsubr" | |
338 | (let ((a (make-array 'foo 5))) | |
339 | (array-map! a = (make-array 99 5) (make-array 77 5)) | |
340 | (equal? a (make-array #f 5)))) | |
341 | ||
342 | (pass-if "asubr" | |
343 | (let ((a (make-array 'foo 5))) | |
344 | (array-map! a - (make-array 99 5) (make-array 11 5)) | |
345 | (equal? a (make-array 88 5)))) | |
346 | ||
347 | (pass-if "+" | |
348 | (let ((a (make-array #f 4))) | |
349 | (array-map! a + #(1 2 3 4) #(5 6 7 8)) | |
848431b6 | 350 | (equal? a #(6 8 10 12)))) |
7e7e3b7f | 351 | |
848431b6 DL |
352 | (pass-if "noncompact arrays 1" |
353 | (let ((a #2((0 1) (2 3))) | |
7e7e3b7f | 354 | (c (make-array 0 2))) |
848431b6 DL |
355 | (begin |
356 | (array-map! c + (array-row a 1) (array-row a 1)) | |
357 | (array-equal? c #(4 6))))) | |
7e7e3b7f | 358 | |
848431b6 DL |
359 | (pass-if "noncompact arrays 2" |
360 | (let ((a #2((0 1) (2 3))) | |
7e7e3b7f | 361 | (c (make-array 0 2))) |
848431b6 DL |
362 | (begin |
363 | (array-map! c + (array-col a 1) (array-col a 1)) | |
364 | (array-equal? c #(2 6))))) | |
7e7e3b7f | 365 | |
848431b6 DL |
366 | (pass-if "noncompact arrays 3" |
367 | (let ((a #2((0 1) (2 3))) | |
7e7e3b7f | 368 | (c (make-array 0 2))) |
848431b6 DL |
369 | (begin |
370 | (array-map! c + (array-col a 1) (array-row a 1)) | |
371 | (array-equal? c #(3 6))))) | |
7e7e3b7f | 372 | |
848431b6 DL |
373 | (pass-if "noncompact arrays 4" |
374 | (let ((a #2((0 1) (2 3))) | |
7e7e3b7f | 375 | (c (make-array 0 2))) |
848431b6 DL |
376 | (begin |
377 | (array-map! c + (array-col a 1) (array-row a 1)) | |
4cde4f63 DL |
378 | (array-equal? c #(3 6))))) |
379 | ||
380 | (pass-if "offset arrays 1" | |
381 | (let ((a #2@1@-3((0 1) (2 3))) | |
382 | (c (make-array 0 '(1 2) '(-3 -2)))) | |
383 | (begin | |
384 | (array-map! c + a a) | |
385 | (array-equal? c #2@1@-3((0 2) (4 6))))))) | |
dd60e934 DL |
386 | |
387 | ;; note that array-copy! has the opposite behavior. | |
388 | ||
389 | (pass-if-exception "matching behavior I" exception:shape-mismatch | |
390 | (let ((a #(1 2)) | |
391 | (b (make-array 0 3))) | |
392 | (array-map! b values a) | |
393 | (equal? b #(1 2 0)))) | |
394 | ||
395 | (pass-if "matching behavior II" | |
396 | (let ((a #(1 2 3)) | |
397 | (b (make-array 0 2))) | |
398 | (array-map! b values a) | |
f26eae9a DL |
399 | (equal? b #(1 2)))) |
400 | ||
401 | ;; here both a & b are are unrollable down to the first axis, but the | |
402 | ;; size mismatch limits unrolling to the last axis only. | |
403 | ||
404 | (pass-if "matching behavior III" | |
405 | (let ((a #3(((1 2) (3 4) (5 6)) ((7 8) (9 10) (11 12)))) | |
406 | (b (make-array 0 2 2 2))) | |
407 | (array-map! b values a) | |
408 | (array-equal? b #3(((1 2) (3 4)) ((7 8) (9 10))))))) | |
848431b6 DL |
409 | |
410 | ;;; | |
411 | ;;; array-for-each | |
412 | ;;; | |
413 | ||
414 | (with-test-prefix "array-for-each" | |
415 | ||
3220b080 | 416 | (with-test-prefix "1 source" |
f26eae9a DL |
417 | (pass-if-equal "rank 0" |
418 | '(99) | |
419 | (let* ((a #0(99)) | |
420 | (l '()) | |
421 | (p (lambda (x) (set! l (cons x l))))) | |
422 | (array-for-each p a) | |
423 | l)) | |
424 | ||
3220b080 LC |
425 | (pass-if-equal "noncompact array" |
426 | '(3 2 1 0) | |
427 | (let* ((a #2((0 1) (2 3))) | |
428 | (l '()) | |
429 | (p (lambda (x) (set! l (cons x l))))) | |
430 | (array-for-each p a) | |
431 | l)) | |
432 | ||
433 | (pass-if-equal "vector" | |
434 | '(3 2 1 0) | |
435 | (let* ((a #(0 1 2 3)) | |
436 | (l '()) | |
437 | (p (lambda (x) (set! l (cons x l))))) | |
438 | (array-for-each p a) | |
439 | l)) | |
440 | ||
441 | (pass-if-equal "shared array" | |
442 | '(3 2 1 0) | |
443 | (let* ((a #2((0 1) (2 3))) | |
444 | (a' (make-shared-array a | |
445 | (lambda (x) | |
446 | (list (quotient x 4) | |
447 | (modulo x 4))) | |
448 | 4)) | |
449 | (l '()) | |
450 | (p (lambda (x) (set! l (cons x l))))) | |
451 | (array-for-each p a') | |
452 | l))) | |
453 | ||
848431b6 | 454 | (with-test-prefix "3 sources" |
0d7f3a6d LC |
455 | (pass-if-equal "noncompact arrays 1" |
456 | '((3 3 3) (2 2 2)) | |
848431b6 DL |
457 | (let* ((a #2((0 1) (2 3))) |
458 | (l '()) | |
459 | (rec (lambda args (set! l (cons args l))))) | |
460 | (array-for-each rec (array-row a 1) (array-row a 1) (array-row a 1)) | |
0d7f3a6d LC |
461 | l)) |
462 | ||
463 | (pass-if-equal "noncompact arrays 2" | |
464 | '((3 3 3) (2 2 1)) | |
848431b6 DL |
465 | (let* ((a #2((0 1) (2 3))) |
466 | (l '()) | |
467 | (rec (lambda args (set! l (cons args l))))) | |
468 | (array-for-each rec (array-row a 1) (array-row a 1) (array-col a 1)) | |
0d7f3a6d LC |
469 | l)) |
470 | ||
471 | (pass-if-equal "noncompact arrays 3" | |
472 | '((3 3 3) (2 1 1)) | |
848431b6 DL |
473 | (let* ((a #2((0 1) (2 3))) |
474 | (l '()) | |
475 | (rec (lambda args (set! l (cons args l))))) | |
476 | (array-for-each rec (array-row a 1) (array-col a 1) (array-col a 1)) | |
0d7f3a6d LC |
477 | l)) |
478 | ||
479 | (pass-if-equal "noncompact arrays 4" | |
480 | '((3 2 3) (1 0 2)) | |
848431b6 DL |
481 | (let* ((a #2((0 1) (2 3))) |
482 | (l '()) | |
483 | (rec (lambda args (set! l (cons args l))))) | |
484 | (array-for-each rec (array-col a 1) (array-col a 0) (array-row a 1)) | |
8269f0be DL |
485 | l))) |
486 | ||
487 | (with-test-prefix "empty arrays" | |
488 | ||
489 | (pass-if "empty other than last, #t" ; fails in 2.0.9 with bad a. | |
490 | (let* ((a (list)) | |
491 | (b (make-array 0 2 2)) | |
492 | (c (make-shared-array b (lambda (i j) (list i j)) 0 2))) | |
493 | (array-for-each (lambda (c) (set! a (cons c a))) c) | |
494 | (equal? a '()))) | |
495 | ||
496 | (pass-if "empty other than last, f64" ; fails in 2.0.9 with out of range. | |
497 | (let* ((a (list)) | |
498 | (b (make-typed-array 'f64 0 2 2)) | |
499 | (c (make-shared-array b (lambda (i j) (list i j)) 0 2))) | |
500 | (array-for-each (lambda (c) (set! a (cons c a))) c) | |
501 | (equal? a '()))) | |
502 | ||
503 | ;; FIXME add type 'b cases. | |
504 | ||
505 | (pass-if-exception "empty arrays shape check" exception:shape-mismatch | |
506 | (let* ((a (list)) | |
507 | (b (make-typed-array 'f64 0 0 2)) | |
508 | (c (make-typed-array 'f64 0 2 0))) | |
509 | (array-for-each (lambda (b c) (set! a (cons* b c a))) b c))))) |