@@ -11,32 +11,33 @@ use ndarray::Si;
11
11
use ndarray:: { Ix , Ixs } ;
12
12
13
13
use std:: fmt;
14
+ use std:: ops:: Neg ;
14
15
use num_traits:: Float ;
15
16
16
17
fn test_oper ( op : & str , a : & [ f32 ] , b : & [ f32 ] , c : & [ f32 ] )
17
18
{
18
19
let aa = rcarr1 ( a) ;
19
20
let bb = rcarr1 ( b) ;
20
21
let cc = rcarr1 ( c) ;
21
- test_oper_arr ( op, aa. clone ( ) , bb. clone ( ) , cc. clone ( ) ) ;
22
+ test_oper_arr :: < f32 , _ > ( op, aa. clone ( ) , bb. clone ( ) , cc. clone ( ) ) ;
22
23
let dim = ( 2 , 2 ) ;
23
24
let aa = aa. reshape ( dim) ;
24
25
let bb = bb. reshape ( dim) ;
25
26
let cc = cc. reshape ( dim) ;
26
- test_oper_arr ( op, aa. clone ( ) , bb. clone ( ) , cc. clone ( ) ) ;
27
+ test_oper_arr :: < f32 , _ > ( op, aa. clone ( ) , bb. clone ( ) , cc. clone ( ) ) ;
27
28
let dim = ( 1 , 2 , 1 , 2 ) ;
28
29
let aa = aa. reshape ( dim) ;
29
30
let bb = bb. reshape ( dim) ;
30
31
let cc = cc. reshape ( dim) ;
31
- test_oper_arr ( op, aa. clone ( ) , bb. clone ( ) , cc. clone ( ) ) ;
32
+ test_oper_arr :: < f32 , _ > ( op, aa. clone ( ) , bb. clone ( ) , cc. clone ( ) ) ;
32
33
}
33
34
34
- fn test_oper_arr < D : Dimension > (
35
- op : & str ,
36
- mut aa : RcArray < f32 , D > ,
37
- bb : RcArray < f32 , D > ,
38
- cc : RcArray < f32 , D > ,
39
- ) {
35
+ fn test_oper_arr < A , D > ( op : & str , mut aa : RcArray < A , D > , bb : RcArray < A , D > , cc : RcArray < A , D > )
36
+ where
37
+ A : NdFloat ,
38
+ for < ' a > & ' a A : Neg < Output = A > ,
39
+ D : Dimension ,
40
+ {
40
41
match op {
41
42
"+" => {
42
43
assert_eq ! ( & aa + & bb, cc) ;
0 commit comments