@@ -58,6 +58,29 @@ mod unit {
5858 assert_eq ! ( number. as_i32( ) , Some ( 40_000 ) ) ;
5959 }
6060
61+ #[ test]
62+ fn as_fixed_point ( ) {
63+ let number = JsonValue :: from ( 3.14 ) ;
64+
65+ assert_eq ! ( number. as_fixed_point_u64( 4 ) . unwrap( ) , 31400_u64 ) ;
66+ assert_eq ! ( number. as_fixed_point_u64( 2 ) . unwrap( ) , 314_u64 ) ;
67+ assert_eq ! ( number. as_fixed_point_u64( 0 ) . unwrap( ) , 3_u64 ) ;
68+
69+ assert_eq ! ( number. as_fixed_point_i64( 4 ) . unwrap( ) , 31400_i64 ) ;
70+ assert_eq ! ( number. as_fixed_point_i64( 2 ) . unwrap( ) , 314_i64 ) ;
71+ assert_eq ! ( number. as_fixed_point_i64( 0 ) . unwrap( ) , 3_i64 ) ;
72+
73+ let number = JsonValue :: from ( -3.14 ) ;
74+
75+ assert_eq ! ( number. as_fixed_point_u64( 4 ) , None ) ;
76+ assert_eq ! ( number. as_fixed_point_u64( 2 ) , None ) ;
77+ assert_eq ! ( number. as_fixed_point_u64( 0 ) , None ) ;
78+
79+ assert_eq ! ( number. as_fixed_point_i64( 4 ) . unwrap( ) , -31400_i64 ) ;
80+ assert_eq ! ( number. as_fixed_point_i64( 2 ) . unwrap( ) , -314_i64 ) ;
81+ assert_eq ! ( number. as_fixed_point_i64( 0 ) . unwrap( ) , -3_i64 ) ;
82+ }
83+
6184 #[ test]
6285 fn is_as_boolean ( ) {
6386 let boolean = JsonValue :: Boolean ( true ) ;
@@ -1261,6 +1284,30 @@ mod json_checker_pass {
12611284
12621285mod number {
12631286 use super :: json:: number:: Number ;
1287+ use std:: f64;
1288+
1289+ #[ test]
1290+ fn is_nan ( ) {
1291+ assert ! ( Number :: from( f64 :: NAN ) . is_nan( ) ) ;
1292+ }
1293+
1294+ #[ test]
1295+ fn is_zero ( ) {
1296+ assert ! ( Number :: from( 0 ) . is_zero( ) ) ;
1297+ assert ! ( Number :: from_parts( true , 0 , 0 ) . is_zero( ) ) ;
1298+ assert ! ( Number :: from_parts( true , 0 , 100 ) . is_zero( ) ) ;
1299+ assert ! ( Number :: from_parts( true , 0 , -100 ) . is_zero( ) ) ;
1300+ assert ! ( Number :: from_parts( false , 0 , 0 ) . is_zero( ) ) ;
1301+ assert ! ( Number :: from_parts( false , 0 , 100 ) . is_zero( ) ) ;
1302+ assert ! ( Number :: from_parts( false , 0 , -100 ) . is_zero( ) ) ;
1303+ assert ! ( !Number :: from( f64 :: NAN ) . is_zero( ) ) ;
1304+ }
1305+
1306+ #[ test]
1307+ fn is_empty ( ) {
1308+ assert ! ( Number :: from( 0 ) . is_empty( ) ) ;
1309+ assert ! ( Number :: from( f64 :: NAN ) . is_empty( ) ) ;
1310+ }
12641311
12651312 #[ test]
12661313 fn eq ( ) {
@@ -1328,4 +1375,32 @@ mod number {
13281375
13291376 assert_eq ! ( f64 :: from( number) , 2.225073858507201e-308 ) ;
13301377 }
1378+
1379+ #[ test]
1380+ fn as_fixed_point_u64 ( ) {
1381+ assert_eq ! ( Number :: from( 1.2345 ) . as_fixed_point_u64( 4 ) . unwrap( ) , 12345 ) ;
1382+ assert_eq ! ( Number :: from( 1.2345 ) . as_fixed_point_u64( 2 ) . unwrap( ) , 123 ) ;
1383+ assert_eq ! ( Number :: from( 1.2345 ) . as_fixed_point_u64( 0 ) . unwrap( ) , 1 ) ;
1384+
1385+ assert_eq ! ( Number :: from( 5 ) . as_fixed_point_u64( 0 ) . unwrap( ) , 5 ) ;
1386+ assert_eq ! ( Number :: from( 5 ) . as_fixed_point_u64( 2 ) . unwrap( ) , 500 ) ;
1387+ assert_eq ! ( Number :: from( 5 ) . as_fixed_point_u64( 4 ) . unwrap( ) , 50000 ) ;
1388+
1389+ assert_eq ! ( Number :: from( -1 ) . as_fixed_point_u64( 0 ) , None ) ;
1390+ assert_eq ! ( Number :: from( f64 :: NAN ) . as_fixed_point_u64( 0 ) , None ) ;
1391+ }
1392+
1393+ #[ test]
1394+ fn as_fixed_point_i64 ( ) {
1395+ assert_eq ! ( Number :: from( -1.2345 ) . as_fixed_point_i64( 4 ) . unwrap( ) , -12345 ) ;
1396+ assert_eq ! ( Number :: from( -1.2345 ) . as_fixed_point_i64( 2 ) . unwrap( ) , -123 ) ;
1397+ assert_eq ! ( Number :: from( -1.2345 ) . as_fixed_point_i64( 0 ) . unwrap( ) , -1 ) ;
1398+
1399+ assert_eq ! ( Number :: from( -5 ) . as_fixed_point_i64( 0 ) . unwrap( ) , -5 ) ;
1400+ assert_eq ! ( Number :: from( -5 ) . as_fixed_point_i64( 2 ) . unwrap( ) , -500 ) ;
1401+ assert_eq ! ( Number :: from( -5 ) . as_fixed_point_i64( 4 ) . unwrap( ) , -50000 ) ;
1402+
1403+ assert_eq ! ( Number :: from( -1 ) . as_fixed_point_i64( 0 ) , Some ( -1 ) ) ;
1404+ assert_eq ! ( Number :: from( f64 :: NAN ) . as_fixed_point_i64( 0 ) , None ) ;
1405+ }
13311406}
0 commit comments