1+ //@ run-pass 
2+ 
3+ #![ feature( const_cmp,  f16,  f128) ]  
4+ 
5+ use  std:: cmp:: Ordering ; 
6+ 
7+ fn  main ( )  { 
8+     // Test f32::total_cmp in const context 
9+     const  F32_EQUAL :  Ordering  = ( 1.0_f32 ) . total_cmp ( & 1.0_f32 ) ; 
10+     assert_eq ! ( F32_EQUAL ,  Ordering :: Equal ) ; 
11+ 
12+     const  F32_LESS :  Ordering  = ( 1.0_f32 ) . total_cmp ( & 2.0_f32 ) ; 
13+     assert_eq ! ( F32_LESS ,  Ordering :: Less ) ; 
14+ 
15+     const  F32_GREATER :  Ordering  = ( 2.0_f32 ) . total_cmp ( & 1.0_f32 ) ; 
16+     assert_eq ! ( F32_GREATER ,  Ordering :: Greater ) ; 
17+ 
18+     // Test special values for f32 
19+     const  F32_NEG_ZERO_VS_POS_ZERO :  Ordering  = ( -0.0_f32 ) . total_cmp ( & 0.0_f32 ) ; 
20+     assert_eq ! ( F32_NEG_ZERO_VS_POS_ZERO ,  Ordering :: Less ) ; 
21+ 
22+     const  F32_NAN_VS_FINITE :  Ordering  = f32:: NAN . total_cmp ( & 1.0_f32 ) ; 
23+     assert_eq ! ( F32_NAN_VS_FINITE ,  Ordering :: Greater ) ; 
24+ 
25+     const  F32_INFINITY_VS_FINITE :  Ordering  = f32:: INFINITY . total_cmp ( & 1.0_f32 ) ; 
26+     assert_eq ! ( F32_INFINITY_VS_FINITE ,  Ordering :: Greater ) ; 
27+ 
28+     const  F32_NEG_INFINITY_VS_FINITE :  Ordering  = f32:: NEG_INFINITY . total_cmp ( & 1.0_f32 ) ; 
29+     assert_eq ! ( F32_NEG_INFINITY_VS_FINITE ,  Ordering :: Less ) ; 
30+ 
31+     // Test f64::total_cmp in const context 
32+     const  F64_EQUAL :  Ordering  = ( 1.0_f64 ) . total_cmp ( & 1.0_f64 ) ; 
33+     assert_eq ! ( F64_EQUAL ,  Ordering :: Equal ) ; 
34+ 
35+     const  F64_LESS :  Ordering  = ( 1.0_f64 ) . total_cmp ( & 2.0_f64 ) ; 
36+     assert_eq ! ( F64_LESS ,  Ordering :: Less ) ; 
37+ 
38+     const  F64_GREATER :  Ordering  = ( 2.0_f64 ) . total_cmp ( & 1.0_f64 ) ; 
39+     assert_eq ! ( F64_GREATER ,  Ordering :: Greater ) ; 
40+ 
41+     // Test special values for f64 
42+     const  F64_NEG_ZERO_VS_POS_ZERO :  Ordering  = ( -0.0_f64 ) . total_cmp ( & 0.0_f64 ) ; 
43+     assert_eq ! ( F64_NEG_ZERO_VS_POS_ZERO ,  Ordering :: Less ) ; 
44+ 
45+     const  F64_NAN_VS_FINITE :  Ordering  = f64:: NAN . total_cmp ( & 1.0_f64 ) ; 
46+     assert_eq ! ( F64_NAN_VS_FINITE ,  Ordering :: Greater ) ; 
47+ 
48+     const  F64_INFINITY_VS_FINITE :  Ordering  = f64:: INFINITY . total_cmp ( & 1.0_f64 ) ; 
49+     assert_eq ! ( F64_INFINITY_VS_FINITE ,  Ordering :: Greater ) ; 
50+ 
51+     const  F64_NEG_INFINITY_VS_FINITE :  Ordering  = f64:: NEG_INFINITY . total_cmp ( & 1.0_f64 ) ; 
52+     assert_eq ! ( F64_NEG_INFINITY_VS_FINITE ,  Ordering :: Less ) ; 
53+ 
54+     // Test edge cases: comparing NaNs with each other 
55+     const  F32_NAN_VS_NAN :  Ordering  = f32:: NAN . total_cmp ( & f32:: NAN ) ; 
56+     assert_eq ! ( F32_NAN_VS_NAN ,  Ordering :: Equal ) ; 
57+ 
58+     const  F64_NAN_VS_NAN :  Ordering  = f64:: NAN . total_cmp ( & f64:: NAN ) ; 
59+     assert_eq ! ( F64_NAN_VS_NAN ,  Ordering :: Equal ) ; 
60+ 
61+     // Test subnormal numbers 
62+     const  F32_SUBNORMAL_CMP :  Ordering  = f32:: MIN_POSITIVE . total_cmp ( & ( f32:: MIN_POSITIVE  / 2.0 ) ) ; 
63+     assert_eq ! ( F32_SUBNORMAL_CMP ,  Ordering :: Greater ) ; 
64+ 
65+     const  F64_SUBNORMAL_CMP :  Ordering  = f64:: MIN_POSITIVE . total_cmp ( & ( f64:: MIN_POSITIVE  / 2.0 ) ) ; 
66+     assert_eq ! ( F64_SUBNORMAL_CMP ,  Ordering :: Greater ) ; 
67+ 
68+     // Test f16::total_cmp in const context 
69+     const  F16_EQUAL :  Ordering  = ( 1.0_f16 ) . total_cmp ( & 1.0_f16 ) ; 
70+     assert_eq ! ( F16_EQUAL ,  Ordering :: Equal ) ; 
71+ 
72+     const  F16_LESS :  Ordering  = ( 1.0_f16 ) . total_cmp ( & 2.0_f16 ) ; 
73+     assert_eq ! ( F16_LESS ,  Ordering :: Less ) ; 
74+ 
75+     const  F16_GREATER :  Ordering  = ( 2.0_f16 ) . total_cmp ( & 1.0_f16 ) ; 
76+     assert_eq ! ( F16_GREATER ,  Ordering :: Greater ) ; 
77+ 
78+     // Test special values for f16 
79+     const  F16_NEG_ZERO_VS_POS_ZERO :  Ordering  = ( -0.0_f16 ) . total_cmp ( & 0.0_f16 ) ; 
80+     assert_eq ! ( F16_NEG_ZERO_VS_POS_ZERO ,  Ordering :: Less ) ; 
81+ 
82+     const  F16_NAN_VS_FINITE :  Ordering  = f16:: NAN . total_cmp ( & 1.0_f16 ) ; 
83+     assert_eq ! ( F16_NAN_VS_FINITE ,  Ordering :: Greater ) ; 
84+ 
85+     const  F16_INFINITY_VS_FINITE :  Ordering  = f16:: INFINITY . total_cmp ( & 1.0_f16 ) ; 
86+     assert_eq ! ( F16_INFINITY_VS_FINITE ,  Ordering :: Greater ) ; 
87+ 
88+     const  F16_NAN_VS_NAN :  Ordering  = f16:: NAN . total_cmp ( & f16:: NAN ) ; 
89+     assert_eq ! ( F16_NAN_VS_NAN ,  Ordering :: Equal ) ; 
90+ 
91+     // Test f128::total_cmp in const context 
92+     const  F128_EQUAL :  Ordering  = ( 1.0_f128 ) . total_cmp ( & 1.0_f128 ) ; 
93+     assert_eq ! ( F128_EQUAL ,  Ordering :: Equal ) ; 
94+ 
95+     const  F128_LESS :  Ordering  = ( 1.0_f128 ) . total_cmp ( & 2.0_f128 ) ; 
96+     assert_eq ! ( F128_LESS ,  Ordering :: Less ) ; 
97+ 
98+     const  F128_GREATER :  Ordering  = ( 2.0_f128 ) . total_cmp ( & 1.0_f128 ) ; 
99+     assert_eq ! ( F128_GREATER ,  Ordering :: Greater ) ; 
100+ 
101+     // Test special values for f128 
102+     const  F128_NEG_ZERO_VS_POS_ZERO :  Ordering  = ( -0.0_f128 ) . total_cmp ( & 0.0_f128 ) ; 
103+     assert_eq ! ( F128_NEG_ZERO_VS_POS_ZERO ,  Ordering :: Less ) ; 
104+ 
105+     const  F128_NAN_VS_FINITE :  Ordering  = f128:: NAN . total_cmp ( & 1.0_f128 ) ; 
106+     assert_eq ! ( F128_NAN_VS_FINITE ,  Ordering :: Greater ) ; 
107+ 
108+     const  F128_INFINITY_VS_FINITE :  Ordering  = f128:: INFINITY . total_cmp ( & 1.0_f128 ) ; 
109+     assert_eq ! ( F128_INFINITY_VS_FINITE ,  Ordering :: Greater ) ; 
110+ 
111+     const  F128_NAN_VS_NAN :  Ordering  = f128:: NAN . total_cmp ( & f128:: NAN ) ; 
112+     assert_eq ! ( F128_NAN_VS_NAN ,  Ordering :: Equal ) ; 
113+ } 
0 commit comments