Skip to content

Commit 7f77dfd

Browse files
authored
Rollup merge of #144923 - rocurley:float_tests_refactor_3, r=tgross35
Move several more float tests to floats/mod.rs This PR moves several tests to `floats/mod.rs`, as discussed in #141726. The tests moved are: * `test_abs` * `test_signum` * `test_is_sign_positive` * `test_is_sign_negative` * `test_next_up` * `test_next_down` * `test_sqrt_domain` * `test_clamp_min_greater_than_max` * `test_clamp_min_is_nan` * `test_clamp_max_is_nan` * `test_total_cmp` This covers all the "easy" tests: the ones that don't have a lot of precision-specific constants. It's not clear to me that it's worth migrating the others. Each test is its own commit (with the exception of the clamp tests), so it may be easiest to review each commit individually. r? tgross35
2 parents e63e769 + 57cf40c commit 7f77dfd

File tree

5 files changed

+424
-1213
lines changed

5 files changed

+424
-1213
lines changed

library/coretests/tests/floats/f128.rs

Lines changed: 0 additions & 290 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,6 @@ const TOL: f128 = 1e-12;
1515
/// signs.
1616
const TOL_PRECISE: f128 = 1e-28;
1717

18-
/// Smallest number
19-
const TINY_BITS: u128 = 0x1;
20-
21-
/// Next smallest number
22-
const TINY_UP_BITS: u128 = 0x2;
23-
24-
/// Exponent = 0b11...10, Sifnificand 0b1111..10. Min val > 0
25-
const MAX_DOWN_BITS: u128 = 0x7ffefffffffffffffffffffffffffffe;
26-
27-
/// Zeroed exponent, full significant
28-
const LARGEST_SUBNORMAL_BITS: u128 = 0x0000ffffffffffffffffffffffffffff;
29-
30-
/// Exponent = 0b1, zeroed significand
31-
const SMALLEST_NORMAL_BITS: u128 = 0x00010000000000000000000000000000;
32-
3318
/// First pattern over the mantissa
3419
const NAN_MASK1: u128 = 0x0000aaaaaaaaaaaaaaaaaaaaaaaaaaaa;
3520

@@ -39,106 +24,6 @@ const NAN_MASK2: u128 = 0x00005555555555555555555555555555;
3924
// FIXME(f16_f128,miri): many of these have to be disabled since miri does not yet support
4025
// the intrinsics.
4126

