@@ -28,8 +28,7 @@ fn $testname() {
28
28
println!( "permutated = \n {:?}" , & pa) ;
29
29
all_close( pa, arr2( $answer) )
30
30
}
31
- }
32
- }
31
+ } } // end test_permutate
33
32
34
33
macro_rules! test_permutate_t {
35
34
( $testname: ident, $permutate: expr, $input: expr, $answer: expr) => {
@@ -42,8 +41,7 @@ fn $testname() {
42
41
println!( "permutated = \n {:?}" , & pa) ;
43
42
all_close( pa, arr2( $answer) )
44
43
}
45
- }
46
- }
44
+ } } // end test_permutate_t
47
45
48
46
test_permutate ! ( permutate,
49
47
vec![ 2 , 2 , 3 ] ,
@@ -70,201 +68,89 @@ test_permutate_t!(permutate_4x3_t,
70
68
& [ [ 1. , 4. , 7. , 10. ] , [ 2. , 5. , 8. , 11. ] , [ 3. , 6. , 9. , 12. ] ] ,
71
69
& [ [ 10. , 11. , 12. ] , [ 4. , 5. , 6. ] , [ 7. , 8. , 9. ] , [ 1. , 2. , 3. ] ] ) ;
72
70
73
- #[ test]
74
- fn lu_square_upper ( ) {
75
- let r_dist = Range :: new ( 0. , 1. ) ;
76
- let mut a = Array :: < f64 , _ > :: random ( ( 3 , 3 ) , r_dist) ;
77
- for ( ( i, j) , val) in a. indexed_iter_mut ( ) {
78
- if i > j {
79
- * val = 0.0 ;
80
- }
81
- }
71
+ fn test_lu ( a : Array < f64 , ( Ix , Ix ) > ) {
82
72
println ! ( "a = \n {:?}" , & a) ;
83
73
let ( p, l, u) = a. clone ( ) . lu ( ) . unwrap ( ) ;
84
74
println ! ( "P = \n {:?}" , & p) ;
85
75
println ! ( "L = \n {:?}" , & l) ;
86
76
println ! ( "U = \n {:?}" , & u) ;
77
+ println ! ( "LU = \n {:?}" , l. dot( & u) ) ;
87
78
all_close ( l. dot ( & u) . permutated ( & p) , a) ;
88
79
}
89
80
81
+ macro_rules! test_lu_upper {
82
+ ( $testname: ident, $testname_t: ident, $n: expr, $m: expr) => {
90
83
#[ test]
91
- fn lu_square_upper_t ( ) {
84
+ fn $testname ( ) {
92
85
let r_dist = Range :: new( 0. , 1. ) ;
93
- let mut a = Array :: < f64 , _ > :: random ( ( 3 , 3 ) , r_dist) . reversed_axes ( ) ;
86
+ let mut a = Array :: <f64 , _>:: random( ( $n , $m ) , r_dist) ;
94
87
for ( ( i, j) , val) in a. indexed_iter_mut( ) {
95
88
if i > j {
96
89
* val = 0.0 ;
97
90
}
98
91
}
99
- println ! ( "a = \n {:?}" , & a) ;
100
- let ( p, l, u) = a. clone ( ) . lu ( ) . unwrap ( ) ;
101
- println ! ( "P = \n {:?}" , & p) ;
102
- println ! ( "L = \n {:?}" , & l) ;
103
- println ! ( "U = \n {:?}" , & u) ;
104
- all_close ( l. dot ( & u) . permutated ( & p) , a) ;
92
+ test_lu( a) ;
105
93
}
106
-
107
94
#[ test]
108
- fn lu_square_lower ( ) {
95
+ fn $testname_t ( ) {
109
96
let r_dist = Range :: new( 0. , 1. ) ;
110
- let mut a = Array :: < f64 , _ > :: random ( ( 3 , 3 ) , r_dist) ;
97
+ let mut a = Array :: <f64 , _>:: random( ( $m , $n ) , r_dist) . reversed_axes ( ) ;
111
98
for ( ( i, j) , val) in a. indexed_iter_mut( ) {
112
- if i < j {
99
+ if i > j {
113
100
* val = 0.0 ;
114
101
}
115
102
}
116
- println ! ( "a = \n {:?}" , & a) ;
117
- let ( p, l, u) = a. clone ( ) . lu ( ) . unwrap ( ) ;
118
- println ! ( "P = \n {:?}" , & p) ;
119
- println ! ( "L = \n {:?}" , & l) ;
120
- println ! ( "U = \n {:?}" , & u) ;
121
- println ! ( "LU = \n {:?}" , l. dot( & u) ) ;
122
- all_close ( l. dot ( & u) . permutated ( & p) , a) ;
103
+ test_lu( a) ;
123
104
}
105
+ } } // end test_lu_upper
106
+ test_lu_upper ! ( lu_square_upper, lu_square_upper_t, 3 , 3 ) ;
107
+ test_lu_upper ! ( lu_3x4_upper, lu_3x4_upper_t, 3 , 4 ) ;
108
+ test_lu_upper ! ( lu_4x3_upper, lu_4x3_upper_t, 4 , 3 ) ;
124
109
110
+ macro_rules! test_lu_lower {
111
+ ( $testname: ident, $testname_t: ident, $n: expr, $m: expr) => {
125
112
#[ test]
126
- fn lu_square_lower_t ( ) {
113
+ fn $testname ( ) {
127
114
let r_dist = Range :: new( 0. , 1. ) ;
128
- let mut a = Array :: < f64 , _ > :: random ( ( 3 , 3 ) , r_dist) . reversed_axes ( ) ;
115
+ let mut a = Array :: <f64 , _>:: random( ( $n , $m ) , r_dist) ;
129
116
for ( ( i, j) , val) in a. indexed_iter_mut( ) {
130
117
if i < j {
131
118
* val = 0.0 ;
132
119
}
133
120
}
134
- println ! ( "a = \n {:?}" , & a) ;
135
- let ( p, l, u) = a. clone ( ) . lu ( ) . unwrap ( ) ;
136
- println ! ( "P = \n {:?}" , & p) ;
137
- println ! ( "L = \n {:?}" , & l) ;
138
- println ! ( "U = \n {:?}" , & u) ;
139
- println ! ( "LU = \n {:?}" , l. dot( & u) ) ;
140
- all_close ( l. dot ( & u) . permutated ( & p) , a) ;
121
+ test_lu( a) ;
141
122
}
142
-
143
123
#[ test]
144
- fn lu_square ( ) {
124
+ fn $testname_t ( ) {
145
125
let r_dist = Range :: new( 0. , 1. ) ;
146
- let a = Array :: < f64 , _ > :: random ( ( 3 , 3 ) , r_dist) ;
147
- println ! ( "a = \n {:?}" , & a) ;
148
- let ( p, l, u) = a. clone ( ) . lu ( ) . unwrap ( ) ;
149
- println ! ( "P = \n {:?}" , & p) ;
150
- println ! ( "L = \n {:?}" , & l) ;
151
- println ! ( "U = \n {:?}" , & u) ;
152
- println ! ( "LU = \n {:?}" , l. dot( & u) ) ;
153
- all_close ( l. dot ( & u) . permutated ( & p) , a) ;
126
+ let mut a = Array :: <f64 , _>:: random( ( $m, $n) , r_dist) . reversed_axes( ) ;
127
+ for ( ( i, j) , val) in a. indexed_iter_mut( ) {
128
+ if i < j {
129
+ * val = 0.0 ;
130
+ }
131
+ }
132
+ test_lu( a) ;
154
133
}
134
+ } } // end test_lu_lower
135
+ test_lu_lower ! ( lu_square_lower, lu_square_lower_t, 3 , 3 ) ;
136
+ test_lu_lower ! ( lu_3x4_lower, lu_3x4_lower_t, 3 , 4 ) ;
137
+ test_lu_lower ! ( lu_4x3_lower, lu_4x3_lower_t, 4 , 3 ) ;
155
138
139
+ macro_rules! test_lu {
140
+ ( $testname: ident, $testname_t: ident, $n: expr, $m: expr) => {
156
141
#[ test]
157
- fn lu_square_t ( ) {
142
+ fn $testname ( ) {
158
143
let r_dist = Range :: new( 0. , 1. ) ;
159
- let a = Array :: < f64 , _ > :: random ( ( 3 , 3 ) , r_dist) . reversed_axes ( ) ;
160
- println ! ( "a = \n {:?}" , & a) ;
161
- let ( p, l, u) = a. clone ( ) . lu ( ) . unwrap ( ) ;
162
- println ! ( "P = \n {:?}" , & p) ;
163
- println ! ( "L = \n {:?}" , & l) ;
164
- println ! ( "U = \n {:?}" , & u) ;
165
- all_close ( l. dot ( & u) . permutated ( & p) , a) ;
144
+ let a = Array :: <f64 , _>:: random( ( $n, $m) , r_dist) ;
145
+ test_lu( a) ;
166
146
}
167
-
168
- // #[test]
169
- // fn lu_3x4() {
170
- // let r_dist = Range::new(0., 1.);
171
- // let a = Array::<f64, _>::random((3, 4), r_dist);
172
- // println!("a = \n{:?}", &a);
173
- // let (p, l, u) = a.clone().lu().unwrap();
174
- // println!("P = \n{:?}", &p);
175
- // println!("L = \n{:?}", &l);
176
- // println!("U = \n{:?}", &u);
177
- // println!("LU = \n{:?}", l.dot(&u));
178
- // all_close(l.dot(&u).permutated(&p), a);
179
- // }
180
- //
181
- // #[test]
182
- // fn lu_3x4_t() {
183
- // let r_dist = Range::new(0., 1.);
184
- // let a = Array::<f64, _>::random((4, 3), r_dist).reversed_axes();
185
- // println!("a = \n{:?}", &a);
186
- // let (p, l, u) = a.clone().lu().unwrap();
187
- // println!("P = \n{:?}", &p);
188
- // println!("L = \n{:?}", &l);
189
- // println!("U = \n{:?}", &u);
190
- // all_close(l.dot(&u).permutated(&p), a);
191
- // }
192
-
193
- // #[test]
194
- // fn lu_4x3_upper() {
195
- // let r_dist = Range::new(0., 1.);
196
- // let mut a = Array::<f64, _>::random((4, 3), r_dist);
197
- // for ((i, j), val) in a.indexed_iter_mut() {
198
- // if i > j {
199
- // *val = 0.0;
200
- // }
201
- // }
202
- // println!("a = \n{:?}", &a);
203
- // let (p, l, u) = a.clone().lu().unwrap();
204
- // println!("P = \n{:?}", &p);
205
- // println!("L = \n{:?}", &l);
206
- // println!("U = \n{:?}", &u);
207
- // println!("LU = \n{:?}", l.dot(&u));
208
- // all_close(l.dot(&u).permutated(&p), a);
209
- // }
210
- //
211
- // #[test]
212
- // fn lu_4x3_lower() {
213
- // let r_dist = Range::new(0., 1.);
214
- // let mut a = Array::<f64, _>::random((4, 3), r_dist);
215
- // for ((i, j), val) in a.indexed_iter_mut() {
216
- // if i < j {
217
- // *val = 0.0;
218
- // }
219
- // }
220
- // println!("a = \n{:?}", &a);
221
- // let (p, l, u) = a.clone().lu().unwrap();
222
- // println!("P = \n{:?}", &p);
223
- // println!("L = \n{:?}", &l);
224
- // println!("U = \n{:?}", &u);
225
- // println!("LU = \n{:?}", l.dot(&u));
226
- // all_close(l.dot(&u).permutated(&p), a);
227
- // }
228
-
229
147
#[ test]
230
- fn lu_4x3_upper_t ( ) {
148
+ fn $testname_t ( ) {
231
149
let r_dist = Range :: new( 0. , 1. ) ;
232
- let mut a = Array :: < f64 , _ > :: random ( ( 3 , 4 ) , r_dist) . reversed_axes ( ) ;
233
- for ( ( i, j) , val) in a. indexed_iter_mut ( ) {
234
- if i > j {
235
- * val = 0.0 ;
236
- }
237
- }
238
- println ! ( "a = \n {:?}" , & a) ;
239
- let ( p, l, u) = a. clone ( ) . lu ( ) . unwrap ( ) ;
240
- println ! ( "P = \n {:?}" , & p) ;
241
- println ! ( "L = \n {:?}" , & l) ;
242
- println ! ( "U = \n {:?}" , & u) ;
243
- println ! ( "LU = \n {:?}" , l. dot( & u) ) ;
244
- all_close ( l. dot ( & u) . permutated ( & p) , a) ;
150
+ let a = Array :: <f64 , _>:: random( ( $m, $n) , r_dist) . reversed_axes( ) ;
151
+ test_lu( a) ;
245
152
}
246
-
247
- // #[test]
248
- // fn lu_4x3() {
249
- // let r_dist = Range::new(0., 1.);
250
- // let a = Array::<f64, _>::random((4, 3), r_dist);
251
- // println!("a = \n{:?}", &a);
252
- // let (p, l, u) = a.clone().lu().unwrap();
253
- // println!("P = \n{:?}", &p);
254
- // println!("L = \n{:?}", &l);
255
- // println!("U = \n{:?}", &u);
256
- // println!("LU = \n{:?}", l.dot(&u));
257
- // all_close(l.dot(&u).permutated(&p), a);
258
- // }
259
- //
260
- // #[test]
261
- // fn lu_4x3_t() {
262
- // let r_dist = Range::new(0., 1.);
263
- // let a = Array::<f64, _>::random((3, 4), r_dist).reversed_axes();
264
- // println!("a = \n{:?}", &a);
265
- // let (p, l, u) = a.clone().lu().unwrap();
266
- // println!("P = \n{:?}", &p);
267
- // println!("L = \n{:?}", &l);
268
- // println!("U = \n{:?}", &u);
269
- // all_close(l.dot(&u).permutated(&p), a);
270
- // }
153
+ } } // end test_lu
154
+ test_lu ! ( lu_square, lu_square_t, 3 , 3 ) ;
155
+ test_lu ! ( lu_3x4, lu_3x4_t, 3 , 4 ) ;
156
+ test_lu ! ( lu_4x3, lu_4x3_t, 4 , 3 ) ;
0 commit comments