@@ -137,8 +137,8 @@ mod test {
137
137
/// masks with lanes represented using i16.
138
138
#[ test]
139
139
fn test_bitmask_i16 ( ) {
140
- check_portable_bitmask :: < _ , i16 , 16 > ( mask16x16:: splat ( false ) ) ;
141
- check_portable_bitmask :: < _ , i16 , 16 > ( mask16x16:: splat ( true ) ) ;
140
+ check_portable_bitmask :: < _ , i16 , 16 , u16 > ( mask16x16:: splat ( false ) ) ;
141
+ check_portable_bitmask :: < _ , i16 , 16 , u16 > ( mask16x16:: splat ( true ) ) ;
142
142
}
143
143
144
144
/// Tests that the model correctly fails if an invalid value is given.
@@ -165,11 +165,11 @@ mod test {
165
165
/// These values shouldn't be symmetric and ensure that we also handle endianness correctly.
166
166
#[ test]
167
167
fn test_bitmask_i32 ( ) {
168
- check_portable_bitmask :: < _ , i32 , 8 > ( mask32x8:: from ( [
168
+ check_portable_bitmask :: < _ , i32 , 8 , u8 > ( mask32x8:: from ( [
169
169
true , true , false , true , false , false , false , true ,
170
170
] ) ) ;
171
171
172
- check_portable_bitmask :: < _ , i32 , 4 > ( mask32x4:: from ( [ true , false , false , true ] ) ) ;
172
+ check_portable_bitmask :: < _ , i32 , 4 , u8 > ( mask32x4:: from ( [ true , false , false , true ] ) ) ;
173
173
}
174
174
175
175
#[ repr( simd) ]
@@ -185,15 +185,16 @@ mod test {
185
185
}
186
186
187
187
/// Compare the value returned by our model and the portable simd representation.
188
- fn check_portable_bitmask < T , E , const LANES : usize > ( mask : T )
188
+ fn check_portable_bitmask < T , E , const LANES : usize , M > ( mask : Mask < T , LANES > )
189
189
where
190
- T : ToBitMask + Clone ,
191
- T :: BitMask : Debug + PartialEq ,
190
+ T : std :: simd :: MaskElement ,
191
+ LaneCount < LANES > : SupportedLaneCount ,
192
192
E : kani_intrinsic:: MaskElement ,
193
193
[ u8 ; kani_intrinsic:: mask_len ( LANES ) ] : Sized ,
194
+ u64 : From < M > ,
194
195
{
195
196
assert_eq ! (
196
- unsafe { kani_intrinsic:: simd_bitmask:: <_, T :: BitMask , E , LANES >( mask. clone( ) ) } ,
197
+ unsafe { u64 :: from ( kani_intrinsic:: simd_bitmask:: <_, M , E , LANES >( mask. clone( ) ) ) } ,
197
198
mask. to_bitmask( )
198
199
) ;
199
200
}
@@ -211,4 +212,19 @@ mod test {
211
212
unsafe { simd_bitmask:: <T , U >( mask) }
212
213
) ;
213
214
}
215
+
216
+ /// Similar to portable simd_harness.
217
+ #[ test]
218
+ fn check_mask_harness ( ) {
219
+ // From array doesn't work either. Manually build [false, true, false, true]
220
+ let mut mask = mask32x4:: splat ( false ) ;
221
+ mask. set ( 1 , true ) ;
222
+ mask. set ( 3 , true ) ;
223
+ let bitmask = mask. to_bitmask ( ) ;
224
+ assert_eq ! ( bitmask, 0b1010 ) ;
225
+
226
+ let kani_mask =
227
+ unsafe { u64:: from ( kani_intrinsic:: simd_bitmask :: < _ , u8 , u32 , 4 > ( mask. clone ( ) ) ) } ;
228
+ assert_eq ! ( kani_mask, bitmask) ;
229
+ }
214
230
}
0 commit comments