42-
#[test]
43-
#[cfg(any(miri, target_has_reliable_f128_math))]
44-
fn test_abs() {
45-
assert_biteq!(f128::INFINITY.abs(), f128::INFINITY);
46-
assert_biteq!(1f128.abs(), 1f128);
47-
assert_biteq!(0f128.abs(), 0f128);
48-
assert_biteq!((-0f128).abs(), 0f128);
49-
assert_biteq!((-1f128).abs(), 1f128);
50-
assert_biteq!(f128::NEG_INFINITY.abs(), f128::INFINITY);
51-
assert_biteq!((1f128 / f128::NEG_INFINITY).abs(), 0f128);
52-
assert!(f128::NAN.abs().is_nan());
53-
}
54-
55-
#[test]
56-
fn test_is_sign_positive() {
57-
assert!(f128::INFINITY.is_sign_positive());
58-
assert!(1f128.is_sign_positive());
59-
assert!(0f128.is_sign_positive());
60-
assert!(!(-0f128).is_sign_positive());
61-
assert!(!(-1f128).is_sign_positive());
62-
assert!(!f128::NEG_INFINITY.is_sign_positive());
63-
assert!(!(1f128 / f128::NEG_INFINITY).is_sign_positive());
64-
assert!(f128::NAN.is_sign_positive());
65-
assert!(!(-f128::NAN).is_sign_positive());
66-
}
67-
68-
#[test]
69-
fn test_is_sign_negative() {
70-
assert!(!f128::INFINITY.is_sign_negative());
71-
assert!(!1f128.is_sign_negative());
72-
assert!(!0f128.is_sign_negative());
73-
assert!((-0f128).is_sign_negative());
74-
assert!((-1f128).is_sign_negative());
75-
assert!(f128::NEG_INFINITY.is_sign_negative());
76-
assert!((1f128 / f128::NEG_INFINITY).is_sign_negative());
77-
assert!(!f128::NAN.is_sign_negative());
78-
assert!((-f128::NAN).is_sign_negative());
79-
}
80-
81-
#[test]
82-
fn test_next_up() {
83-
let tiny = f128::from_bits(TINY_BITS);
84-
let tiny_up = f128::from_bits(TINY_UP_BITS);
85-
let max_down = f128::from_bits(MAX_DOWN_BITS);
86-
let largest_subnormal = f128::from_bits(LARGEST_SUBNORMAL_BITS);
87-
let smallest_normal = f128::from_bits(SMALLEST_NORMAL_BITS);
88-
assert_biteq!(f128::NEG_INFINITY.next_up(), f128::MIN);
89-
assert_biteq!(f128::MIN.next_up(), -max_down);
90-
assert_biteq!((-1.0 - f128::EPSILON).next_up(), -1.0f128);
91-
assert_biteq!((-smallest_normal).next_up(), -largest_subnormal);
92-
assert_biteq!((-tiny_up).next_up(), -tiny);
93-
assert_biteq!((-tiny).next_up(), -0.0f128);
94-
assert_biteq!((-0.0f128).next_up(), tiny);
95-
assert_biteq!(0.0f128.next_up(), tiny);
96-
assert_biteq!(tiny.next_up(), tiny_up);
97-
assert_biteq!(largest_subnormal.next_up(), smallest_normal);
98-
assert_biteq!(1.0f128.next_up(), 1.0 + f128::EPSILON);
99-
assert_biteq!(f128::MAX.next_up(), f128::INFINITY);
100-
assert_biteq!(f128::INFINITY.next_up(), f128::INFINITY);
101-
102-
// Check that NaNs roundtrip.
103-
let nan0 = f128::NAN;
104-
let nan1 = f128::from_bits(f128::NAN.to_bits() ^ 0x002a_aaaa);
105-
let nan2 = f128::from_bits(f128::NAN.to_bits() ^ 0x0055_5555);
106-
assert_biteq!(nan0.next_up(), nan0);
107-
assert_biteq!(nan1.next_up(), nan1);
108-
assert_biteq!(nan2.next_up(), nan2);
109-
}
110-
111-
#[test]
112-
fn test_next_down() {
113-
let tiny = f128::from_bits(TINY_BITS);
114-
let tiny_up = f128::from_bits(TINY_UP_BITS);
115-
let max_down = f128::from_bits(MAX_DOWN_BITS);
116-
let largest_subnormal = f128::from_bits(LARGEST_SUBNORMAL_BITS);
117-
let smallest_normal = f128::from_bits(SMALLEST_NORMAL_BITS);
118-
assert_biteq!(f128::NEG_INFINITY.next_down(), f128::NEG_INFINITY);
119-
assert_biteq!(f128::MIN.next_down(), f128::NEG_INFINITY);
120-
assert_biteq!((-max_down).next_down(), f128::MIN);
121-
assert_biteq!((-1.0f128).next_down(), -1.0 - f128::EPSILON);
122-
assert_biteq!((-largest_subnormal).next_down(), -smallest_normal);
123-
assert_biteq!((-tiny).next_down(), -tiny_up);
124-
assert_biteq!((-0.0f128).next_down(), -tiny);
125-
assert_biteq!((0.0f128).next_down(), -tiny);
126-
assert_biteq!(tiny.next_down(), 0.0f128);
127-
assert_biteq!(tiny_up.next_down(), tiny);
128-
assert_biteq!(smallest_normal.next_down(), largest_subnormal);
129-
assert_biteq!((1.0 + f128::EPSILON).next_down(), 1.0f128);
130-
assert_biteq!(f128::MAX.next_down(), max_down);
131-
assert_biteq!(f128::INFINITY.next_down(), f128::MAX);
132-
133-
// Check that NaNs roundtrip.
134-
let nan0 = f128::NAN;
135-
let nan1 = f128::from_bits(f128::NAN.to_bits() ^ 0x002a_aaaa);
136-
let nan2 = f128::from_bits(f128::NAN.to_bits() ^ 0x0055_5555);
137-
assert_biteq!(nan0.next_down(), nan0);
138-
assert_biteq!(nan1.next_down(), nan1);
139-
assert_biteq!(nan2.next_down(), nan2);
140-
}
141-
14227
#[test]
14328
#[cfg(not(miri))]
14429
#[cfg(target_has_reliable_f128_math)]
@@ -193,19 +78,6 @@ fn test_powi() {
19378
assert_biteq!(neg_inf.powi(2), inf);
19479
}
19580

