12
12
//
13
13
// Test std::num::Wrapping<T> for {uN, iN, usize, isize}
14
14
15
- #![ feature( op_assign_traits, num_bits_bytes) ]
15
+ #![ feature( op_assign_traits, num_bits_bytes, test) ]
16
+
17
+ extern crate test;
16
18
17
19
use std:: num:: Wrapping ;
18
20
use std:: ops:: {
@@ -21,8 +23,7 @@ use std::ops::{
21
23
Shl , Shr , ShlAssign , ShrAssign
22
24
} ;
23
25
use std:: { i8, i16, i32, i64, isize, u8, u16, u32, u64, usize} ;
24
-
25
- use std:: test:: black_box;
26
+ use test:: black_box;
26
27
27
28
fn main ( ) {
28
29
test_ops ( ) ;
@@ -247,126 +248,79 @@ fn test_sh_ops() {
247
248
assert_eq!( black_box( Wrapping ( $lhs) . $op( $rhs) ) , Wrapping ( $ans) ) ;
248
249
}
249
250
}
250
- sh_test ! ( shl( i8 :: MAX , ( i8 :: BITS + 1 ) as u8 ) == -2 ) ;
251
- sh_test ! ( shl( i16 :: MAX , ( i16 :: BITS + 1 ) as u8 ) == -2 ) ;
252
- sh_test ! ( shl( i32 :: MAX , ( i32 :: BITS + 1 ) as u8 ) == -2 ) ;
253
- sh_test ! ( shl( i64 :: MAX , ( i64 :: BITS + 1 ) as u8 ) == -2 ) ;
254
- sh_test ! ( shl( isize :: MAX , ( isize :: BITS + 1 ) as u8 ) == -2 ) ;
255
-
256
- sh_test ! ( shl( u8 :: MAX , ( u8 :: BITS + 1 ) as i8 ) == u8 :: MAX - 1 ) ;
257
- sh_test ! ( shl( u16 :: MAX , ( u16 :: BITS + 1 ) as i8 ) == u16 :: MAX - 1 ) ;
258
- sh_test ! ( shl( u32 :: MAX , ( u32 :: BITS + 1 ) as i8 ) == u32 :: MAX - 1 ) ;
259
- sh_test ! ( shl( u64 :: MAX , ( u64 :: BITS + 1 ) as i8 ) == u64 :: MAX - 1 ) ;
260
- sh_test ! ( shl( usize :: MAX , ( usize :: BITS + 1 ) as i8 ) == usize :: MAX - 1 ) ;
261
-
262
- sh_test ! ( shl( i8 :: MAX , ( i8 :: BITS + 1 ) as i16 ) == -2 ) ;
263
- sh_test ! ( shl( i16 :: MAX , ( i16 :: BITS + 1 ) as i16 ) == -2 ) ;
264
- sh_test ! ( shl( i32 :: MAX , ( i32 :: BITS + 1 ) as i16 ) == -2 ) ;
265
- sh_test ! ( shl( i64 :: MAX , ( i64 :: BITS + 1 ) as i16 ) == -2 ) ;
266
- sh_test ! ( shl( isize :: MAX , ( isize :: BITS + 1 ) as i16 ) == -2 ) ;
267
-
268
- sh_test ! ( shl( u8 :: MAX , ( u8 :: BITS + 1 ) as i16 ) == u8 :: MAX - 1 ) ;
269
- sh_test ! ( shl( u16 :: MAX , ( u16 :: BITS + 1 ) as i16 ) == u16 :: MAX - 1 ) ;
270
- sh_test ! ( shl( u32 :: MAX , ( u32 :: BITS + 1 ) as i16 ) == u32 :: MAX - 1 ) ;
271
- sh_test ! ( shl( u64 :: MAX , ( u64 :: BITS + 1 ) as i16 ) == u64 :: MAX - 1 ) ;
272
- sh_test ! ( shl( usize :: MAX , ( usize :: BITS + 1 ) as i16 ) == usize :: MAX - 1 ) ;
273
-
274
- sh_test ! ( shl( i8 :: MAX , ( i8 :: BITS + 1 ) as u16 ) == -2 ) ;
275
- sh_test ! ( shl( i16 :: MAX , ( i16 :: BITS + 1 ) as u16 ) == -2 ) ;
276
- sh_test ! ( shl( i32 :: MAX , ( i32 :: BITS + 1 ) as u16 ) == -2 ) ;
277
- sh_test ! ( shl( i64 :: MAX , ( i64 :: BITS + 1 ) as u16 ) == -2 ) ;
278
- sh_test ! ( shl( isize :: MAX , ( isize :: BITS + 1 ) as u16 ) == -2 ) ;
279
-
280
- sh_test ! ( shl( u8 :: MAX , ( u8 :: BITS + 1 ) as u16 ) == u8 :: MAX - 1 ) ;
281
- sh_test ! ( shl( u16 :: MAX , ( u16 :: BITS + 1 ) as u16 ) == u16 :: MAX - 1 ) ;
282
- sh_test ! ( shl( u32 :: MAX , ( u32 :: BITS + 1 ) as u16 ) == u32 :: MAX - 1 ) ;
283
- sh_test ! ( shl( u64 :: MAX , ( u64 :: BITS + 1 ) as u16 ) == u64 :: MAX - 1 ) ;
284
- sh_test ! ( shl( usize :: MAX , ( usize :: BITS + 1 ) as u16 ) == usize :: MAX - 1 ) ;
285
-
286
- sh_test ! ( shl( i8 :: MAX , ( i8 :: BITS + 1 ) as i32 ) == -2 ) ;
287
- sh_test ! ( shl( i16 :: MAX , ( i16 :: BITS + 1 ) as i32 ) == -2 ) ;
288
- sh_test ! ( shl( i32 :: MAX , ( i32 :: BITS + 1 ) as i32 ) == -2 ) ;
289
- sh_test ! ( shl( i64 :: MAX , ( i64 :: BITS + 1 ) as i32 ) == -2 ) ;
290
- sh_test ! ( shl( isize :: MAX , ( isize :: BITS + 1 ) as i32 ) == -2 ) ;
291
-
292
- sh_test ! ( shl( u8 :: MAX , ( u8 :: BITS + 1 ) as i32 ) == u8 :: MAX - 1 ) ;
293
- sh_test ! ( shl( u16 :: MAX , ( u16 :: BITS + 1 ) as i32 ) == u16 :: MAX - 1 ) ;
294
- sh_test ! ( shl( u32 :: MAX , ( u32 :: BITS + 1 ) as i32 ) == u32 :: MAX - 1 ) ;
295
- sh_test ! ( shl( u64 :: MAX , ( u64 :: BITS + 1 ) as i32 ) == u64 :: MAX - 1 ) ;
296
- sh_test ! ( shl( usize :: MAX , ( usize :: BITS + 1 ) as i32 ) == usize :: MAX - 1 ) ;
297
-
298
- sh_test ! ( shl( i8 :: MAX , ( i8 :: BITS + 1 ) as u32 ) == -2 ) ;
299
- sh_test ! ( shl( i16 :: MAX , ( i16 :: BITS + 1 ) as u32 ) == -2 ) ;
300
- sh_test ! ( shl( i32 :: MAX , ( i32 :: BITS + 1 ) as u32 ) == -2 ) ;
301
- sh_test ! ( shl( i64 :: MAX , ( i64 :: BITS + 1 ) as u32 ) == -2 ) ;
302
- sh_test ! ( shl( isize :: MAX , ( isize :: BITS + 1 ) as u32 ) == -2 ) ;
303
-
304
- sh_test ! ( shl( u8 :: MAX , ( u8 :: BITS + 1 ) as u32 ) == u8 :: MAX - 1 ) ;
305
- sh_test ! ( shl( u16 :: MAX , ( u16 :: BITS + 1 ) as u32 ) == u16 :: MAX - 1 ) ;
306
- sh_test ! ( shl( u32 :: MAX , ( u32 :: BITS + 1 ) as u32 ) == u32 :: MAX - 1 ) ;
307
- sh_test ! ( shl( u64 :: MAX , ( u64 :: BITS + 1 ) as u32 ) == u64 :: MAX - 1 ) ;
308
- sh_test ! ( shl( usize :: MAX , ( usize :: BITS + 1 ) as u32 ) == usize :: MAX - 1 ) ;
309
-
310
- sh_test ! ( shl( i8 :: MAX , ( i8 :: BITS + 1 ) as i64 ) == -2 ) ;
311
- sh_test ! ( shl( i16 :: MAX , ( i16 :: BITS + 1 ) as i64 ) == -2 ) ;
312
- sh_test ! ( shl( i32 :: MAX , ( i32 :: BITS + 1 ) as i64 ) == -2 ) ;
313
- sh_test ! ( shl( i64 :: MAX , ( i64 :: BITS + 1 ) as i64 ) == -2 ) ;
314
- sh_test ! ( shl( isize :: MAX , ( isize :: BITS + 1 ) as i64 ) == -2 ) ;
315
-
316
- sh_test ! ( shl( u8 :: MAX , ( u8 :: BITS + 1 ) as i64 ) == u8 :: MAX - 1 ) ;
317
- sh_test ! ( shl( u16 :: MAX , ( u16 :: BITS + 1 ) as i64 ) == u16 :: MAX - 1 ) ;
318
- sh_test ! ( shl( u32 :: MAX , ( u32 :: BITS + 1 ) as i64 ) == u32 :: MAX - 1 ) ;
319
- sh_test ! ( shl( u64 :: MAX , ( u64 :: BITS + 1 ) as i64 ) == u64 :: MAX - 1 ) ;
320
- sh_test ! ( shl( usize :: MAX , ( usize :: BITS + 1 ) as i64 ) == usize :: MAX - 1 ) ;
321
-
322
- sh_test ! ( shl( i8 :: MAX , ( i8 :: BITS + 1 ) as u64 ) == -2 ) ;
323
- sh_test ! ( shl( i16 :: MAX , ( i16 :: BITS + 1 ) as u64 ) == -2 ) ;
324
- sh_test ! ( shl( i32 :: MAX , ( i32 :: BITS + 1 ) as u64 ) == -2 ) ;
325
- sh_test ! ( shl( i64 :: MAX , ( i64 :: BITS + 1 ) as u64 ) == -2 ) ;
326
- sh_test ! ( shl( isize :: MAX , ( isize :: BITS + 1 ) as u64 ) == -2 ) ;
327
-
328
- sh_test ! ( shl( u8 :: MAX , ( u8 :: BITS + 1 ) as u64 ) == u8 :: MAX - 1 ) ;
329
- sh_test ! ( shl( u16 :: MAX , ( u16 :: BITS + 1 ) as u64 ) == u16 :: MAX - 1 ) ;
330
- sh_test ! ( shl( u32 :: MAX , ( u32 :: BITS + 1 ) as u64 ) == u32 :: MAX - 1 ) ;
331
- sh_test ! ( shl( u64 :: MAX , ( u64 :: BITS + 1 ) as u64 ) == u64 :: MAX - 1 ) ;
332
- sh_test ! ( shl( usize :: MAX , ( usize :: BITS + 1 ) as u64 ) == usize :: MAX - 1 ) ;
333
-
334
- sh_test ! ( shl( i8 :: MAX , ( i8 :: BITS + 1 ) as isize ) == -2 ) ;
335
- sh_test ! ( shl( i16 :: MAX , ( i16 :: BITS + 1 ) as isize ) == -2 ) ;
336
- sh_test ! ( shl( i32 :: MAX , ( i32 :: BITS + 1 ) as isize ) == -2 ) ;
337
- sh_test ! ( shl( i64 :: MAX , ( i64 :: BITS + 1 ) as isize ) == -2 ) ;
338
- sh_test ! ( shl( isize :: MAX , ( isize :: BITS + 1 ) as isize ) == -2 ) ;
339
-
340
- sh_test ! ( shl( u8 :: MAX , ( u8 :: BITS + 1 ) as isize ) == u8 :: MAX - 1 ) ;
341
- sh_test ! ( shl( u16 :: MAX , ( u16 :: BITS + 1 ) as isize ) == u16 :: MAX - 1 ) ;
342
- sh_test ! ( shl( u32 :: MAX , ( u32 :: BITS + 1 ) as isize ) == u32 :: MAX - 1 ) ;
343
- sh_test ! ( shl( u64 :: MAX , ( u64 :: BITS + 1 ) as isize ) == u64 :: MAX - 1 ) ;
344
- sh_test ! ( shl( usize :: MAX , ( usize :: BITS + 1 ) as isize ) == usize :: MAX - 1 ) ;
345
-
346
- sh_test ! ( shl( i8 :: MAX , ( i8 :: BITS + 1 ) as usize ) == -2 ) ;
347
- sh_test ! ( shl( i16 :: MAX , ( i16 :: BITS + 1 ) as usize ) == -2 ) ;
348
- sh_test ! ( shl( i32 :: MAX , ( i32 :: BITS + 1 ) as usize ) == -2 ) ;
349
- sh_test ! ( shl( i64 :: MAX , ( i64 :: BITS + 1 ) as usize ) == -2 ) ;
350
- sh_test ! ( shl( isize :: MAX , ( isize :: BITS + 1 ) as usize ) == -2 ) ;
351
-
352
- sh_test ! ( shl( u8 :: MAX , ( u8 :: BITS + 1 ) as usize ) == u8 :: MAX - 1 ) ;
353
- sh_test ! ( shl( u16 :: MAX , ( u16 :: BITS + 1 ) as usize ) == u16 :: MAX - 1 ) ;
354
- sh_test ! ( shl( u32 :: MAX , ( u32 :: BITS + 1 ) as usize ) == u32 :: MAX - 1 ) ;
355
- sh_test ! ( shl( u64 :: MAX , ( u64 :: BITS + 1 ) as usize ) == u64 :: MAX - 1 ) ;
356
- sh_test ! ( shl( usize :: MAX , ( usize :: BITS + 1 ) as usize ) == usize :: MAX - 1 ) ;
357
-
358
-
359
- sh_test ! ( shr( i8 :: MAX , i8 :: BITS + 1 ) == i8 :: MAX / 2 ) ;
360
- sh_test ! ( shr( i16 :: MAX , i16 :: BITS + 1 ) == i16 :: MAX / 2 ) ;
361
- sh_test ! ( shr( i32 :: MAX , i32 :: BITS + 1 ) == i32 :: MAX / 2 ) ;
362
- sh_test ! ( shr( i64 :: MAX , i64 :: BITS + 1 ) == i64 :: MAX / 2 ) ;
363
- sh_test ! ( shr( isize :: MAX , isize :: BITS + 1 ) == isize :: MAX / 2 ) ;
364
-
365
- sh_test ! ( shr( u8 :: MAX , u8 :: BITS + 1 ) == u8 :: MAX / 2 ) ;
366
- sh_test ! ( shr( u16 :: MAX , u16 :: BITS + 1 ) == u16 :: MAX / 2 ) ;
367
- sh_test ! ( shr( u32 :: MAX , u32 :: BITS + 1 ) == u32 :: MAX / 2 ) ;
368
- sh_test ! ( shr( u64 :: MAX , u64 :: BITS + 1 ) == u64 :: MAX / 2 ) ;
369
- sh_test ! ( shr( usize :: MAX , usize :: BITS + 1 ) == usize :: MAX / 2 ) ;
251
+ // NOTE: This will break for i8 if we ever get i/u128
252
+ macro_rules! sh_test_all {
253
+ ( $t: ty) => {
254
+ sh_test!( shl( i8 :: MAX , ( i8 :: BITS + 1 ) as $t) == -2 ) ;
255
+ sh_test!( shl( i16 :: MAX , ( i16 :: BITS + 1 ) as $t) == -2 ) ;
256
+ sh_test!( shl( i32 :: MAX , ( i32 :: BITS + 1 ) as $t) == -2 ) ;
257
+ sh_test!( shl( i64 :: MAX , ( i64 :: BITS + 1 ) as $t) == -2 ) ;
258
+ sh_test!( shl( isize :: MAX , ( isize :: BITS + 1 ) as $t) == -2 ) ;
259
+
260
+ sh_test!( shl( u8 :: MAX , ( u8 :: BITS + 1 ) as $t) == u8 :: MAX - 1 ) ;
261
+ sh_test!( shl( u16 :: MAX , ( u16 :: BITS + 1 ) as $t) == u16 :: MAX - 1 ) ;
262
+ sh_test!( shl( u32 :: MAX , ( u32 :: BITS + 1 ) as $t) == u32 :: MAX - 1 ) ;
263
+ sh_test!( shl( u64 :: MAX , ( u64 :: BITS + 1 ) as $t) == u64 :: MAX - 1 ) ;
264
+ sh_test!( shl( usize :: MAX , ( usize :: BITS + 1 ) as $t) == usize :: MAX - 1 ) ;
265
+
266
+
267
+ sh_test!( shr( i8 :: MAX , ( i8 :: BITS + 1 ) as $t) == i8 :: MAX / 2 ) ;
268
+ sh_test!( shr( i16 :: MAX , ( i16 :: BITS + 1 ) as $t) == i16 :: MAX / 2 ) ;
269
+ sh_test!( shr( i32 :: MAX , ( i32 :: BITS + 1 ) as $t) == i32 :: MAX / 2 ) ;
270
+ sh_test!( shr( i64 :: MAX , ( i64 :: BITS + 1 ) as $t) == i64 :: MAX / 2 ) ;
271
+ sh_test!( shr( isize :: MAX , ( isize :: BITS + 1 ) as $t) == isize :: MAX / 2 ) ;
272
+
273
+ sh_test!( shr( u8 :: MAX , ( u8 :: BITS + 1 ) as $t) == u8 :: MAX / 2 ) ;
274
+ sh_test!( shr( u16 :: MAX , ( u16 :: BITS + 1 ) as $t) == u16 :: MAX / 2 ) ;
275
+ sh_test!( shr( u32 :: MAX , ( u32 :: BITS + 1 ) as $t) == u32 :: MAX / 2 ) ;
276
+ sh_test!( shr( u64 :: MAX , ( u64 :: BITS + 1 ) as $t) == u64 :: MAX / 2 ) ;
277
+ sh_test!( shr( usize :: MAX , ( usize :: BITS + 1 ) as $t) == usize :: MAX / 2 ) ;
278
+ }
279
+ }
280
+ macro_rules! sh_test_negative_all {
281
+ ( $t: ty) => {
282
+ sh_test!( shr( i8 :: MAX , -( ( i8 :: BITS + 1 ) as $t) ) == -2 ) ;
283
+ sh_test!( shr( i16 :: MAX , -( ( i16 :: BITS + 1 ) as $t) ) == -2 ) ;
284
+ sh_test!( shr( i32 :: MAX , -( ( i32 :: BITS + 1 ) as $t) ) == -2 ) ;
285
+ sh_test!( shr( i64 :: MAX , -( ( i64 :: BITS + 1 ) as $t) ) == -2 ) ;
286
+ sh_test!( shr( isize :: MAX , -( ( isize :: BITS + 1 ) as $t) ) == -2 ) ;
287
+
288
+ sh_test!( shr( u8 :: MAX , -( ( u8 :: BITS + 1 ) as $t) ) == u8 :: MAX - 1 ) ;
289
+ sh_test!( shr( u16 :: MAX , -( ( u16 :: BITS + 1 ) as $t) ) == u16 :: MAX - 1 ) ;
290
+ sh_test!( shr( u32 :: MAX , -( ( u32 :: BITS + 1 ) as $t) ) == u32 :: MAX - 1 ) ;
291
+ sh_test!( shr( u64 :: MAX , -( ( u64 :: BITS + 1 ) as $t) ) == u64 :: MAX - 1 ) ;
292
+ sh_test!( shr( usize :: MAX , -( ( usize :: BITS + 1 ) as $t) ) == usize :: MAX - 1 ) ;
293
+
294
+
295
+ sh_test!( shl( i8 :: MAX , -( ( i8 :: BITS + 1 ) as $t) ) == i8 :: MAX / 2 ) ;
296
+ sh_test!( shl( i16 :: MAX , -( ( i16 :: BITS + 1 ) as $t) ) == i16 :: MAX / 2 ) ;
297
+ sh_test!( shl( i32 :: MAX , -( ( i32 :: BITS + 1 ) as $t) ) == i32 :: MAX / 2 ) ;
298
+ sh_test!( shl( i64 :: MAX , -( ( i64 :: BITS + 1 ) as $t) ) == i64 :: MAX / 2 ) ;
299
+ sh_test!( shl( isize :: MAX , -( ( isize :: BITS + 1 ) as $t) ) == isize :: MAX / 2 ) ;
300
+
301
+ sh_test!( shl( u8 :: MAX , -( ( u8 :: BITS + 1 ) as $t) ) == u8 :: MAX / 2 ) ;
302
+ sh_test!( shl( u16 :: MAX , -( ( u16 :: BITS + 1 ) as $t) ) == u16 :: MAX / 2 ) ;
303
+ sh_test!( shl( u32 :: MAX , -( ( u32 :: BITS + 1 ) as $t) ) == u32 :: MAX / 2 ) ;
304
+ sh_test!( shl( u64 :: MAX , -( ( u64 :: BITS + 1 ) as $t) ) == u64 :: MAX / 2 ) ;
305
+ sh_test!( shl( usize :: MAX , -( ( usize :: BITS + 1 ) as $t) ) == usize :: MAX / 2 ) ;
306
+ }
307
+ }
308
+ sh_test_all ! ( i8 ) ;
309
+ sh_test_all ! ( u8 ) ;
310
+ sh_test_all ! ( i16 ) ;
311
+ sh_test_all ! ( u16 ) ;
312
+ sh_test_all ! ( i32 ) ;
313
+ sh_test_all ! ( u32 ) ;
314
+ sh_test_all ! ( i64 ) ;
315
+ sh_test_all ! ( u64 ) ;
316
+ sh_test_all ! ( isize ) ;
317
+ sh_test_all ! ( usize ) ;
318
+
319
+ sh_test_negative_all ! ( i8 ) ;
320
+ sh_test_negative_all ! ( i16 ) ;
321
+ sh_test_negative_all ! ( i32 ) ;
322
+ sh_test_negative_all ! ( i64 ) ;
323
+ sh_test_negative_all ! ( isize ) ;
370
324
}
371
325
372
326
fn test_sh_op_assigns ( ) {
@@ -378,28 +332,77 @@ fn test_sh_op_assigns() {
378
332
assert_eq!( black_box( tmp) , Wrapping ( $ans) ) ;
379
333
} }
380
334
}
381
- sh_assign_test ! ( shl_assign( i8 :: MAX , i8 :: BITS + 1 ) == -2 ) ;
382
- sh_assign_test ! ( shl_assign( i16 :: MAX , i16 :: BITS + 1 ) == -2 ) ;
383
- sh_assign_test ! ( shl_assign( i32 :: MAX , i32 :: BITS + 1 ) == -2 ) ;
384
- sh_assign_test ! ( shl_assign( i64 :: MAX , i64 :: BITS + 1 ) == -2 ) ;
385
- sh_assign_test ! ( shl_assign( isize :: MAX , isize :: BITS + 1 ) == -2 ) ;
386
-
387
- sh_assign_test ! ( shl_assign( u8 :: MAX , u8 :: BITS + 1 ) == u8 :: MAX - 1 ) ;
388
- sh_assign_test ! ( shl_assign( u16 :: MAX , u16 :: BITS + 1 ) == u16 :: MAX - 1 ) ;
389
- sh_assign_test ! ( shl_assign( u32 :: MAX , u32 :: BITS + 1 ) == u32 :: MAX - 1 ) ;
390
- sh_assign_test ! ( shl_assign( u64 :: MAX , u64 :: BITS + 1 ) == u64 :: MAX - 1 ) ;
391
- sh_assign_test ! ( shl_assign( usize :: MAX , usize :: BITS + 1 ) == usize :: MAX - 1 ) ;
392
-
393
-
394
- sh_assign_test ! ( shr_assign( i8 :: MAX , i8 :: BITS + 1 ) == i8 :: MAX / 2 ) ;
395
- sh_assign_test ! ( shr_assign( i16 :: MAX , i16 :: BITS + 1 ) == i16 :: MAX / 2 ) ;
396
- sh_assign_test ! ( shr_assign( i32 :: MAX , i32 :: BITS + 1 ) == i32 :: MAX / 2 ) ;
397
- sh_assign_test ! ( shr_assign( i64 :: MAX , i64 :: BITS + 1 ) == i64 :: MAX / 2 ) ;
398
- sh_assign_test ! ( shr_assign( isize :: MAX , isize :: BITS + 1 ) == isize :: MAX / 2 ) ;
399
-
400
- sh_assign_test ! ( shr_assign( u8 :: MAX , u8 :: BITS + 1 ) == u8 :: MAX / 2 ) ;
401
- sh_assign_test ! ( shr_assign( u16 :: MAX , u16 :: BITS + 1 ) == u16 :: MAX / 2 ) ;
402
- sh_assign_test ! ( shr_assign( u32 :: MAX , u32 :: BITS + 1 ) == u32 :: MAX / 2 ) ;
403
- sh_assign_test ! ( shr_assign( u64 :: MAX , u64 :: BITS + 1 ) == u64 :: MAX / 2 ) ;
404
- sh_assign_test ! ( shr_assign( usize :: MAX , usize :: BITS + 1 ) == usize :: MAX / 2 ) ;
335
+ macro_rules! sh_assign_test_all {
336
+ ( $t: ty) => {
337
+ sh_assign_test!( shl_assign( i8 :: MAX , ( i8 :: BITS + 1 ) as $t) == -2 ) ;
338
+ sh_assign_test!( shl_assign( i16 :: MAX , ( i16 :: BITS + 1 ) as $t) == -2 ) ;
339
+ sh_assign_test!( shl_assign( i32 :: MAX , ( i32 :: BITS + 1 ) as $t) == -2 ) ;
340
+ sh_assign_test!( shl_assign( i64 :: MAX , ( i64 :: BITS + 1 ) as $t) == -2 ) ;
341
+ sh_assign_test!( shl_assign( isize :: MAX , ( isize :: BITS + 1 ) as $t) == -2 ) ;
342
+
343
+ sh_assign_test!( shl_assign( u8 :: MAX , ( u8 :: BITS + 1 ) as $t) == u8 :: MAX - 1 ) ;
344
+ sh_assign_test!( shl_assign( u16 :: MAX , ( u16 :: BITS + 1 ) as $t) == u16 :: MAX - 1 ) ;
345
+ sh_assign_test!( shl_assign( u32 :: MAX , ( u32 :: BITS + 1 ) as $t) == u32 :: MAX - 1 ) ;
346
+ sh_assign_test!( shl_assign( u64 :: MAX , ( u64 :: BITS + 1 ) as $t) == u64 :: MAX - 1 ) ;
347
+ sh_assign_test!( shl_assign( usize :: MAX , ( usize :: BITS + 1 ) as $t) == usize :: MAX - 1 ) ;
348
+
349
+
350
+ sh_assign_test!( shr_assign( i8 :: MAX , ( i8 :: BITS + 1 ) as $t) == i8 :: MAX / 2 ) ;
351
+ sh_assign_test!( shr_assign( i16 :: MAX , ( i16 :: BITS + 1 ) as $t) == i16 :: MAX / 2 ) ;
352
+ sh_assign_test!( shr_assign( i32 :: MAX , ( i32 :: BITS + 1 ) as $t) == i32 :: MAX / 2 ) ;
353
+ sh_assign_test!( shr_assign( i64 :: MAX , ( i64 :: BITS + 1 ) as $t) == i64 :: MAX / 2 ) ;
354
+ sh_assign_test!( shr_assign( isize :: MAX , ( isize :: BITS + 1 ) as $t) == isize :: MAX / 2 ) ;
355
+
356
+ sh_assign_test!( shr_assign( u8 :: MAX , ( u8 :: BITS + 1 ) as $t) == u8 :: MAX / 2 ) ;
357
+ sh_assign_test!( shr_assign( u16 :: MAX , ( u16 :: BITS + 1 ) as $t) == u16 :: MAX / 2 ) ;
358
+ sh_assign_test!( shr_assign( u32 :: MAX , ( u32 :: BITS + 1 ) as $t) == u32 :: MAX / 2 ) ;
359
+ sh_assign_test!( shr_assign( u64 :: MAX , ( u64 :: BITS + 1 ) as $t) == u64 :: MAX / 2 ) ;
360
+ sh_assign_test!( shr_assign( usize :: MAX , ( usize :: BITS + 1 ) as $t) == usize :: MAX / 2 ) ;
361
+ }
362
+ }
363
+ macro_rules! sh_assign_test_negative_all {
364
+ ( $t: ty) => {
365
+ sh_assign_test!( shr_assign( i8 :: MAX , -( ( i8 :: BITS + 1 ) as $t) ) == -2 ) ;
366
+ sh_assign_test!( shr_assign( i16 :: MAX , -( ( i16 :: BITS + 1 ) as $t) ) == -2 ) ;
367
+ sh_assign_test!( shr_assign( i32 :: MAX , -( ( i32 :: BITS + 1 ) as $t) ) == -2 ) ;
368
+ sh_assign_test!( shr_assign( i64 :: MAX , -( ( i64 :: BITS + 1 ) as $t) ) == -2 ) ;
369
+ sh_assign_test!( shr_assign( isize :: MAX , -( ( isize :: BITS + 1 ) as $t) ) == -2 ) ;
370
+
371
+ sh_assign_test!( shr_assign( u8 :: MAX , -( ( u8 :: BITS + 1 ) as $t) ) == u8 :: MAX - 1 ) ;
372
+ sh_assign_test!( shr_assign( u16 :: MAX , -( ( u16 :: BITS + 1 ) as $t) ) == u16 :: MAX - 1 ) ;
373
+ sh_assign_test!( shr_assign( u32 :: MAX , -( ( u32 :: BITS + 1 ) as $t) ) == u32 :: MAX - 1 ) ;
374
+ sh_assign_test!( shr_assign( u64 :: MAX , -( ( u64 :: BITS + 1 ) as $t) ) == u64 :: MAX - 1 ) ;
375
+ sh_assign_test!( shr_assign( usize :: MAX , -( ( usize :: BITS + 1 ) as $t) ) == usize :: MAX - 1 ) ;
376
+
377
+
378
+ sh_assign_test!( shl_assign( i8 :: MAX , -( ( i8 :: BITS + 1 ) as $t) ) == i8 :: MAX / 2 ) ;
379
+ sh_assign_test!( shl_assign( i16 :: MAX , -( ( i16 :: BITS + 1 ) as $t) ) == i16 :: MAX / 2 ) ;
380
+ sh_assign_test!( shl_assign( i32 :: MAX , -( ( i32 :: BITS + 1 ) as $t) ) == i32 :: MAX / 2 ) ;
381
+ sh_assign_test!( shl_assign( i64 :: MAX , -( ( i64 :: BITS + 1 ) as $t) ) == i64 :: MAX / 2 ) ;
382
+ sh_assign_test!( shl_assign( isize :: MAX , -( ( isize :: BITS + 1 ) as $t) ) == isize :: MAX / 2 ) ;
383
+
384
+ sh_assign_test!( shl_assign( u8 :: MAX , -( ( u8 :: BITS + 1 ) as $t) ) == u8 :: MAX / 2 ) ;
385
+ sh_assign_test!( shl_assign( u16 :: MAX , -( ( u16 :: BITS + 1 ) as $t) ) == u16 :: MAX / 2 ) ;
386
+ sh_assign_test!( shl_assign( u32 :: MAX , -( ( u32 :: BITS + 1 ) as $t) ) == u32 :: MAX / 2 ) ;
387
+ sh_assign_test!( shl_assign( u64 :: MAX , -( ( u64 :: BITS + 1 ) as $t) ) == u64 :: MAX / 2 ) ;
388
+ sh_assign_test!( shl_assign( usize :: MAX , -( ( usize :: BITS + 1 ) as $t) ) == usize :: MAX / 2 ) ;
389
+ }
390
+ }
391
+
392
+ sh_assign_test_all ! ( i8 ) ;
393
+ sh_assign_test_all ! ( u8 ) ;
394
+ sh_assign_test_all ! ( i16 ) ;
395
+ sh_assign_test_all ! ( u16 ) ;
396
+ sh_assign_test_all ! ( i32 ) ;
397
+ sh_assign_test_all ! ( u32 ) ;
398
+ sh_assign_test_all ! ( i64 ) ;
399
+ sh_assign_test_all ! ( u64 ) ;
400
+ sh_assign_test_all ! ( isize ) ;
401
+ sh_assign_test_all ! ( usize ) ;
402
+
403
+ sh_assign_test_negative_all ! ( i8 ) ;
404
+ sh_assign_test_negative_all ! ( i16 ) ;
405
+ sh_assign_test_negative_all ! ( i32 ) ;
406
+ sh_assign_test_negative_all ! ( i64 ) ;
407
+ sh_assign_test_negative_all ! ( isize ) ;
405
408
}
0 commit comments