Hex Artifact Content
Not logged in

Artifact 8d90735b19c9aac59a11d88ad76dc75fa9a7cd2c:


0000: 2f 2f 20 43 6f 70 79 72 69 67 68 74 20 32 30 31  // Copyright 201
0010: 34 20 54 68 65 20 52 75 73 74 20 50 72 6f 6a 65  4 The Rust Proje
0020: 63 74 20 44 65 76 65 6c 6f 70 65 72 73 2e 20 53  ct Developers. S
0030: 65 65 20 74 68 65 20 43 4f 50 59 52 49 47 48 54  ee the COPYRIGHT
0040: 0a 2f 2f 20 66 69 6c 65 20 61 74 20 74 68 65 20  .// file at the 
0050: 74 6f 70 2d 6c 65 76 65 6c 20 64 69 72 65 63 74  top-level direct
0060: 6f 72 79 20 6f 66 20 74 68 69 73 20 64 69 73 74  ory of this dist
0070: 72 69 62 75 74 69 6f 6e 20 61 6e 64 20 61 74 0a  ribution and at.
0080: 2f 2f 20 68 74 74 70 3a 2f 2f 72 75 73 74 2d 6c  // http://rust-l
0090: 61 6e 67 2e 6f 72 67 2f 43 4f 50 59 52 49 47 48  ang.org/COPYRIGH
00a0: 54 2e 0a 2f 2f 0a 2f 2f 20 4c 69 63 65 6e 73 65  T..//.// License
00b0: 64 20 75 6e 64 65 72 20 74 68 65 20 41 70 61 63  d under the Apac
00c0: 68 65 20 4c 69 63 65 6e 73 65 2c 20 56 65 72 73  he License, Vers
00d0: 69 6f 6e 20 32 2e 30 20 3c 4c 49 43 45 4e 53 45  ion 2.0 <LICENSE
00e0: 2d 41 50 41 43 48 45 20 6f 72 0a 2f 2f 20 68 74  -APACHE or.// ht
00f0: 74 70 3a 2f 2f 77 77 77 2e 61 70 61 63 68 65 2e  tp://www.apache.
0100: 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 4c 49 43  org/licenses/LIC
0110: 45 4e 53 45 2d 32 2e 30 3e 20 6f 72 20 74 68 65  ENSE-2.0> or the
0120: 20 4d 49 54 20 6c 69 63 65 6e 73 65 0a 2f 2f 20   MIT license.// 
0130: 3c 4c 49 43 45 4e 53 45 2d 4d 49 54 20 6f 72 20  <LICENSE-MIT or 
0140: 68 74 74 70 3a 2f 2f 6f 70 65 6e 73 6f 75 72 63  http://opensourc
0150: 65 2e 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 4d  e.org/licenses/M
0160: 49 54 3e 2c 20 61 74 20 79 6f 75 72 0a 2f 2f 20  IT>, at your.// 
0170: 6f 70 74 69 6f 6e 2e 20 54 68 69 73 20 66 69 6c  option. This fil
0180: 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 6f 70  e may not be cop
0190: 69 65 64 2c 20 6d 6f 64 69 66 69 65 64 2c 20 6f  ied, modified, o
01a0: 72 20 64 69 73 74 72 69 62 75 74 65 64 0a 2f 2f  r distributed.//
01b0: 20 65 78 63 65 70 74 20 61 63 63 6f 72 64 69 6e   except accordin
01c0: 67 20 74 6f 20 74 68 6f 73 65 20 74 65 72 6d 73  g to those terms
01d0: 2e 0a 0a 6d 61 63 72 6f 5f 72 75 6c 65 73 21 20  ...macro_rules! 
01e0: 75 69 6e 74 5f 6d 6f 64 75 6c 65 20 7b 20 28 24  uint_module { ($
01f0: 54 3a 69 64 65 6e 74 2c 20 24 54 5f 69 3a 69 64  T:ident, $T_i:id
0200: 65 6e 74 29 20 3d 3e 20 28 0a 23 5b 63 66 67 28  ent) => (.#[cfg(
0210: 74 65 73 74 29 5d 0a 6d 6f 64 20 74 65 73 74 73  test)].mod tests
0220: 20 7b 0a 20 20 20 20 75 73 65 20 63 6f 72 65 3a   {.    use core:
0230: 3a 24 54 5f 69 3a 3a 2a 3b 0a 20 20 20 20 75 73  :$T_i::*;.    us
0240: 65 20 6e 75 6d 3b 0a 20 20 20 20 75 73 65 20 63  e num;.    use c
0250: 6f 72 65 3a 3a 6f 70 73 3a 3a 7b 42 69 74 4f 72  ore::ops::{BitOr
0260: 2c 20 42 69 74 41 6e 64 2c 20 42 69 74 58 6f 72  , BitAnd, BitXor
0270: 2c 20 53 68 6c 2c 20 53 68 72 2c 20 4e 6f 74 7d  , Shl, Shr, Not}
0280: 3b 0a 20 20 20 20 75 73 65 20 73 74 64 3a 3a 73  ;.    use std::s
0290: 74 72 3a 3a 46 72 6f 6d 53 74 72 3b 0a 20 20 20  tr::FromStr;.   
02a0: 20 75 73 65 20 73 74 64 3a 3a 6d 65 6d 3b 0a 0a   use std::mem;..
02b0: 20 20 20 20 23 5b 74 65 73 74 5d 0a 20 20 20 20      #[test].    
02c0: 66 6e 20 74 65 73 74 5f 6f 76 65 72 66 6c 6f 77  fn test_overflow
02d0: 73 28 29 20 7b 0a 20 20 20 20 20 20 20 20 61 73  s() {.        as
02e0: 73 65 72 74 21 28 4d 41 58 20 3e 20 30 29 3b 0a  sert!(MAX > 0);.
02f0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 21 28          assert!(
0300: 4d 49 4e 20 3c 3d 20 30 29 3b 0a 20 20 20 20 20  MIN <= 0);.     
0310: 20 20 20 61 73 73 65 72 74 21 28 28 4d 49 4e 20     assert!((MIN 
0320: 2b 20 4d 41 58 29 2e 77 72 61 70 70 69 6e 67 5f  + MAX).wrapping_
0330: 61 64 64 28 31 29 20 3d 3d 20 30 29 3b 0a 20 20  add(1) == 0);.  
0340: 20 20 7d 0a 0a 20 20 20 20 23 5b 74 65 73 74 5d    }..    #[test]
0350: 0a 20 20 20 20 66 6e 20 74 65 73 74 5f 6e 75 6d  .    fn test_num
0360: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 6e 75 6d  () {.        num
0370: 3a 3a 74 65 73 74 5f 6e 75 6d 28 31 30 20 61 73  ::test_num(10 as
0380: 20 24 54 2c 20 32 20 61 73 20 24 54 29 3b 0a 20   $T, 2 as $T);. 
0390: 20 20 20 7d 0a 0a 20 20 20 20 23 5b 74 65 73 74     }..    #[test
03a0: 5d 0a 20 20 20 20 66 6e 20 74 65 73 74 5f 62 69  ].    fn test_bi
03b0: 74 77 69 73 65 5f 6f 70 65 72 61 74 6f 72 73 28  twise_operators(
03c0: 29 20 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ) {.        asse
03d0: 72 74 21 28 30 62 31 31 31 30 20 61 73 20 24 54  rt!(0b1110 as $T
03e0: 20 3d 3d 20 28 30 62 31 31 30 30 20 61 73 20 24   == (0b1100 as $
03f0: 54 29 2e 62 69 74 6f 72 28 30 62 31 30 31 30 20  T).bitor(0b1010 
0400: 61 73 20 24 54 29 29 3b 0a 20 20 20 20 20 20 20  as $T));.       
0410: 20 61 73 73 65 72 74 21 28 30 62 31 30 30 30 20   assert!(0b1000 
0420: 61 73 20 24 54 20 3d 3d 20 28 30 62 31 31 30 30  as $T == (0b1100
0430: 20 61 73 20 24 54 29 2e 62 69 74 61 6e 64 28 30   as $T).bitand(0
0440: 62 31 30 31 30 20 61 73 20 24 54 29 29 3b 0a 20  b1010 as $T));. 
0450: 20 20 20 20 20 20 20 61 73 73 65 72 74 21 28 30         assert!(0
0460: 62 30 31 31 30 20 61 73 20 24 54 20 3d 3d 20 28  b0110 as $T == (
0470: 30 62 31 31 30 30 20 61 73 20 24 54 29 2e 62 69  0b1100 as $T).bi
0480: 74 78 6f 72 28 30 62 31 30 31 30 20 61 73 20 24  txor(0b1010 as $
0490: 54 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  T));.        ass
04a0: 65 72 74 21 28 30 62 31 31 31 30 20 61 73 20 24  ert!(0b1110 as $
04b0: 54 20 3d 3d 20 28 30 62 30 31 31 31 20 61 73 20  T == (0b0111 as 
04c0: 24 54 29 2e 73 68 6c 28 31 29 29 3b 0a 20 20 20  $T).shl(1));.   
04d0: 20 20 20 20 20 61 73 73 65 72 74 21 28 30 62 30       assert!(0b0
04e0: 31 31 31 20 61 73 20 24 54 20 3d 3d 20 28 30 62  111 as $T == (0b
04f0: 31 31 31 30 20 61 73 20 24 54 29 2e 73 68 72 28  1110 as $T).shr(
0500: 31 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  1));.        ass
0510: 65 72 74 21 28 4d 41 58 20 2d 20 28 30 62 31 30  ert!(MAX - (0b10
0520: 31 31 20 61 73 20 24 54 29 20 3d 3d 20 28 30 62  11 as $T) == (0b
0530: 31 30 31 31 20 61 73 20 24 54 29 2e 6e 6f 74 28  1011 as $T).not(
0540: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 63  ));.    }..    c
0550: 6f 6e 73 74 20 41 3a 20 24 54 20 3d 20 30 62 30  onst A: $T = 0b0
0560: 31 30 31 31 30 30 3b 0a 20 20 20 20 63 6f 6e 73  101100;.    cons
0570: 74 20 42 3a 20 24 54 20 3d 20 30 62 30 31 30 30  t B: $T = 0b0100
0580: 30 30 31 3b 0a 20 20 20 20 63 6f 6e 73 74 20 43  001;.    const C
0590: 3a 20 24 54 20 3d 20 30 62 31 31 31 31 30 30 31  : $T = 0b1111001
05a0: 3b 0a 0a 20 20 20 20 63 6f 6e 73 74 20 5f 30 3a  ;..    const _0:
05b0: 20 24 54 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e   $T = 0;.    con
05c0: 73 74 20 5f 31 3a 20 24 54 20 3d 20 21 30 3b 0a  st _1: $T = !0;.
05d0: 0a 20 20 20 20 23 5b 74 65 73 74 5d 0a 20 20 20  .    #[test].   
05e0: 20 66 6e 20 74 65 73 74 5f 63 6f 75 6e 74 5f 6f   fn test_count_o
05f0: 6e 65 73 28 29 20 7b 0a 20 20 20 20 20 20 20 20  nes() {.        
0600: 61 73 73 65 72 74 21 28 41 2e 63 6f 75 6e 74 5f  assert!(A.count_
0610: 6f 6e 65 73 28 29 20 3d 3d 20 33 29 3b 0a 20 20  ones() == 3);.  
0620: 20 20 20 20 20 20 61 73 73 65 72 74 21 28 42 2e        assert!(B.
0630: 63 6f 75 6e 74 5f 6f 6e 65 73 28 29 20 3d 3d 20  count_ones() == 
0640: 32 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  2);.        asse
0650: 72 74 21 28 43 2e 63 6f 75 6e 74 5f 6f 6e 65 73  rt!(C.count_ones
0660: 28 29 20 3d 3d 20 35 29 3b 0a 20 20 20 20 7d 0a  () == 5);.    }.
0670: 0a 20 20 20 20 23 5b 74 65 73 74 5d 0a 20 20 20  .    #[test].   
0680: 20 66 6e 20 74 65 73 74 5f 63 6f 75 6e 74 5f 7a   fn test_count_z
0690: 65 72 6f 73 28 29 20 7b 0a 20 20 20 20 20 20 20  eros() {.       
06a0: 20 6c 65 74 20 62 69 74 73 20 3d 20 6d 65 6d 3a   let bits = mem:
06b0: 3a 73 69 7a 65 5f 6f 66 3a 3a 3c 24 54 3e 28 29  :size_of::<$T>()
06c0: 20 2a 20 38 3b 0a 20 20 20 20 20 20 20 20 61 73   * 8;.        as
06d0: 73 65 72 74 21 28 41 2e 63 6f 75 6e 74 5f 7a 65  sert!(A.count_ze
06e0: 72 6f 73 28 29 20 3d 3d 20 62 69 74 73 20 61 73  ros() == bits as
06f0: 20 75 33 32 20 2d 20 33 29 3b 0a 20 20 20 20 20   u32 - 3);.     
0700: 20 20 20 61 73 73 65 72 74 21 28 42 2e 63 6f 75     assert!(B.cou
0710: 6e 74 5f 7a 65 72 6f 73 28 29 20 3d 3d 20 62 69  nt_zeros() == bi
0720: 74 73 20 61 73 20 75 33 32 20 2d 20 32 29 3b 0a  ts as u32 - 2);.
0730: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 21 28          assert!(
0740: 43 2e 63 6f 75 6e 74 5f 7a 65 72 6f 73 28 29 20  C.count_zeros() 
0750: 3d 3d 20 62 69 74 73 20 61 73 20 75 33 32 20 2d  == bits as u32 -
0760: 20 35 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   5);.    }..    
0770: 23 5b 74 65 73 74 5d 0a 20 20 20 20 66 6e 20 74  #[test].    fn t
0780: 65 73 74 5f 72 6f 74 61 74 65 28 29 20 7b 0a 20  est_rotate() {. 
0790: 20 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71         assert_eq
07a0: 21 28 41 2e 72 6f 74 61 74 65 5f 6c 65 66 74 28  !(A.rotate_left(
07b0: 36 29 2e 72 6f 74 61 74 65 5f 72 69 67 68 74 28  6).rotate_right(
07c0: 32 29 2e 72 6f 74 61 74 65 5f 72 69 67 68 74 28  2).rotate_right(
07d0: 34 29 2c 20 41 29 3b 0a 20 20 20 20 20 20 20 20  4), A);.        
07e0: 61 73 73 65 72 74 5f 65 71 21 28 42 2e 72 6f 74  assert_eq!(B.rot
07f0: 61 74 65 5f 6c 65 66 74 28 33 29 2e 72 6f 74 61  ate_left(3).rota
0800: 74 65 5f 6c 65 66 74 28 32 29 2e 72 6f 74 61 74  te_left(2).rotat
0810: 65 5f 72 69 67 68 74 28 35 29 2c 20 42 29 3b 0a  e_right(5), B);.
0820: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 5f 65          assert_e
0830: 71 21 28 43 2e 72 6f 74 61 74 65 5f 6c 65 66 74  q!(C.rotate_left
0840: 28 36 29 2e 72 6f 74 61 74 65 5f 72 69 67 68 74  (6).rotate_right
0850: 28 32 29 2e 72 6f 74 61 74 65 5f 72 69 67 68 74  (2).rotate_right
0860: 28 34 29 2c 20 43 29 3b 0a 0a 20 20 20 20 20 20  (4), C);..      
0870: 20 20 2f 2f 20 52 6f 74 61 74 69 6e 67 20 74 68    // Rotating th
0880: 65 73 65 20 73 68 6f 75 6c 64 20 6d 61 6b 65 20  ese should make 
0890: 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 0a 20 20  no difference.  
08a0: 20 20 20 20 20 20 2f 2f 0a 20 20 20 20 20 20 20        //.       
08b0: 20 2f 2f 20 57 65 20 74 65 73 74 20 75 73 69 6e   // We test usin
08c0: 67 20 31 32 34 20 62 69 74 73 20 62 65 63 61 75  g 124 bits becau
08d0: 73 65 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61  se to ensure tha
08e0: 74 20 6f 76 65 72 6c 6f 6e 67 20 62 69 74 20 73  t overlong bit s
08f0: 68 69 66 74 73 20 64 6f 0a 20 20 20 20 20 20 20  hifts do.       
0900: 20 2f 2f 20 6e 6f 74 20 63 61 75 73 65 20 75 6e   // not cause un
0910: 64 65 66 69 6e 65 64 20 62 65 68 61 76 69 6f 75  defined behaviou
0920: 72 2e 20 53 65 65 20 23 31 30 31 38 33 2e 0a 20  r. See #10183.. 
0930: 20 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71         assert_eq
0940: 21 28 5f 30 2e 72 6f 74 61 74 65 5f 6c 65 66 74  !(_0.rotate_left
0950: 28 31 32 34 29 2c 20 5f 30 29 3b 0a 20 20 20 20  (124), _0);.    
0960: 20 20 20 20 61 73 73 65 72 74 5f 65 71 21 28 5f      assert_eq!(_
0970: 31 2e 72 6f 74 61 74 65 5f 6c 65 66 74 28 31 32  1.rotate_left(12
0980: 34 29 2c 20 5f 31 29 3b 0a 20 20 20 20 20 20 20  4), _1);.       
0990: 20 61 73 73 65 72 74 5f 65 71 21 28 5f 30 2e 72   assert_eq!(_0.r
09a0: 6f 74 61 74 65 5f 72 69 67 68 74 28 31 32 34 29  otate_right(124)
09b0: 2c 20 5f 30 29 3b 0a 20 20 20 20 20 20 20 20 61  , _0);.        a
09c0: 73 73 65 72 74 5f 65 71 21 28 5f 31 2e 72 6f 74  ssert_eq!(_1.rot
09d0: 61 74 65 5f 72 69 67 68 74 28 31 32 34 29 2c 20  ate_right(124), 
09e0: 5f 31 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f  _1);..        //
09f0: 20 52 6f 74 61 74 69 6e 67 20 62 79 20 30 20 73   Rotating by 0 s
0a00: 68 6f 75 6c 64 20 68 61 76 65 20 6e 6f 20 65 66  hould have no ef
0a10: 66 65 63 74 0a 20 20 20 20 20 20 20 20 61 73 73  fect.        ass
0a20: 65 72 74 5f 65 71 21 28 41 2e 72 6f 74 61 74 65  ert_eq!(A.rotate
0a30: 5f 6c 65 66 74 28 30 29 2c 20 41 29 3b 0a 20 20  _left(0), A);.  
0a40: 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71 21        assert_eq!
0a50: 28 42 2e 72 6f 74 61 74 65 5f 6c 65 66 74 28 30  (B.rotate_left(0
0a60: 29 2c 20 42 29 3b 0a 20 20 20 20 20 20 20 20 61  ), B);.        a
0a70: 73 73 65 72 74 5f 65 71 21 28 43 2e 72 6f 74 61  ssert_eq!(C.rota
0a80: 74 65 5f 6c 65 66 74 28 30 29 2c 20 43 29 3b 0a  te_left(0), C);.
0a90: 20 20 20 20 20 20 20 20 2f 2f 20 52 6f 74 61 74          // Rotat
0aa0: 69 6e 67 20 62 79 20 61 20 6d 75 6c 74 69 70 6c  ing by a multipl
0ab0: 65 20 6f 66 20 77 6f 72 64 20 73 69 7a 65 20 73  e of word size s
0ac0: 68 6f 75 6c 64 20 61 6c 73 6f 20 68 61 76 65 20  hould also have 
0ad0: 6e 6f 20 65 66 66 65 63 74 0a 20 20 20 20 20 20  no effect.      
0ae0: 20 20 61 73 73 65 72 74 5f 65 71 21 28 41 2e 72    assert_eq!(A.r
0af0: 6f 74 61 74 65 5f 6c 65 66 74 28 36 34 29 2c 20  otate_left(64), 
0b00: 41 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  A);.        asse
0b10: 72 74 5f 65 71 21 28 42 2e 72 6f 74 61 74 65 5f  rt_eq!(B.rotate_
0b20: 6c 65 66 74 28 36 34 29 2c 20 42 29 3b 0a 20 20  left(64), B);.  
0b30: 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71 21        assert_eq!
0b40: 28 43 2e 72 6f 74 61 74 65 5f 6c 65 66 74 28 36  (C.rotate_left(6
0b50: 34 29 2c 20 43 29 3b 0a 20 20 20 20 7d 0a 0a 20  4), C);.    }.. 
0b60: 20 20 20 23 5b 74 65 73 74 5d 0a 20 20 20 20 66     #[test].    f
0b70: 6e 20 74 65 73 74 5f 73 77 61 70 5f 62 79 74 65  n test_swap_byte
0b80: 73 28 29 20 7b 0a 20 20 20 20 20 20 20 20 61 73  s() {.        as
0b90: 73 65 72 74 5f 65 71 21 28 41 2e 73 77 61 70 5f  sert_eq!(A.swap_
0ba0: 62 79 74 65 73 28 29 2e 73 77 61 70 5f 62 79 74  bytes().swap_byt
0bb0: 65 73 28 29 2c 20 41 29 3b 0a 20 20 20 20 20 20  es(), A);.      
0bc0: 20 20 61 73 73 65 72 74 5f 65 71 21 28 42 2e 73    assert_eq!(B.s
0bd0: 77 61 70 5f 62 79 74 65 73 28 29 2e 73 77 61 70  wap_bytes().swap
0be0: 5f 62 79 74 65 73 28 29 2c 20 42 29 3b 0a 20 20  _bytes(), B);.  
0bf0: 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71 21        assert_eq!
0c00: 28 43 2e 73 77 61 70 5f 62 79 74 65 73 28 29 2e  (C.swap_bytes().
0c10: 73 77 61 70 5f 62 79 74 65 73 28 29 2c 20 43 29  swap_bytes(), C)
0c20: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 53 77  ;..        // Sw
0c30: 61 70 70 69 6e 67 20 74 68 65 73 65 20 73 68 6f  apping these sho
0c40: 75 6c 64 20 6d 61 6b 65 20 6e 6f 20 64 69 66 66  uld make no diff
0c50: 65 72 65 6e 63 65 0a 20 20 20 20 20 20 20 20 61  erence.        a
0c60: 73 73 65 72 74 5f 65 71 21 28 5f 30 2e 73 77 61  ssert_eq!(_0.swa
0c70: 70 5f 62 79 74 65 73 28 29 2c 20 5f 30 29 3b 0a  p_bytes(), _0);.
0c80: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 5f 65          assert_e
0c90: 71 21 28 5f 31 2e 73 77 61 70 5f 62 79 74 65 73  q!(_1.swap_bytes
0ca0: 28 29 2c 20 5f 31 29 3b 0a 20 20 20 20 7d 0a 0a  (), _1);.    }..
0cb0: 20 20 20 20 23 5b 74 65 73 74 5d 0a 20 20 20 20      #[test].    
0cc0: 66 6e 20 74 65 73 74 5f 6c 65 28 29 20 7b 0a 20  fn test_le() {. 
0cd0: 20 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71         assert_eq
0ce0: 21 28 24 54 3a 3a 66 72 6f 6d 5f 6c 65 28 41 2e  !($T::from_le(A.
0cf0: 74 6f 5f 6c 65 28 29 29 2c 20 41 29 3b 0a 20 20  to_le()), A);.  
0d00: 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71 21        assert_eq!
0d10: 28 24 54 3a 3a 66 72 6f 6d 5f 6c 65 28 42 2e 74  ($T::from_le(B.t
0d20: 6f 5f 6c 65 28 29 29 2c 20 42 29 3b 0a 20 20 20  o_le()), B);.   
0d30: 20 20 20 20 20 61 73 73 65 72 74 5f 65 71 21 28       assert_eq!(
0d40: 24 54 3a 3a 66 72 6f 6d 5f 6c 65 28 43 2e 74 6f  $T::from_le(C.to
0d50: 5f 6c 65 28 29 29 2c 20 43 29 3b 0a 20 20 20 20  _le()), C);.    
0d60: 20 20 20 20 61 73 73 65 72 74 5f 65 71 21 28 24      assert_eq!($
0d70: 54 3a 3a 66 72 6f 6d 5f 6c 65 28 5f 30 29 2c 20  T::from_le(_0), 
0d80: 5f 30 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  _0);.        ass
0d90: 65 72 74 5f 65 71 21 28 24 54 3a 3a 66 72 6f 6d  ert_eq!($T::from
0da0: 5f 6c 65 28 5f 31 29 2c 20 5f 31 29 3b 0a 20 20  _le(_1), _1);.  
0db0: 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71 21        assert_eq!
0dc0: 28 5f 30 2e 74 6f 5f 6c 65 28 29 2c 20 5f 30 29  (_0.to_le(), _0)
0dd0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
0de0: 5f 65 71 21 28 5f 31 2e 74 6f 5f 6c 65 28 29 2c  _eq!(_1.to_le(),
0df0: 20 5f 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   _1);.    }..   
0e00: 20 23 5b 74 65 73 74 5d 0a 20 20 20 20 66 6e 20   #[test].    fn 
0e10: 74 65 73 74 5f 62 65 28 29 20 7b 0a 20 20 20 20  test_be() {.    
0e20: 20 20 20 20 61 73 73 65 72 74 5f 65 71 21 28 24      assert_eq!($
0e30: 54 3a 3a 66 72 6f 6d 5f 62 65 28 41 2e 74 6f 5f  T::from_be(A.to_
0e40: 62 65 28 29 29 2c 20 41 29 3b 0a 20 20 20 20 20  be()), A);.     
0e50: 20 20 20 61 73 73 65 72 74 5f 65 71 21 28 24 54     assert_eq!($T
0e60: 3a 3a 66 72 6f 6d 5f 62 65 28 42 2e 74 6f 5f 62  ::from_be(B.to_b
0e70: 65 28 29 29 2c 20 42 29 3b 0a 20 20 20 20 20 20  e()), B);.      
0e80: 20 20 61 73 73 65 72 74 5f 65 71 21 28 24 54 3a    assert_eq!($T:
0e90: 3a 66 72 6f 6d 5f 62 65 28 43 2e 74 6f 5f 62 65  :from_be(C.to_be
0ea0: 28 29 29 2c 20 43 29 3b 0a 20 20 20 20 20 20 20  ()), C);.       
0eb0: 20 61 73 73 65 72 74 5f 65 71 21 28 24 54 3a 3a   assert_eq!($T::
0ec0: 66 72 6f 6d 5f 62 65 28 5f 30 29 2c 20 5f 30 29  from_be(_0), _0)
0ed0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
0ee0: 5f 65 71 21 28 24 54 3a 3a 66 72 6f 6d 5f 62 65  _eq!($T::from_be
0ef0: 28 5f 31 29 2c 20 5f 31 29 3b 0a 20 20 20 20 20  (_1), _1);.     
0f00: 20 20 20 61 73 73 65 72 74 5f 65 71 21 28 5f 30     assert_eq!(_0
0f10: 2e 74 6f 5f 62 65 28 29 2c 20 5f 30 29 3b 0a 20  .to_be(), _0);. 
0f20: 20 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71         assert_eq
0f30: 21 28 5f 31 2e 74 6f 5f 62 65 28 29 2c 20 5f 31  !(_1.to_be(), _1
0f40: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 5b  );.    }..    #[
0f50: 74 65 73 74 5d 0a 20 20 20 20 66 6e 20 74 65 73  test].    fn tes
0f60: 74 5f 75 6e 73 69 67 6e 65 64 5f 63 68 65 63 6b  t_unsigned_check
0f70: 65 64 5f 64 69 76 28 29 20 7b 0a 20 20 20 20 20  ed_div() {.     
0f80: 20 20 20 61 73 73 65 72 74 21 28 28 31 30 20 61     assert!((10 a
0f90: 73 20 24 54 29 2e 63 68 65 63 6b 65 64 5f 64 69  s $T).checked_di
0fa0: 76 28 32 29 20 3d 3d 20 53 6f 6d 65 28 35 29 29  v(2) == Some(5))
0fb0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
0fc0: 21 28 28 35 20 61 73 20 24 54 29 2e 63 68 65 63  !((5 as $T).chec
0fd0: 6b 65 64 5f 64 69 76 28 30 29 20 3d 3d 20 4e 6f  ked_div(0) == No
0fe0: 6e 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ne);.    }..    
0ff0: 66 6e 20 66 72 6f 6d 5f 73 74 72 3c 54 3a 20 46  fn from_str<T: F
1000: 72 6f 6d 53 74 72 3e 28 74 3a 20 26 73 74 72 29  romStr>(t: &str)
1010: 20 2d 3e 20 4f 70 74 69 6f 6e 3c 54 3e 20 7b 0a   -> Option<T> {.
1020: 20 20 20 20 20 20 20 20 46 72 6f 6d 53 74 72 3a          FromStr:
1030: 3a 66 72 6f 6d 5f 73 74 72 28 74 29 2e 6f 6b 28  :from_str(t).ok(
1040: 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 5b 74  ).    }..    #[t
1050: 65 73 74 5d 0a 20 20 20 20 70 75 62 20 66 6e 20  est].    pub fn 
1060: 74 65 73 74 5f 66 72 6f 6d 5f 73 74 72 28 29 20  test_from_str() 
1070: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1080: 5f 65 71 21 28 66 72 6f 6d 5f 73 74 72 3a 3a 3c  _eq!(from_str::<
1090: 24 54 3e 28 22 30 22 29 2c 20 53 6f 6d 65 28 30  $T>("0"), Some(0
10a0: 20 61 73 20 24 54 29 29 3b 0a 20 20 20 20 20 20   as $T));.      
10b0: 20 20 61 73 73 65 72 74 5f 65 71 21 28 66 72 6f    assert_eq!(fro
10c0: 6d 5f 73 74 72 3a 3a 3c 24 54 3e 28 22 33 22 29  m_str::<$T>("3")
10d0: 2c 20 53 6f 6d 65 28 33 20 61 73 20 24 54 29 29  , Some(3 as $T))
10e0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
10f0: 5f 65 71 21 28 66 72 6f 6d 5f 73 74 72 3a 3a 3c  _eq!(from_str::<
1100: 24 54 3e 28 22 31 30 22 29 2c 20 53 6f 6d 65 28  $T>("10"), Some(
1110: 31 30 20 61 73 20 24 54 29 29 3b 0a 20 20 20 20  10 as $T));.    
1120: 20 20 20 20 61 73 73 65 72 74 5f 65 71 21 28 66      assert_eq!(f
1130: 72 6f 6d 5f 73 74 72 3a 3a 3c 75 33 32 3e 28 22  rom_str::<u32>("
1140: 31 32 33 34 35 36 37 38 39 22 29 2c 20 53 6f 6d  123456789"), Som
1150: 65 28 31 32 33 34 35 36 37 38 39 20 61 73 20 75  e(123456789 as u
1160: 33 32 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  32));.        as
1170: 73 65 72 74 5f 65 71 21 28 66 72 6f 6d 5f 73 74  sert_eq!(from_st
1180: 72 3a 3a 3c 24 54 3e 28 22 30 30 31 30 30 22 29  r::<$T>("00100")
1190: 2c 20 53 6f 6d 65 28 31 30 30 20 61 73 20 24 54  , Some(100 as $T
11a0: 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 61 73 73  ));..        ass
11b0: 65 72 74 5f 65 71 21 28 66 72 6f 6d 5f 73 74 72  ert_eq!(from_str
11c0: 3a 3a 3c 24 54 3e 28 22 22 29 2c 20 4e 6f 6e 65  ::<$T>(""), None
11d0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
11e0: 74 5f 65 71 21 28 66 72 6f 6d 5f 73 74 72 3a 3a  t_eq!(from_str::
11f0: 3c 24 54 3e 28 22 20 22 29 2c 20 4e 6f 6e 65 29  <$T>(" "), None)
1200: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1210: 5f 65 71 21 28 66 72 6f 6d 5f 73 74 72 3a 3a 3c  _eq!(from_str::<
1220: 24 54 3e 28 22 78 22 29 2c 20 4e 6f 6e 65 29 3b  $T>("x"), None);
1230: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 5b 74 65  .    }..    #[te
1240: 73 74 5d 0a 20 20 20 20 70 75 62 20 66 6e 20 74  st].    pub fn t
1250: 65 73 74 5f 70 61 72 73 65 5f 62 79 74 65 73 28  est_parse_bytes(
1260: 29 20 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ) {.        asse
1270: 72 74 5f 65 71 21 28 24 54 3a 3a 66 72 6f 6d 5f  rt_eq!($T::from_
1280: 73 74 72 5f 72 61 64 69 78 28 22 31 32 33 22 2c  str_radix("123",
1290: 20 31 30 29 2c 20 4f 6b 28 31 32 33 20 61 73 20   10), Ok(123 as 
12a0: 24 54 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  $T));.        as
12b0: 73 65 72 74 5f 65 71 21 28 24 54 3a 3a 66 72 6f  sert_eq!($T::fro
12c0: 6d 5f 73 74 72 5f 72 61 64 69 78 28 22 31 30 30  m_str_radix("100
12d0: 31 22 2c 20 32 29 2c 20 4f 6b 28 39 20 61 73 20  1", 2), Ok(9 as 
12e0: 24 54 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  $T));.        as
12f0: 73 65 72 74 5f 65 71 21 28 24 54 3a 3a 66 72 6f  sert_eq!($T::fro
1300: 6d 5f 73 74 72 5f 72 61 64 69 78 28 22 31 32 33  m_str_radix("123
1310: 22 2c 20 38 29 2c 20 4f 6b 28 38 33 20 61 73 20  ", 8), Ok(83 as 
1320: 24 54 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  $T));.        as
1330: 73 65 72 74 5f 65 71 21 28 75 31 36 3a 3a 66 72  sert_eq!(u16::fr
1340: 6f 6d 5f 73 74 72 5f 72 61 64 69 78 28 22 31 32  om_str_radix("12
1350: 33 22 2c 20 31 36 29 2c 20 4f 6b 28 32 39 31 20  3", 16), Ok(291 
1360: 61 73 20 75 31 36 29 29 3b 0a 20 20 20 20 20 20  as u16));.      
1370: 20 20 61 73 73 65 72 74 5f 65 71 21 28 75 31 36    assert_eq!(u16
1380: 3a 3a 66 72 6f 6d 5f 73 74 72 5f 72 61 64 69 78  ::from_str_radix
1390: 28 22 66 66 66 66 22 2c 20 31 36 29 2c 20 4f 6b  ("ffff", 16), Ok
13a0: 28 36 35 35 33 35 20 61 73 20 75 31 36 29 29 3b  (65535 as u16));
13b0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 5f  .        assert_
13c0: 65 71 21 28 24 54 3a 3a 66 72 6f 6d 5f 73 74 72  eq!($T::from_str
13d0: 5f 72 61 64 69 78 28 22 7a 22 2c 20 33 36 29 2c  _radix("z", 36),
13e0: 20 4f 6b 28 33 35 20 61 73 20 24 54 29 29 3b 0a   Ok(35 as $T));.
13f0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 5f  .        assert_
1400: 65 71 21 28 24 54 3a 3a 66 72 6f 6d 5f 73 74 72  eq!($T::from_str
1410: 5f 72 61 64 69 78 28 22 5a 22 2c 20 31 30 29 2e  _radix("Z", 10).
1420: 6f 6b 28 29 2c 20 4e 6f 6e 65 3a 3a 3c 24 54 3e  ok(), None::<$T>
1430: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1440: 74 5f 65 71 21 28 24 54 3a 3a 66 72 6f 6d 5f 73  t_eq!($T::from_s
1450: 74 72 5f 72 61 64 69 78 28 22 5f 22 2c 20 32 29  tr_radix("_", 2)
1460: 2e 6f 6b 28 29 2c 20 4e 6f 6e 65 3a 3a 3c 24 54  .ok(), None::<$T
1470: 3e 29 3b 0a 20 20 20 20 7d 0a 7d 0a 29 7d 0a     >);.    }.}.)}.