196-
#[test]
197-
#[cfg(not(miri))]
198-
#[cfg(target_has_reliable_f128_math)]
199-
fn test_sqrt_domain() {
200-
assert!(f128::NAN.sqrt().is_nan());
201-
assert!(f128::NEG_INFINITY.sqrt().is_nan());
202-
assert!((-1.0f128).sqrt().is_nan());
203-
assert_biteq!((-0.0f128).sqrt(), -0.0);
204-
assert_biteq!(0.0f128.sqrt(), 0.0);
205-
assert_biteq!(1.0f128.sqrt(), 1.0);
206-
assert_biteq!(f128::INFINITY.sqrt(), f128::INFINITY);
207-
}
208-
20981
#[test]
21082
fn test_to_degrees() {
21183
let pi: f128 = consts::PI;
@@ -260,168 +132,6 @@ fn test_float_bits_conv() {
260132
assert_eq!(f128::from_bits(masked_nan2).to_bits(), masked_nan2);
261133
}
262134

263-
#[test]
264-
#[should_panic]
265-
fn test_clamp_min_greater_than_max() {
266-
let _ = 1.0f128.clamp(3.0, 1.0);
267-
}
268-
269-
#[test]
270-
#[should_panic]
271-
fn test_clamp_min_is_nan() {
272-
let _ = 1.0f128.clamp(f128::NAN, 1.0);
273-
}
274-
275-
#[test]
276-
#[should_panic]
277-
fn test_clamp_max_is_nan() {
278-
let _ = 1.0f128.clamp(3.0, f128::NAN);
279-
}
280-
281-
#[test]
282-
fn test_total_cmp() {
283-
use core::cmp::Ordering;
284-
285-
fn quiet_bit_mask() -> u128 {
286-
1 << (f128::MANTISSA_DIGITS - 2)
287-
}
288-
289-
// FIXME(f16_f128): test subnormals when powf is available
290-
// fn min_subnorm() -> f128 {
291-
// f128::MIN_POSITIVE / f128::powf(2.0, f128::MANTISSA_DIGITS as f128 - 1.0)
292-
// }
293-
294-
// fn max_subnorm() -> f128 {
295-
// f128::MIN_POSITIVE - min_subnorm()
296-
// }
297-
298-
fn q_nan() -> f128 {
299-
f128::from_bits(f128::NAN.to_bits() | quiet_bit_mask())
300-
}
301-
302-
fn s_nan() -> f128 {
303-
f128::from_bits((f128::NAN.to_bits() & !quiet_bit_mask()) + 42)
304-
}
305-
306-
assert_eq!(Ordering::Equal, (-q_nan()).total_cmp(&-q_nan()));
307-
assert_eq!(Ordering::Equal, (-s_nan()).total_cmp(&-s_nan()));
308-
assert_eq!(Ordering::Equal, (-f128::INFINITY).total_cmp(&-f128::INFINITY));
309-
assert_eq!(Ordering::Equal, (-f128::MAX).total_cmp(&-f128::MAX));
310-
assert_eq!(Ordering::Equal, (-2.5_f128).total_cmp(&-2.5));
311-
assert_eq!(Ordering::Equal, (-1.0_f128).total_cmp(&-1.0));
312-
assert_eq!(Ordering::Equal, (-1.5_f128).total_cmp(&-1.5));
313-
assert_eq!(Ordering::Equal, (-0.5_f128).total_cmp(&-0.5));
314-
assert_eq!(Ordering::Equal, (-f128::MIN_POSITIVE).total_cmp(&-f128::MIN_POSITIVE));
315-
// assert_eq!(Ordering::Equal, (-max_subnorm()).total_cmp(&-max_subnorm()));
316-
// assert_eq!(Ordering::Equal, (-min_subnorm()).total_cmp(&-min_subnorm()));
317-
assert_eq!(Ordering::Equal, (-0.0_f128).total_cmp(&-0.0));
318-
assert_eq!(Ordering::Equal, 0.0_f128.total_cmp(&0.0));
319-
// assert_eq!(Ordering::Equal, min_subnorm().total_cmp(&min_subnorm()));
320-
// assert_eq!(Ordering::Equal, max_subnorm().total_cmp(&max_subnorm()));
321-
assert_eq!(Ordering::Equal, f128::MIN_POSITIVE.total_cmp(&f128::MIN_POSITIVE));
322-
assert_eq!(Ordering::Equal, 0.5_f128.total_cmp(&0.5));
323-
assert_eq!(Ordering::Equal, 1.0_f128.total_cmp(&1.0));
324-
assert_eq!(Ordering::Equal, 1.5_f128.total_cmp(&1.5));
325-
assert_eq!(Ordering::Equal, 2.5_f128.total_cmp(&2.5));
326-
assert_eq!(Ordering::Equal, f128::MAX.total_cmp(&f128::MAX));
327-
assert_eq!(Ordering::Equal, f128::INFINITY.total_cmp(&f128::INFINITY));
328-
assert_eq!(Ordering::Equal, s_nan().total_cmp(&s_nan()));
329-
assert_eq!(Ordering::Equal, q_nan().total_cmp(&q_nan()));
330-
331-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-s_nan()));
332-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-f128::INFINITY));
333-
assert_eq!(Ordering::Less, (-f128::INFINITY).total_cmp(&-f128::MAX));
334-
assert_eq!(Ordering::Less, (-f128::MAX).total_cmp(&-2.5));
335-
assert_eq!(Ordering::Less, (-2.5_f128).total_cmp(&-1.5));
336-
assert_eq!(Ordering::Less, (-1.5_f128).total_cmp(&-1.0));
337-
assert_eq!(Ordering::Less, (-1.0_f128).total_cmp(&-0.5));
338-
assert_eq!(Ordering::Less, (-0.5_f128).total_cmp(&-f128::MIN_POSITIVE));
339-
// assert_eq!(Ordering::Less, (-f128::MIN_POSITIVE).total_cmp(&-max_subnorm()));
340-
// assert_eq!(Ordering::Less, (-max_subnorm()).total_cmp(&-min_subnorm()));
341-
// assert_eq!(Ordering::Less, (-min_subnorm()).total_cmp(&-0.0));
342-
assert_eq!(Ordering::Less, (-0.0_f128).total_cmp(&0.0));
343-
// assert_eq!(Ordering::Less, 0.0_f128.total_cmp(&min_subnorm()));
344-
// assert_eq!(Ordering::Less, min_subnorm().total_cmp(&max_subnorm()));
345-
// assert_eq!(Ordering::Less, max_subnorm().total_cmp(&f128::MIN_POSITIVE));
346-
assert_eq!(Ordering::Less, f128::MIN_POSITIVE.total_cmp(&0.5));
347-
assert_eq!(Ordering::Less, 0.5_f128.total_cmp(&1.0));
348-
assert_eq!(Ordering::Less, 1.0_f128.total_cmp(&1.5));
349-
assert_eq!(Ordering::Less, 1.5_f128.total_cmp(&2.5));
350-
assert_eq!(Ordering::Less, 2.5_f128.total_cmp(&f128::MAX));
351-
assert_eq!(Ordering::Less, f128::MAX.total_cmp(&f128::INFINITY));
352-
assert_eq!(Ordering::Less, f128::INFINITY.total_cmp(&s_nan()));
353-
assert_eq!(Ordering::Less, s_nan().total_cmp(&q_nan()));
354-
355-
assert_eq!(Ordering::Greater, (-s_nan()).total_cmp(&-q_nan()));
356-
assert_eq!(Ordering::Greater, (-f128::INFINITY).total_cmp(&-s_nan()));
357-
assert_eq!(Ordering::Greater, (-f128::MAX).total_cmp(&-f128::INFINITY));
358-
assert_eq!(Ordering::Greater, (-2.5_f128).total_cmp(&-f128::MAX));
359-
assert_eq!(Ordering::Greater, (-1.5_f128).total_cmp(&-2.5));
360-
assert_eq!(Ordering::Greater, (-1.0_f128).total_cmp(&-1.5));
361-
assert_eq!(Ordering::Greater, (-0.5_f128).total_cmp(&-1.0));
362-
assert_eq!(Ordering::Greater, (-f128::MIN_POSITIVE).total_cmp(&-0.5));
363-
// assert_eq!(Ordering::Greater, (-max_subnorm()).total_cmp(&-f128::MIN_POSITIVE));
364-
// assert_eq!(Ordering::Greater, (-min_subnorm()).total_cmp(&-max_subnorm()));
365-
// assert_eq!(Ordering::Greater, (-0.0_f128).total_cmp(&-min_subnorm()));
366-
assert_eq!(Ordering::Greater, 0.0_f128.total_cmp(&-0.0));
367-
// assert_eq!(Ordering::Greater, min_subnorm().total_cmp(&0.0));
368-
// assert_eq!(Ordering::Greater, max_subnorm().total_cmp(&min_subnorm()));
369-
// assert_eq!(Ordering::Greater, f128::MIN_POSITIVE.total_cmp(&max_subnorm()));
370-
assert_eq!(Ordering::Greater, 0.5_f128.total_cmp(&f128::MIN_POSITIVE));
371-
assert_eq!(Ordering::Greater, 1.0_f128.total_cmp(&0.5));
372-
assert_eq!(Ordering::Greater, 1.5_f128.total_cmp(&1.0));
373-
assert_eq!(Ordering::Greater, 2.5_f128.total_cmp(&1.5));
374-
assert_eq!(Ordering::Greater, f128::MAX.total_cmp(&2.5));
375-
assert_eq!(Ordering::Greater, f128::INFINITY.total_cmp(&f128::MAX));
376-
assert_eq!(Ordering::Greater, s_nan().total_cmp(&f128::INFINITY));
377-
assert_eq!(Ordering::Greater, q_nan().total_cmp(&s_nan()));
378-
379-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-s_nan()));
380-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-f128::INFINITY));
381-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-f128::MAX));
382-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-2.5));
383-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-1.5));
384-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-1.0));
385-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-0.5));
386-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-f128::MIN_POSITIVE));
387-
// assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-max_subnorm()));
388-
// assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-min_subnorm()));
389-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&-0.0));
390-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&0.0));
391-
// assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&min_subnorm()));
392-
// assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&max_subnorm()));
393-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&f128::MIN_POSITIVE));
394-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&0.5));
395-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&1.0));
396-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&1.5));
397-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&2.5));
398-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&f128::MAX));
399-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&f128::INFINITY));
400-
assert_eq!(Ordering::Less, (-q_nan()).total_cmp(&s_nan()));
401-
402-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-f128::INFINITY));
403-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-f128::MAX));
404-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-2.5));
405-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-1.5));
406-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-1.0));
407-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-0.5));
408-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-f128::MIN_POSITIVE));
409-
// assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-max_subnorm()));
410-
// assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-min_subnorm()));
411-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&-0.0));
412-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&0.0));
413-
// assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&min_subnorm()));
414-
// assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&max_subnorm()));
415-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&f128::MIN_POSITIVE));
416-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&0.5));
417-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&1.0));
418-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&1.5));
419-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&2.5));
420-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&f128::MAX));
421-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&f128::INFINITY));
422-
assert_eq!(Ordering::Less, (-s_nan()).total_cmp(&s_nan()));
423-
}
424-
425135
#[test]
426136
fn test_algebraic() {
427137
let a: f128 = 123.0;

0 commit comments

Comments
 (0)