@@ -1751,6 +1751,72 @@ mod tests {
1751
1751
assert_pow ! ( ( 8 , 3 ) => 512 ) ;
1752
1752
assert_pow ! ( ( 2u64 , 50 ) => 1125899906842624 ) ;
1753
1753
}
1754
+
1755
+ #[ test]
1756
+ fn test_uint_to_str_overflow ( ) {
1757
+ let mut u8_val: u8 = 255_u8 ;
1758
+ assert_eq ! ( u8_val. to_string( ) , "255" ) ;
1759
+
1760
+ u8_val += 1 as u8 ;
1761
+ assert_eq ! ( u8_val. to_string( ) , "0" ) ;
1762
+
1763
+ let mut u16_val: u16 = 65_535_u16 ;
1764
+ assert_eq ! ( u16_val. to_string( ) , "65535" ) ;
1765
+
1766
+ u16_val += 1 as u16 ;
1767
+ assert_eq ! ( u16_val. to_string( ) , "0" ) ;
1768
+
1769
+ let mut u32_val: u32 = 4_294_967_295_u32 ;
1770
+ assert_eq ! ( u32_val. to_string( ) , "4294967295" ) ;
1771
+
1772
+ u32_val += 1 as u32 ;
1773
+ assert_eq ! ( u32_val. to_string( ) , "0" ) ;
1774
+
1775
+ let mut u64_val: u64 = 18_446_744_073_709_551_615_u64 ;
1776
+ assert_eq ! ( u64_val. to_string( ) , "18446744073709551615" ) ;
1777
+
1778
+ u64_val += 1 as u64 ;
1779
+ assert_eq ! ( u64_val. to_string( ) , "0" ) ;
1780
+ }
1781
+
1782
+ fn from_str < T : :: str:: FromStr > ( t : & str ) -> Option < T > {
1783
+ :: str:: FromStr :: from_str ( t) . ok ( )
1784
+ }
1785
+
1786
+ #[ test]
1787
+ fn test_uint_from_str_overflow ( ) {
1788
+ let mut u8_val: u8 = 255_u8 ;
1789
+ assert_eq ! ( from_str:: <u8 >( "255" ) , Some ( u8_val) ) ;
1790
+ assert_eq ! ( from_str:: <u8 >( "256" ) , None ) ;
1791
+
1792
+ u8_val += 1 as u8 ;
1793
+ assert_eq ! ( from_str:: <u8 >( "0" ) , Some ( u8_val) ) ;
1794
+ assert_eq ! ( from_str:: <u8 >( "-1" ) , None ) ;
1795
+
1796
+ let mut u16_val: u16 = 65_535_u16 ;
1797
+ assert_eq ! ( from_str:: <u16 >( "65535" ) , Some ( u16_val) ) ;
1798
+ assert_eq ! ( from_str:: <u16 >( "65536" ) , None ) ;
1799
+
1800
+ u16_val += 1 as u16 ;
1801
+ assert_eq ! ( from_str:: <u16 >( "0" ) , Some ( u16_val) ) ;
1802
+ assert_eq ! ( from_str:: <u16 >( "-1" ) , None ) ;
1803
+
1804
+ let mut u32_val: u32 = 4_294_967_295_u32 ;
1805
+ assert_eq ! ( from_str:: <u32 >( "4294967295" ) , Some ( u32_val) ) ;
1806
+ assert_eq ! ( from_str:: <u32 >( "4294967296" ) , None ) ;
1807
+
1808
+ u32_val += 1 as u32 ;
1809
+ assert_eq ! ( from_str:: <u32 >( "0" ) , Some ( u32_val) ) ;
1810
+ assert_eq ! ( from_str:: <u32 >( "-1" ) , None ) ;
1811
+
1812
+ let mut u64_val: u64 = 18_446_744_073_709_551_615_u64 ;
1813
+ assert_eq ! ( from_str:: <u64 >( "18446744073709551615" ) , Some ( u64_val) ) ;
1814
+ assert_eq ! ( from_str:: <u64 >( "18446744073709551616" ) , None ) ;
1815
+
1816
+ u64_val += 1 as u64 ;
1817
+ assert_eq ! ( from_str:: <u64 >( "0" ) , Some ( u64_val) ) ;
1818
+ assert_eq ! ( from_str:: <u64 >( "-1" ) , None ) ;
1819
+ }
1754
1820
}
1755
1821
1756
1822
0 commit comments