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

Last change on this file since 26616 was 26616, checked in by Ivan Raikov, 9 years ago

mat5-lib: improvements to structure reading routine

File size: 4.9 KB
Line 
1;;
2;;
3;; MAT 5.0 library test cases.
4;;
5
6(require-extension test 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       ))
67    ))
68
69 
70(define (mat5:test:r+w)
71  (let* ((eport+path
72          (let-values (((fd temp-path) (file-mkstemp "/tmp/mat5-test.XXXXXX")))
73            (let ((temp-port (open-output-file* fd)))
74              (cons (port->endian-port temp-port) temp-path))))
75
76         (eport (car eport+path))
77         (temp-path (cdr eport+path))
78
79         (aa
80          (let ((av (make-array (A:floR64b 0) 2 3 4)))
81           
82            (array-set! av 2.0  0 0 0)
83            (array-set! av 7.0  0 0 1)
84            (array-set! av 8.0  0 0 2)
85            (array-set! av 9.0  0 0 3)
86           
87            (array-set! av 1.0  0 1 0)
88            (array-set! av 13.0 0 1 1)
89            (array-set! av 14.0 0 1 2)
90            (array-set! av 15.0 0 1 3)
91           
92            (array-set! av 4.0  0 2 0)
93            (array-set! av 19.0 0 2 1)
94            (array-set! av 20.0 0 2 2)
95            (array-set! av 21.0 0 2 3)
96           
97            (array-set! av 5.0  1 0 0)
98            (array-set! av 10.0 1 0 1)
99            (array-set! av 11.0 1 0 2)
100            (array-set! av 12.0 1 0 3)
101           
102            (array-set! av 3.0  1 1 0)
103            (array-set! av 16.0 1 1 1)
104            (array-set! av 17.0 1 1 2)
105            (array-set! av 18.0 1 1 3)
106           
107            (array-set! av 6.0  1 2 0)
108            (array-set! av 22.0 1 2 1)
109            (array-set! av 23.0 1 2 2)
110            (array-set! av 24.0 1 2 3)
111           
112            (MAT5:num-array  "aa1" (miDOUBLE) '(2 3 4) av  #f)))
113         )
114
115    (test-group "MAT5 data reading and writing"
116
117                (test-assert "Write MAT5 file header" 
118                             (MAT5:write-header eport "MATLAB 5.0 MAT-file" ""))
119               
120                (test-assert "Write test array aa" 
121                             (MAT5:write-data-element eport aa))
122               
123                (close-endian-port eport)
124               
125                (let ((eport (open-endian-port 'read temp-path)))
126                 
127                  (test-assert "Read header from file" 
128                               (MAT5:read-header eport))
129                 
130                  (let ((aa1 (MAT5:read-data-element eport)))
131                   
132                    (test "Compare array from file with original array"
133                          aa (MAT5:data-element-data (car aa1)))
134                   
135                    (close-endian-port eport)
136                   
137                    )))
138    ))
139
140
141
142(define (mat5:teststruct:r+w)
143
144   
145  (let* ((eport+path
146          (let-values (((fd temp-path) (file-mkstemp "/tmp/mat5-test.XXXXXX")))
147            (let ((temp-port (open-output-file* fd)))
148              (cons (port->endian-port temp-port) temp-path))))
149         (eport (car eport+path))
150         (temp-path (cdr eport+path))
151         (aa
152          (let ((av (init-MAT5:cell 1 1))
153                (w  (make-array (A:floR64b 0) 1 1))
154                (y  (make-array (A:floR64b 0) 1 1))
155                (z  (make-array (A:floR64b 0) 1 1)))
156           
157            (array-set! w 1.0  0 0)
158            (array-set! y 2.0  0 0)
159            (array-set! z 3.0  0 0)
160           
161            (MAT5:cell-set! av 
162                            `(,(MAT5:num-array "w" (miDOUBLE) '(1 1) w #f)
163                              ,(MAT5:num-array "y" (miDOUBLE) '(1 1) y #f)
164                              ,(MAT5:num-array "z" (miDOUBLE) '(1 1) z #f))
165                            0 0)
166
167            (MAT5:structure  "aa1" '(1 1) '("w" "y" "z")  av)))
168         )
169
170  (test-group
171   "MAT5 read+write test for structures"
172
173   (test-assert "Write MAT5 file header" 
174              (MAT5:write-header eport "MATLAB 5.0 MAT-file" ""))
175
176   (test-assert "Write test structure aa" 
177              (MAT5:write-data-element eport aa))
178
179   (close-endian-port eport)
180
181   (open-endian-port 'read temp-path)
182
183   (test-assert "Read header from file" 
184                (MAT5:read-header eport))
185
186   (let ((aa1 (MAT5:read-data-element eport)))
187
188     (print "structure from file = " 
189            (MAT5:data-element-data (car aa1)))
190
191     (test "Compare structure from file with original structure"
192           aa (MAT5:data-element-data (car aa1))))
193
194   (close-endian-port eport)
195
196   )))
197
198
199(mat5:test:spec)
200(mat5:test:r+w)
201(mat5:teststruct:r+w)
202
Note: See TracBrowser for help on using the repository browser.