@@ -2,10 +2,11 @@ use core::cmp::PartialEq;
22use core:: convert:: { TryFrom , TryInto } ;
33use core:: fmt:: Debug ;
44use core:: marker:: Copy ;
5- use core:: num:: TryFromIntError ;
5+ use core:: num:: { IntErrorKind , ParseIntError , TryFromIntError } ;
66use core:: ops:: { Add , Div , Mul , Rem , Sub } ;
77use core:: option:: Option ;
8- use core:: option:: Option :: { None , Some } ;
8+ use core:: option:: Option :: None ;
9+ use core:: str:: FromStr ;
910
1011#[ macro_use]
1112mod int_macros;
6768 assert_eq ! ( ten. rem( two) , ten % two) ;
6869}
6970
71+ /// Helper function for asserting number parsing returns a specific error
72+ fn test_parse < T > ( num_str : & str , expected : Result < T , IntErrorKind > )
73+ where
74+ T : FromStr < Err = ParseIntError > ,
75+ Result < T , IntErrorKind > : PartialEq + Debug ,
76+ {
77+ assert_eq ! ( num_str. parse:: <T >( ) . map_err( |e| e. kind( ) . clone( ) ) , expected)
78+ }
79+
7080#[ test]
7181fn from_str_issue7588 ( ) {
7282 let u: Option < u8 > = u8:: from_str_radix ( "1000" , 10 ) . ok ( ) ;
@@ -77,49 +87,52 @@ fn from_str_issue7588() {
7787
7888#[ test]
7989fn test_int_from_str_overflow ( ) {
80- assert_eq ! ( "127" . parse :: <i8 >( ) . ok ( ) , Some ( 127i8 ) ) ;
81- assert_eq ! ( "128" . parse :: <i8 >( ) . ok ( ) , None ) ;
90+ test_parse :: < i8 > ( "127" , Ok ( 127 ) ) ;
91+ test_parse :: < i8 > ( "128" , Err ( IntErrorKind :: PosOverflow ) ) ;
8292
83- assert_eq ! ( "-128" . parse :: <i8 >( ) . ok ( ) , Some ( - 128i8 ) ) ;
84- assert_eq ! ( "-129" . parse :: <i8 >( ) . ok ( ) , None ) ;
93+ test_parse :: < i8 > ( "-128" , Ok ( - 128 ) ) ;
94+ test_parse :: < i8 > ( "-129" , Err ( IntErrorKind :: NegOverflow ) ) ;
8595
86- assert_eq ! ( "32767" . parse :: <i16 >( ) . ok ( ) , Some ( 32_767i16 ) ) ;
87- assert_eq ! ( "32768" . parse :: <i16 >( ) . ok ( ) , None ) ;
96+ test_parse :: < i16 > ( "32767" , Ok ( 32_767 ) ) ;
97+ test_parse :: < i16 > ( "32768" , Err ( IntErrorKind :: PosOverflow ) ) ;
8898
89- assert_eq ! ( "-32768" . parse :: <i16 >( ) . ok ( ) , Some ( - 32_768i16 ) ) ;
90- assert_eq ! ( "-32769" . parse :: <i16 >( ) . ok ( ) , None ) ;
99+ test_parse :: < i16 > ( "-32768" , Ok ( - 32_768 ) ) ;
100+ test_parse :: < i16 > ( "-32769" , Err ( IntErrorKind :: NegOverflow ) ) ;
91101
92- assert_eq ! ( "2147483647" . parse :: <i32 >( ) . ok ( ) , Some ( 2_147_483_647i32 ) ) ;
93- assert_eq ! ( "2147483648" . parse :: <i32 >( ) . ok ( ) , None ) ;
102+ test_parse :: < i32 > ( "2147483647" , Ok ( 2_147_483_647 ) ) ;
103+ test_parse :: < i32 > ( "2147483648" , Err ( IntErrorKind :: PosOverflow ) ) ;
94104
95- assert_eq ! ( "-2147483648" . parse :: <i32 >( ) . ok ( ) , Some ( - 2_147_483_648i32 ) ) ;
96- assert_eq ! ( "-2147483649" . parse :: <i32 >( ) . ok ( ) , None ) ;
105+ test_parse :: < i32 > ( "-2147483648" , Ok ( - 2_147_483_648 ) ) ;
106+ test_parse :: < i32 > ( "-2147483649" , Err ( IntErrorKind :: NegOverflow ) ) ;
97107
98- assert_eq ! ( "9223372036854775807" . parse :: <i64 >( ) . ok ( ) , Some ( 9_223_372_036_854_775_807i64 ) ) ;
99- assert_eq ! ( "9223372036854775808" . parse :: <i64 >( ) . ok ( ) , None ) ;
108+ test_parse :: < i64 > ( "9223372036854775807" , Ok ( 9_223_372_036_854_775_807 ) ) ;
109+ test_parse :: < i64 > ( "9223372036854775808" , Err ( IntErrorKind :: PosOverflow ) ) ;
100110
101- assert_eq ! ( "-9223372036854775808" . parse :: <i64 >( ) . ok ( ) , Some ( - 9_223_372_036_854_775_808i64 ) ) ;
102- assert_eq ! ( "-9223372036854775809" . parse :: <i64 >( ) . ok ( ) , None ) ;
111+ test_parse :: < i64 > ( "-9223372036854775808" , Ok ( - 9_223_372_036_854_775_808 ) ) ;
112+ test_parse :: < i64 > ( "-9223372036854775809" , Err ( IntErrorKind :: NegOverflow ) ) ;
103113}
104114
105115#[ test]
106116fn test_leading_plus ( ) {
107- assert_eq ! ( "+127" . parse :: <u8 >( ) . ok ( ) , Some ( 127 ) ) ;
108- assert_eq ! ( "+9223372036854775807" . parse :: <i64 >( ) . ok ( ) , Some ( 9223372036854775807 ) ) ;
117+ test_parse :: < u8 > ( "+127" , Ok ( 127 ) ) ;
118+ test_parse :: < i64 > ( "+9223372036854775807" , Ok ( 9223372036854775807 ) ) ;
109119}
110120
111121#[ test]
112122fn test_invalid ( ) {
113- assert_eq ! ( "--129" . parse:: <i8 >( ) . ok( ) , None ) ;
114- assert_eq ! ( "++129" . parse:: <i8 >( ) . ok( ) , None ) ;
115- assert_eq ! ( "Съешь" . parse:: <u8 >( ) . ok( ) , None ) ;
123+ test_parse :: < i8 > ( "--129" , Err ( IntErrorKind :: InvalidDigit ) ) ;
124+ test_parse :: < i8 > ( "++129" , Err ( IntErrorKind :: InvalidDigit ) ) ;
125+ test_parse :: < u8 > ( "Съешь" , Err ( IntErrorKind :: InvalidDigit ) ) ;
126+ test_parse :: < u8 > ( "123Hello" , Err ( IntErrorKind :: InvalidDigit ) ) ;
127+ test_parse :: < i8 > ( "--" , Err ( IntErrorKind :: InvalidDigit ) ) ;
128+ test_parse :: < i8 > ( "-" , Err ( IntErrorKind :: InvalidDigit ) ) ;
129+ test_parse :: < i8 > ( "+" , Err ( IntErrorKind :: InvalidDigit ) ) ;
130+ test_parse :: < u8 > ( "-1" , Err ( IntErrorKind :: InvalidDigit ) ) ;
116131}
117132
118133#[ test]
119134fn test_empty ( ) {
120- assert_eq ! ( "-" . parse:: <i8 >( ) . ok( ) , None ) ;
121- assert_eq ! ( "+" . parse:: <i8 >( ) . ok( ) , None ) ;
122- assert_eq ! ( "" . parse:: <u8 >( ) . ok( ) , None ) ;
135+ test_parse :: < u8 > ( "" , Err ( IntErrorKind :: Empty ) ) ;
123136}
124137
125138#[ test]
0 commit comments