source: project/release/4/mat5-lib/trunk/tests/run.scm @ 30532

Last change on this file since 30532 was 30532, checked in by Ivan Raikov, 8 years ago

mat5-lib: remove temporary files created by unit tests

File size: 5.0 KB
Line 
1;;
2;;
3;; MAT 5.0 library test cases.
4;;
5
6(require-extension test files datatype srfi-4 srfi-63 endian-port mat5-lib)
7
8(define (mat5-num-array-real x)
9  (cases MAT5:array x
10         (MAT5:num-array  (name ty dims real imag) real)
11         (else #f)))
12                         
13
14(define (mat5-num-array-imag x)
15  (cases MAT5:array x
16         (MAT5:num-array  (name ty dims real imag) imag)
17         (else #f)))
18                         
19
20(define (mat5:test:spec)
21
22  (let-values (((fd temp-path) (file-mkstemp "/tmp/mat5-test.XXXXXX")))
23
24    (let* ((temp-port (open-output-file* fd))
25          (eport (port->endian-port temp-port)))
26
27      (test-group
28       "MAT5 library numeric array test from specification document p. 1-20"
29       
30       (let ((aa
31              (let ((real (make-array (A:floR32b 0) 2 2))
32                    (imag (make-array (A:floR32b 0) 2 2)))
33               
34                (array-set! real 1.0  0 0)
35                (array-set! real 3.0  0 1)
36                (array-set! real 2.0  1 0)
37                (array-set! real 4.0  1 1)
38               
39                (array-set! imag 1.0  0 0)
40
41                (MAT5:num-array  "my_array" (miSINGLE) '(2 2) real imag))))
42         
43         
44         (test-assert "Write MAT5 file header" 
45                      (MAT5:write-header eport "MATLAB 5.0 MAT-file" ""))
46         
47         (test-assert "Write test array aa" 
48                      (MAT5:write-data-element eport aa))
49         
50         (test-assert "Close endian port for writing" 
51                      (close-endian-port eport))
52         
53         (let ((eport (open-endian-port 'read temp-path)))
54           
55           (test-assert "Read header from file" 
56                        (MAT5:read-header eport))
57           
58           (let ((aa1 (MAT5:data-element-data (car (MAT5:read-data-element eport)))))
59             (test "Compare real data from file array with original array"
60                   (mat5-num-array-real aa)
61                   (mat5-num-array-real aa1))
62             )
63           
64           (close-endian-port eport)
65
66           (delete-file temp-path)
67   
68           ))
69       ))
70    ))
71
72 
73(define (mat5:test:r+w)
74  (let* ((eport+path
75          (let-values (((fd temp-path) (file-mkstemp "/tmp/mat5-test.XXXXXX")))
76            (let ((temp-port (open-output-file* fd)))
77              (cons (port->endian-port temp-port) temp-path))))
78
79         (eport (car eport+path))
80         (temp-path (cdr eport+path))
81
82         (aa
83          (let ((av (make-array (A:floR64b 0) 2 3 4)))
84           
85            (array-set! av 2.0  0 0 0)
86            (array-set! av 7.0  0 0 1)
87            (array-set! av 8.0  0 0 2)
88            (array-set! av 9.0  0 0 3)
89           
90            (array-set! av 1.0  0 1 0)
91            (array-set! av 13.0 0 1 1)
92            (array-set! av 14.0 0 1 2)
93            (array-set! av 15.0 0 1 3)
94           
95            (array-set! av 4.0  0 2 0)
96            (array-set! av 19.0 0 2 1)
97            (array-set! av 20.0 0 2 2)
98            (array-set! av 21.0 0 2 3)
99           
100            (array-set! av 5.0  1 0 0)
101            (array-set! av 10.0 1 0 1)
102            (array-set! av 11.0 1 0 2)
103            (array-set! av 12.0 1 0 3)
104           
105            (array-set! av 3.0  1 1 0)
106            (array-set! av 16.0 1 1 1)
107            (array-set! av 17.0 1 1 2)
108            (array-set! av 18.0 1 1 3)
109           
110            (array-set! av 6.0  1 2 0)
111            (array-set! av 22.0 1 2 1)
112            (array-set! av 23.0 1 2 2)
113            (array-set! av 24.0 1 2 3)
114           
115            (MAT5:num-array  "aa1" (miDOUBLE) '(2 3 4) av  #f)))
116         )
117
118    (test-group "MAT5 data reading and writing"
119
120                (test-assert "Write MAT5 file header" 
121                             (MAT5:write-header eport "MATLAB 5.0 MAT-file" ""))
122               
123                (test-assert "Write test array aa" 
124                             (MAT5:write-data-element eport aa))
125               
126                (close-endian-port eport)
127               
128                (let ((eport (open-endian-port 'read temp-path)))
129                 
130                  (test-assert "Read header from file" 
131                               (MAT5:read-header eport))
132                 
133                  (let ((aa1 (MAT5:read-data-element eport)))
134                   
135                    (test "Compare array from file with original array"
136                          aa (MAT5:data-element-data (car aa1)))
137                   
138                    (close-endian-port eport)
139                   
140                    )))
141
142    (delete-file temp-path)
143
144    ))
145
146
147
148(define (mat5:teststruct:r+w)
149
150   
151  (let* ((eport+path
152          (let-values (((fd temp-path) (file-mkstemp "/tmp/mat5-test.XXXXXX")))
153            (let ((temp-port (open-output-file* fd)))
154              (cons (port->endian-port temp-port) temp-path))))
155         (eport (car eport+path))
156         (temp-path (cdr eport+path))
157         (aa
158          (let ((av (init-MAT5:cell 1 1))
159                (w  (make-array (A:floR64b 0) 1 1))
160                (y  (make-array (A:floR64b 0) 1 1))
161                (z  (make-array (A:floR64b 0) 1 1)))
162           
163            (array-set! w 1.0  0 0)
164            (array-set! y 2.0  0 0)
165            (array-set! z 3.0  0 0)
166           
167            (MAT5:cell-set! av 
168                            `(,(MAT5:num-array "w" (miDOUBLE) '(1 1) w #f)
169                              ,(MAT5:num-array "y" (miDOUBLE) '(1 1) y #f)
170                              ,(MAT5:num-array "z" (miDOUBLE) '(1 1) z #f))
171                            0 0)
172
173            (MAT5:structure  "aa1" '(1 1) '("w" "y" "z")  av)))
174         )
175
176  (test-group
177   "MAT5 read+write test for structures"
178
179   (test-assert "Write MAT5 file header" 
180              (MAT5:write-header eport "MATLAB 5.0 MAT-file" ""))
181
182   (test-assert "Write test structure aa" 
183              (MAT5:write-data-element eport aa))
184
185   (close-endian-port eport)
186
187   (open-endian-port 'read temp-path)
188
189   (test-assert "Read header from file" 
190                (MAT5:read-header eport))
191
192   (let ((aa1 (MAT5:read-data-element eport)))
193
194     (print "structure from file = " 
195            (MAT5:data-element-data (car aa1)))
196
197     (test "Compare structure from file with original structure"
198           aa (MAT5:data-element-data (car aa1))))
199
200   (close-endian-port eport)
201
202   (delete-file temp-path)
203   )))
204
205
206(mat5:test:spec)
207(mat5:test:r+w)
208(mat5:teststruct:r+w)
209
Note: See TracBrowser for help on using the repository browser.