1212//
1313// Test std::num::Wrapping<T> for {uN, iN, usize, isize}
1414
15- #![ feature( op_assign_traits, num_bits_bytes) ]
15+ #![ feature( op_assign_traits, num_bits_bytes, test) ]
16+
17+ extern crate test;
1618
1719use std:: num:: Wrapping ;
1820use std:: ops:: {
@@ -21,8 +23,7 @@ use std::ops::{
2123 Shl , Shr , ShlAssign , ShrAssign
2224} ;
2325use std:: { i8, i16, i32, i64, isize, u8, u16, u32, u64, usize} ;
24-
25- use std:: test:: black_box;
26+ use test:: black_box;
2627
2728fn main ( ) {
2829 test_ops ( ) ;
@@ -247,126 +248,79 @@ fn test_sh_ops() {
247248 assert_eq!( black_box( Wrapping ( $lhs) . $op( $rhs) ) , Wrapping ( $ans) ) ;
248249 }
249250 }
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 ) ;
370324}
371325
372326fn test_sh_op_assigns ( ) {
@@ -378,28 +332,77 @@ fn test_sh_op_assigns() {
378332 assert_eq!( black_box( tmp) , Wrapping ( $ans) ) ;
379333 } }
380334 }
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 ) ;
405408}
0 commit comments