3
3
/// Compares the vector operation to the equivalent scalar operation.
4
4
#[ macro_export]
5
5
macro_rules! impl_unary_op_test {
6
- { $vector : ty , $ scalar: ty, $trait: ident :: $fn: ident, $scalar_fn: expr } => {
6
+ { $scalar: ty, $trait: ident :: $fn: ident, $scalar_fn: expr } => {
7
7
test_helpers:: test_lanes! {
8
8
fn $fn<const LANES : usize >( ) {
9
9
test_helpers:: test_unary_elementwise(
10
- & <$vector as core:: ops:: $trait>:: $fn,
10
+ & <core_simd :: Simd <$scalar , LANES > as core:: ops:: $trait>:: $fn,
11
11
& $scalar_fn,
12
12
& |_| true ,
13
13
) ;
14
14
}
15
15
}
16
16
} ;
17
- { $vector : ty , $ scalar: ty, $trait: ident :: $fn: ident } => {
18
- impl_unary_op_test! { $vector , $ scalar, $trait:: $fn, <$scalar as core:: ops:: $trait>:: $fn }
17
+ { $scalar: ty, $trait: ident :: $fn: ident } => {
18
+ impl_unary_op_test! { $scalar, $trait:: $fn, <$scalar as core:: ops:: $trait>:: $fn }
19
19
} ;
20
20
}
21
21
@@ -24,55 +24,56 @@ macro_rules! impl_unary_op_test {
24
24
/// Compares the vector operation to the equivalent scalar operation.
25
25
#[ macro_export]
26
26
macro_rules! impl_binary_op_test {
27
- { $vector : ty , $ scalar: ty, $trait: ident :: $fn: ident, $trait_assign: ident :: $fn_assign: ident, $scalar_fn: expr } => {
27
+ { $scalar: ty, $trait: ident :: $fn: ident, $trait_assign: ident :: $fn_assign: ident, $scalar_fn: expr } => {
28
28
mod $fn {
29
29
use super :: * ;
30
+ use core_simd:: Simd ;
30
31
31
32
test_helpers:: test_lanes! {
32
33
fn normal<const LANES : usize >( ) {
33
34
test_helpers:: test_binary_elementwise(
34
- & <$vector as core:: ops:: $trait>:: $fn,
35
+ & <Simd <$scalar , LANES > as core:: ops:: $trait>:: $fn,
35
36
& $scalar_fn,
36
37
& |_, _| true ,
37
38
) ;
38
39
}
39
40
40
41
fn scalar_rhs<const LANES : usize >( ) {
41
42
test_helpers:: test_binary_scalar_rhs_elementwise(
42
- & <$vector as core:: ops:: $trait<$scalar>>:: $fn,
43
+ & <Simd <$scalar , LANES > as core:: ops:: $trait<$scalar>>:: $fn,
43
44
& $scalar_fn,
44
45
& |_, _| true ,
45
46
) ;
46
47
}
47
48
48
49
fn scalar_lhs<const LANES : usize >( ) {
49
50
test_helpers:: test_binary_scalar_lhs_elementwise(
50
- & <$scalar as core:: ops:: $trait<$vector >>:: $fn,
51
+ & <$scalar as core:: ops:: $trait<Simd <$scalar , LANES > >>:: $fn,
51
52
& $scalar_fn,
52
53
& |_, _| true ,
53
54
) ;
54
55
}
55
56
56
57
fn assign<const LANES : usize >( ) {
57
58
test_helpers:: test_binary_elementwise(
58
- & |mut a, b| { <$vector as core:: ops:: $trait_assign>:: $fn_assign( & mut a, b) ; a } ,
59
+ & |mut a, b| { <Simd <$scalar , LANES > as core:: ops:: $trait_assign>:: $fn_assign( & mut a, b) ; a } ,
59
60
& $scalar_fn,
60
61
& |_, _| true ,
61
62
) ;
62
63
}
63
64
64
65
fn assign_scalar_rhs<const LANES : usize >( ) {
65
66
test_helpers:: test_binary_scalar_rhs_elementwise(
66
- & |mut a, b| { <$vector as core:: ops:: $trait_assign<$scalar>>:: $fn_assign( & mut a, b) ; a } ,
67
+ & |mut a, b| { <Simd <$scalar , LANES > as core:: ops:: $trait_assign<$scalar>>:: $fn_assign( & mut a, b) ; a } ,
67
68
& $scalar_fn,
68
69
& |_, _| true ,
69
70
) ;
70
71
}
71
72
}
72
73
}
73
74
} ;
74
- { $vector : ty , $ scalar: ty, $trait: ident :: $fn: ident, $trait_assign: ident :: $fn_assign: ident } => {
75
- impl_binary_op_test! { $vector , $ scalar, $trait:: $fn, $trait_assign:: $fn_assign, <$scalar as core:: ops:: $trait>:: $fn }
75
+ { $scalar: ty, $trait: ident :: $fn: ident, $trait_assign: ident :: $fn_assign: ident } => {
76
+ impl_binary_op_test! { $scalar, $trait:: $fn, $trait_assign:: $fn_assign, <$scalar as core:: ops:: $trait>:: $fn }
76
77
} ;
77
78
}
78
79
@@ -84,55 +85,56 @@ macro_rules! impl_binary_op_test {
84
85
/// Compares the vector operation to the equivalent scalar operation.
85
86
#[ macro_export]
86
87
macro_rules! impl_binary_checked_op_test {
87
- { $vector : ty , $ scalar: ty, $trait: ident :: $fn: ident, $trait_assign: ident :: $fn_assign: ident, $scalar_fn: expr, $check_fn: expr } => {
88
+ { $scalar: ty, $trait: ident :: $fn: ident, $trait_assign: ident :: $fn_assign: ident, $scalar_fn: expr, $check_fn: expr } => {
88
89
mod $fn {
89
90
use super :: * ;
91
+ use core_simd:: Simd ;
90
92
91
93
test_helpers:: test_lanes! {
92
94
fn normal<const LANES : usize >( ) {
93
95
test_helpers:: test_binary_elementwise(
94
- & <$vector as core:: ops:: $trait>:: $fn,
96
+ & <Simd <$scalar , LANES > as core:: ops:: $trait>:: $fn,
95
97
& $scalar_fn,
96
98
& |x, y| x. iter( ) . zip( y. iter( ) ) . all( |( x, y) | $check_fn( * x, * y) ) ,
97
99
) ;
98
100
}
99
101
100
102
fn scalar_rhs<const LANES : usize >( ) {
101
103
test_helpers:: test_binary_scalar_rhs_elementwise(
102
- & <$vector as core:: ops:: $trait<$scalar>>:: $fn,
104
+ & <Simd <$scalar , LANES > as core:: ops:: $trait<$scalar>>:: $fn,
103
105
& $scalar_fn,
104
106
& |x, y| x. iter( ) . all( |x| $check_fn( * x, y) ) ,
105
107
) ;
106
108
}
107
109
108
110
fn scalar_lhs<const LANES : usize >( ) {
109
111
test_helpers:: test_binary_scalar_lhs_elementwise(
110
- & <$scalar as core:: ops:: $trait<$vector >>:: $fn,
112
+ & <$scalar as core:: ops:: $trait<Simd <$scalar , LANES > >>:: $fn,
111
113
& $scalar_fn,
112
114
& |x, y| y. iter( ) . all( |y| $check_fn( x, * y) ) ,
113
115
) ;
114
116
}
115
117
116
118
fn assign<const LANES : usize >( ) {
117
119
test_helpers:: test_binary_elementwise(
118
- & |mut a, b| { <$vector as core:: ops:: $trait_assign>:: $fn_assign( & mut a, b) ; a } ,
120
+ & |mut a, b| { <Simd <$scalar , LANES > as core:: ops:: $trait_assign>:: $fn_assign( & mut a, b) ; a } ,
119
121
& $scalar_fn,
120
122
& |x, y| x. iter( ) . zip( y. iter( ) ) . all( |( x, y) | $check_fn( * x, * y) ) ,
121
123
)
122
124
}
123
125
124
126
fn assign_scalar_rhs<const LANES : usize >( ) {
125
127
test_helpers:: test_binary_scalar_rhs_elementwise(
126
- & |mut a, b| { <$vector as core:: ops:: $trait_assign<$scalar>>:: $fn_assign( & mut a, b) ; a } ,
128
+ & |mut a, b| { <Simd <$scalar , LANES > as core:: ops:: $trait_assign<$scalar>>:: $fn_assign( & mut a, b) ; a } ,
127
129
& $scalar_fn,
128
130
& |x, y| x. iter( ) . all( |x| $check_fn( * x, y) ) ,
129
131
)
130
132
}
131
133
}
132
134
}
133
135
} ;
134
- { $vector : ty , $ scalar: ty, $trait: ident :: $fn: ident, $trait_assign: ident :: $fn_assign: ident, $check_fn: expr } => {
135
- impl_binary_nonzero_rhs_op_test ! { $vector , $scalar, $trait:: $fn, $trait_assign:: $fn_assign, <$scalar as core:: ops:: $trait>:: $fn, $check_fn }
136
+ { $scalar: ty, $trait: ident :: $fn: ident, $trait_assign: ident :: $fn_assign: ident, $check_fn: expr } => {
137
+ impl_binary_checked_op_test ! { $scalar, $trait:: $fn, $trait_assign:: $fn_assign, <$scalar as core:: ops:: $trait>:: $fn, $check_fn }
136
138
} ;
137
139
}
138
140
@@ -216,9 +218,9 @@ macro_rules! impl_common_integer_tests {
216
218
/// Implement tests for signed integers.
217
219
#[ macro_export]
218
220
macro_rules! impl_signed_tests {
219
- { $vector : ident , $ scalar: tt } => {
221
+ { $scalar: tt } => {
220
222
mod $scalar {
221
- type Vector <const LANES : usize > = core_simd:: $vector< LANES >;
223
+ type Vector <const LANES : usize > = core_simd:: Simd < Scalar , LANES >;
222
224
type Scalar = $scalar;
223
225
224
226
impl_common_integer_tests! { Vector , Scalar }
@@ -305,28 +307,28 @@ macro_rules! impl_signed_tests {
305
307
}
306
308
}
307
309
308
- impl_binary_op_test!( Vector < LANES > , Scalar , Add :: add, AddAssign :: add_assign, Scalar :: wrapping_add) ;
309
- impl_binary_op_test!( Vector < LANES > , Scalar , Sub :: sub, SubAssign :: sub_assign, Scalar :: wrapping_sub) ;
310
- impl_binary_op_test!( Vector < LANES > , Scalar , Mul :: mul, MulAssign :: mul_assign, Scalar :: wrapping_mul) ;
310
+ impl_binary_op_test!( Scalar , Add :: add, AddAssign :: add_assign, Scalar :: wrapping_add) ;
311
+ impl_binary_op_test!( Scalar , Sub :: sub, SubAssign :: sub_assign, Scalar :: wrapping_sub) ;
312
+ impl_binary_op_test!( Scalar , Mul :: mul, MulAssign :: mul_assign, Scalar :: wrapping_mul) ;
311
313
312
314
// Exclude Div and Rem panicking cases
313
- impl_binary_checked_op_test!( Vector < LANES > , Scalar , Div :: div, DivAssign :: div_assign, Scalar :: wrapping_div, |x, y| y != 0 && !( x == Scalar :: MIN && y == -1 ) ) ;
314
- impl_binary_checked_op_test!( Vector < LANES > , Scalar , Rem :: rem, RemAssign :: rem_assign, Scalar :: wrapping_rem, |x, y| y != 0 && !( x == Scalar :: MIN && y == -1 ) ) ;
315
+ impl_binary_checked_op_test!( Scalar , Div :: div, DivAssign :: div_assign, Scalar :: wrapping_div, |x, y| y != 0 && !( x == Scalar :: MIN && y == -1 ) ) ;
316
+ impl_binary_checked_op_test!( Scalar , Rem :: rem, RemAssign :: rem_assign, Scalar :: wrapping_rem, |x, y| y != 0 && !( x == Scalar :: MIN && y == -1 ) ) ;
315
317
316
- impl_unary_op_test!( Vector < LANES > , Scalar , Not :: not) ;
317
- impl_binary_op_test!( Vector < LANES > , Scalar , BitAnd :: bitand, BitAndAssign :: bitand_assign) ;
318
- impl_binary_op_test!( Vector < LANES > , Scalar , BitOr :: bitor, BitOrAssign :: bitor_assign) ;
319
- impl_binary_op_test!( Vector < LANES > , Scalar , BitXor :: bitxor, BitXorAssign :: bitxor_assign) ;
318
+ impl_unary_op_test!( Scalar , Not :: not) ;
319
+ impl_binary_op_test!( Scalar , BitAnd :: bitand, BitAndAssign :: bitand_assign) ;
320
+ impl_binary_op_test!( Scalar , BitOr :: bitor, BitOrAssign :: bitor_assign) ;
321
+ impl_binary_op_test!( Scalar , BitXor :: bitxor, BitXorAssign :: bitxor_assign) ;
320
322
}
321
323
}
322
324
}
323
325
324
326
/// Implement tests for unsigned integers.
325
327
#[ macro_export]
326
328
macro_rules! impl_unsigned_tests {
327
- { $vector : ident , $ scalar: tt } => {
329
+ { $scalar: tt } => {
328
330
mod $scalar {
329
- type Vector <const LANES : usize > = core_simd:: $vector< LANES >;
331
+ type Vector <const LANES : usize > = core_simd:: Simd < Scalar , LANES >;
330
332
type Scalar = $scalar;
331
333
332
334
impl_common_integer_tests! { Vector , Scalar }
@@ -339,36 +341,36 @@ macro_rules! impl_unsigned_tests {
339
341
}
340
342
}
341
343
342
- impl_binary_op_test!( Vector < LANES > , Scalar , Add :: add, AddAssign :: add_assign, Scalar :: wrapping_add) ;
343
- impl_binary_op_test!( Vector < LANES > , Scalar , Sub :: sub, SubAssign :: sub_assign, Scalar :: wrapping_sub) ;
344
- impl_binary_op_test!( Vector < LANES > , Scalar , Mul :: mul, MulAssign :: mul_assign, Scalar :: wrapping_mul) ;
344
+ impl_binary_op_test!( Scalar , Add :: add, AddAssign :: add_assign, Scalar :: wrapping_add) ;
345
+ impl_binary_op_test!( Scalar , Sub :: sub, SubAssign :: sub_assign, Scalar :: wrapping_sub) ;
346
+ impl_binary_op_test!( Scalar , Mul :: mul, MulAssign :: mul_assign, Scalar :: wrapping_mul) ;
345
347
346
348
// Exclude Div and Rem panicking cases
347
- impl_binary_checked_op_test!( Vector < LANES > , Scalar , Div :: div, DivAssign :: div_assign, Scalar :: wrapping_div, |_, y| y != 0 ) ;
348
- impl_binary_checked_op_test!( Vector < LANES > , Scalar , Rem :: rem, RemAssign :: rem_assign, Scalar :: wrapping_rem, |_, y| y != 0 ) ;
349
+ impl_binary_checked_op_test!( Scalar , Div :: div, DivAssign :: div_assign, Scalar :: wrapping_div, |_, y| y != 0 ) ;
350
+ impl_binary_checked_op_test!( Scalar , Rem :: rem, RemAssign :: rem_assign, Scalar :: wrapping_rem, |_, y| y != 0 ) ;
349
351
350
- impl_unary_op_test!( Vector < LANES > , Scalar , Not :: not) ;
351
- impl_binary_op_test!( Vector < LANES > , Scalar , BitAnd :: bitand, BitAndAssign :: bitand_assign) ;
352
- impl_binary_op_test!( Vector < LANES > , Scalar , BitOr :: bitor, BitOrAssign :: bitor_assign) ;
353
- impl_binary_op_test!( Vector < LANES > , Scalar , BitXor :: bitxor, BitXorAssign :: bitxor_assign) ;
352
+ impl_unary_op_test!( Scalar , Not :: not) ;
353
+ impl_binary_op_test!( Scalar , BitAnd :: bitand, BitAndAssign :: bitand_assign) ;
354
+ impl_binary_op_test!( Scalar , BitOr :: bitor, BitOrAssign :: bitor_assign) ;
355
+ impl_binary_op_test!( Scalar , BitXor :: bitxor, BitXorAssign :: bitxor_assign) ;
354
356
}
355
357
}
356
358
}
357
359
358
360
/// Implement tests for floating point numbers.
359
361
#[ macro_export]
360
362
macro_rules! impl_float_tests {
361
- { $vector : ident , $ scalar: tt, $int_scalar: tt } => {
363
+ { $scalar: tt, $int_scalar: tt } => {
362
364
mod $scalar {
363
- type Vector <const LANES : usize > = core_simd:: $vector< LANES >;
365
+ type Vector <const LANES : usize > = core_simd:: Simd < Scalar , LANES >;
364
366
type Scalar = $scalar;
365
367
366
- impl_unary_op_test!( Vector < LANES > , Scalar , Neg :: neg) ;
367
- impl_binary_op_test!( Vector < LANES > , Scalar , Add :: add, AddAssign :: add_assign) ;
368
- impl_binary_op_test!( Vector < LANES > , Scalar , Sub :: sub, SubAssign :: sub_assign) ;
369
- impl_binary_op_test!( Vector < LANES > , Scalar , Mul :: mul, MulAssign :: mul_assign) ;
370
- impl_binary_op_test!( Vector < LANES > , Scalar , Div :: div, DivAssign :: div_assign) ;
371
- impl_binary_op_test!( Vector < LANES > , Scalar , Rem :: rem, RemAssign :: rem_assign) ;
368
+ impl_unary_op_test!( Scalar , Neg :: neg) ;
369
+ impl_binary_op_test!( Scalar , Add :: add, AddAssign :: add_assign) ;
370
+ impl_binary_op_test!( Scalar , Sub :: sub, SubAssign :: sub_assign) ;
371
+ impl_binary_op_test!( Scalar , Mul :: mul, MulAssign :: mul_assign) ;
372
+ impl_binary_op_test!( Scalar , Div :: div, DivAssign :: div_assign) ;
373
+ impl_binary_op_test!( Scalar , Rem :: rem, RemAssign :: rem_assign) ;
372
374
373
375
test_helpers:: test_lanes! {
374
376
fn is_sign_positive<const LANES : usize >( ) {
0 commit comments