Skip to content

Commit e232b0a

Browse files
committed
float: Replace some approximate assertions with exact
As was mentioned at [1], we currently use `assert_approx_eq` for testing some math functions that guarantee exact results. Replace approximate assertions with exact ones for the following: * `ceil` * `floor` * `fract` * `from_bits` * `mul_add` * `round_ties_even` * `round` * `trunc` This likely wasn't done in the past to avoid writing out exact decimals that don't match the intuitive answer (e.g. 1.3 - 1.0 = 0.300...004), but ensuring our results are accurate seems more important here. [1]: rust-lang#138087 (comment)
1 parent 9d0f77a commit e232b0a

File tree

4 files changed

+276
-276
lines changed

4 files changed

+276
-276
lines changed

library/coretests/tests/floats/f128.rs

Lines changed: 70 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -249,98 +249,98 @@ fn test_classify() {
249249
#[cfg(not(miri))]
250250
#[cfg(target_has_reliable_f128_math)]
251251
fn test_floor() {
252-
assert_approx_eq!(1.0f128.floor(), 1.0f128, TOL_PRECISE);
253-
assert_approx_eq!(1.3f128.floor(), 1.0f128, TOL_PRECISE);
254-
assert_approx_eq!(1.5f128.floor(), 1.0f128, TOL_PRECISE);
255-
assert_approx_eq!(1.7f128.floor(), 1.0f128, TOL_PRECISE);
256-
assert_approx_eq!(0.0f128.floor(), 0.0f128, TOL_PRECISE);
257-
assert_approx_eq!((-0.0f128).floor(), -0.0f128, TOL_PRECISE);
258-
assert_approx_eq!((-1.0f128).floor(), -1.0f128, TOL_PRECISE);
259-
assert_approx_eq!((-1.3f128).floor(), -2.0f128, TOL_PRECISE);
260-
assert_approx_eq!((-1.5f128).floor(), -2.0f128, TOL_PRECISE);
261-
assert_approx_eq!((-1.7f128).floor(), -2.0f128, TOL_PRECISE);
252+
assert_eq!(1.0f128.floor(), 1.0f128);
253+
assert_eq!(1.3f128.floor(), 1.0f128);
254+
assert_eq!(1.5f128.floor(), 1.0f128);
255+
assert_eq!(1.7f128.floor(), 1.0f128);
256+
assert_eq!(0.0f128.floor(), 0.0f128);
257+
assert_eq!((-0.0f128).floor(), -0.0f128);
258+
assert_eq!((-1.0f128).floor(), -1.0f128);
259+
assert_eq!((-1.3f128).floor(), -2.0f128);
260+
assert_eq!((-1.5f128).floor(), -2.0f128);
261+
assert_eq!((-1.7f128).floor(), -2.0f128);
262262
}
263263

264264
#[test]
265265
#[cfg(not(miri))]
266266
#[cfg(target_has_reliable_f128_math)]
267267
fn test_ceil() {
268-
assert_approx_eq!(1.0f128.ceil(), 1.0f128, TOL_PRECISE);
269-
assert_approx_eq!(1.3f128.ceil(), 2.0f128, TOL_PRECISE);
270-
assert_approx_eq!(1.5f128.ceil(), 2.0f128, TOL_PRECISE);
271-
assert_approx_eq!(1.7f128.ceil(), 2.0f128, TOL_PRECISE);
272-
assert_approx_eq!(0.0f128.ceil(), 0.0f128, TOL_PRECISE);
273-
assert_approx_eq!((-0.0f128).ceil(), -0.0f128, TOL_PRECISE);
274-
assert_approx_eq!((-1.0f128).ceil(), -1.0f128, TOL_PRECISE);
275-
assert_approx_eq!((-1.3f128).ceil(), -1.0f128, TOL_PRECISE);
276-
assert_approx_eq!((-1.5f128).ceil(), -1.0f128, TOL_PRECISE);
277-
assert_approx_eq!((-1.7f128).ceil(), -1.0f128, TOL_PRECISE);
268+
assert_eq!(1.0f128.ceil(), 1.0f128);
269+
assert_eq!(1.3f128.ceil(), 2.0f128);
270+
assert_eq!(1.5f128.ceil(), 2.0f128);
271+
assert_eq!(1.7f128.ceil(), 2.0f128);
272+
assert_eq!(0.0f128.ceil(), 0.0f128);
273+
assert_eq!((-0.0f128).ceil(), -0.0f128);
274+
assert_eq!((-1.0f128).ceil(), -1.0f128);
275+
assert_eq!((-1.3f128).ceil(), -1.0f128);
276+
assert_eq!((-1.5f128).ceil(), -1.0f128);
277+
assert_eq!((-1.7f128).ceil(), -1.0f128);
278278
}
279279

280280
#[test]
281281
#[cfg(not(miri))]
282282
#[cfg(target_has_reliable_f128_math)]
283283
fn test_round() {
284-
assert_approx_eq!(2.5f128.round(), 3.0f128, TOL_PRECISE);
285-
assert_approx_eq!(1.0f128.round(), 1.0f128, TOL_PRECISE);
286-
assert_approx_eq!(1.3f128.round(), 1.0f128, TOL_PRECISE);
287-
assert_approx_eq!(1.5f128.round(), 2.0f128, TOL_PRECISE);
288-
assert_approx_eq!(1.7f128.round(), 2.0f128, TOL_PRECISE);
289-
assert_approx_eq!(0.0f128.round(), 0.0f128, TOL_PRECISE);
290-
assert_approx_eq!((-0.0f128).round(), -0.0f128, TOL_PRECISE);
291-
assert_approx_eq!((-1.0f128).round(), -1.0f128, TOL_PRECISE);
292-
assert_approx_eq!((-1.3f128).round(), -1.0f128, TOL_PRECISE);
293-
assert_approx_eq!((-1.5f128).round(), -2.0f128, TOL_PRECISE);
294-
assert_approx_eq!((-1.7f128).round(), -2.0f128, TOL_PRECISE);
284+
assert_eq!(2.5f128.round(), 3.0f128);
285+
assert_eq!(1.0f128.round(), 1.0f128);
286+
assert_eq!(1.3f128.round(), 1.0f128);
287+
assert_eq!(1.5f128.round(), 2.0f128);
288+
assert_eq!(1.7f128.round(), 2.0f128);
289+
assert_eq!(0.0f128.round(), 0.0f128);
290+
assert_eq!((-0.0f128).round(), -0.0f128);
291+
assert_eq!((-1.0f128).round(), -1.0f128);
292+
assert_eq!((-1.3f128).round(), -1.0f128);
293+
assert_eq!((-1.5f128).round(), -2.0f128);
294+
assert_eq!((-1.7f128).round(), -2.0f128);
295295
}
296296

297297
#[test]
298298
#[cfg(not(miri))]
299299
#[cfg(target_has_reliable_f128_math)]
300300
fn test_round_ties_even() {
301-
assert_approx_eq!(2.5f128.round_ties_even(), 2.0f128, TOL_PRECISE);
302-
assert_approx_eq!(1.0f128.round_ties_even(), 1.0f128, TOL_PRECISE);
303-
assert_approx_eq!(1.3f128.round_ties_even(), 1.0f128, TOL_PRECISE);
304-
assert_approx_eq!(1.5f128.round_ties_even(), 2.0f128, TOL_PRECISE);
305-
assert_approx_eq!(1.7f128.round_ties_even(), 2.0f128, TOL_PRECISE);
306-
assert_approx_eq!(0.0f128.round_ties_even(), 0.0f128, TOL_PRECISE);
307-
assert_approx_eq!((-0.0f128).round_ties_even(), -0.0f128, TOL_PRECISE);
308-
assert_approx_eq!((-1.0f128).round_ties_even(), -1.0f128, TOL_PRECISE);
309-
assert_approx_eq!((-1.3f128).round_ties_even(), -1.0f128, TOL_PRECISE);
310-
assert_approx_eq!((-1.5f128).round_ties_even(), -2.0f128, TOL_PRECISE);
311-
assert_approx_eq!((-1.7f128).round_ties_even(), -2.0f128, TOL_PRECISE);
301+
assert_eq!(2.5f128.round_ties_even(), 2.0f128);
302+
assert_eq!(1.0f128.round_ties_even(), 1.0f128);
303+
assert_eq!(1.3f128.round_ties_even(), 1.0f128);
304+
assert_eq!(1.5f128.round_ties_even(), 2.0f128);
305+
assert_eq!(1.7f128.round_ties_even(), 2.0f128);
306+
assert_eq!(0.0f128.round_ties_even(), 0.0f128);
307+
assert_eq!((-0.0f128).round_ties_even(), -0.0f128);
308+
assert_eq!((-1.0f128).round_ties_even(), -1.0f128);
309+
assert_eq!((-1.3f128).round_ties_even(), -1.0f128);
310+
assert_eq!((-1.5f128).round_ties_even(), -2.0f128);
311+
assert_eq!((-1.7f128).round_ties_even(), -2.0f128);
312312
}
313313

314314
#[test]
315315
#[cfg(not(miri))]
316316
#[cfg(target_has_reliable_f128_math)]
317317
fn test_trunc() {
318-
assert_approx_eq!(1.0f128.trunc(), 1.0f128, TOL_PRECISE);
319-
assert_approx_eq!(1.3f128.trunc(), 1.0f128, TOL_PRECISE);
320-
assert_approx_eq!(1.5f128.trunc(), 1.0f128, TOL_PRECISE);
321-
assert_approx_eq!(1.7f128.trunc(), 1.0f128, TOL_PRECISE);
322-
assert_approx_eq!(0.0f128.trunc(), 0.0f128, TOL_PRECISE);
323-
assert_approx_eq!((-0.0f128).trunc(), -0.0f128, TOL_PRECISE);
324-
assert_approx_eq!((-1.0f128).trunc(), -1.0f128, TOL_PRECISE);
325-
assert_approx_eq!((-1.3f128).trunc(), -1.0f128, TOL_PRECISE);
326-
assert_approx_eq!((-1.5f128).trunc(), -1.0f128, TOL_PRECISE);
327-
assert_approx_eq!((-1.7f128).trunc(), -1.0f128, TOL_PRECISE);
318+
assert_eq!(1.0f128.trunc(), 1.0f128);
319+
assert_eq!(1.3f128.trunc(), 1.0f128);
320+
assert_eq!(1.5f128.trunc(), 1.0f128);
321+
assert_eq!(1.7f128.trunc(), 1.0f128);
322+
assert_eq!(0.0f128.trunc(), 0.0f128);
323+
assert_eq!((-0.0f128).trunc(), -0.0f128);
324+
assert_eq!((-1.0f128).trunc(), -1.0f128);
325+
assert_eq!((-1.3f128).trunc(), -1.0f128);
326+
assert_eq!((-1.5f128).trunc(), -1.0f128);
327+
assert_eq!((-1.7f128).trunc(), -1.0f128);
328328
}
329329

330330
#[test]
331331
#[cfg(not(miri))]
332332
#[cfg(target_has_reliable_f128_math)]
333333
fn test_fract() {
334-
assert_approx_eq!(1.0f128.fract(), 0.0f128, TOL_PRECISE);
335-
assert_approx_eq!(1.3f128.fract(), 0.3f128, TOL_PRECISE);
336-
assert_approx_eq!(1.5f128.fract(), 0.5f128, TOL_PRECISE);
337-
assert_approx_eq!(1.7f128.fract(), 0.7f128, TOL_PRECISE);
338-
assert_approx_eq!(0.0f128.fract(), 0.0f128, TOL_PRECISE);
339-
assert_approx_eq!((-0.0f128).fract(), -0.0f128, TOL_PRECISE);
340-
assert_approx_eq!((-1.0f128).fract(), -0.0f128, TOL_PRECISE);
341-
assert_approx_eq!((-1.3f128).fract(), -0.3f128, TOL_PRECISE);
342-
assert_approx_eq!((-1.5f128).fract(), -0.5f128, TOL_PRECISE);
343-
assert_approx_eq!((-1.7f128).fract(), -0.7f128, TOL_PRECISE);
334+
assert_eq!(1.0f128.fract(), 0.0f128);
335+
assert_eq!(1.3f128.fract(), 0.300000000000000000000000000000000039f128);
336+
assert_eq!(1.5f128.fract(), 0.5f128);
337+
assert_eq!(1.7f128.fract(), 0.7f128);
338+
assert_eq!(0.0f128.fract(), 0.0f128);
339+
assert_eq!((-0.0f128).fract(), -0.0f128);
340+
assert_eq!((-1.0f128).fract(), -0.0f128);
341+
assert_eq!((-1.3f128).fract(), -0.300000000000000000000000000000000039f128);
342+
assert_eq!((-1.5f128).fract(), -0.5f128);
343+
assert_eq!((-1.7f128).fract(), -0.699999999999999999999999999999999961f128);
344344
}
345345

346346
#[test]
@@ -451,10 +451,10 @@ fn test_mul_add() {
451451
let nan: f128 = f128::NAN;
452452
let inf: f128 = f128::INFINITY;
453453
let neg_inf: f128 = f128::NEG_INFINITY;
454-
assert_approx_eq!(12.3f128.mul_add(4.5, 6.7), 62.05, TOL_PRECISE);
455-
assert_approx_eq!((-12.3f128).mul_add(-4.5, -6.7), 48.65, TOL_PRECISE);
456-
assert_approx_eq!(0.0f128.mul_add(8.9, 1.2), 1.2, TOL_PRECISE);
457-
assert_approx_eq!(3.4f128.mul_add(-0.0, 5.6), 5.6, TOL_PRECISE);
454+
assert_eq!(12.3f128.mul_add(4.5, 6.7), 62.0500000000000000000000000000000037);
455+
assert_eq!((-12.3f128).mul_add(-4.5, -6.7), 48.6500000000000000000000000000000049);
456+
assert_eq!(0.0f128.mul_add(8.9, 1.2), 1.2);
457+
assert_eq!(3.4f128.mul_add(-0.0, 5.6), 5.6);
458458
assert!(nan.mul_add(7.8, 9.0).is_nan());
459459
assert_eq!(inf.mul_add(7.8, 9.0), inf);
460460
assert_eq!(neg_inf.mul_add(7.8, 9.0), neg_inf);
@@ -550,10 +550,10 @@ fn test_float_bits_conv() {
550550
assert_eq!((12.5f128).to_bits(), 0x40029000000000000000000000000000);
551551
assert_eq!((1337f128).to_bits(), 0x40094e40000000000000000000000000);
552552
assert_eq!((-14.25f128).to_bits(), 0xc002c800000000000000000000000000);
553-
assert_approx_eq!(f128::from_bits(0x3fff0000000000000000000000000000), 1.0, TOL_PRECISE);
554-
assert_approx_eq!(f128::from_bits(0x40029000000000000000000000000000), 12.5, TOL_PRECISE);
555-
assert_approx_eq!(f128::from_bits(0x40094e40000000000000000000000000), 1337.0, TOL_PRECISE);
556-
assert_approx_eq!(f128::from_bits(0xc002c800000000000000000000000000), -14.25, TOL_PRECISE);
553+
assert_eq!(f128::from_bits(0x3fff0000000000000000000000000000), 1.0);
554+
assert_eq!(f128::from_bits(0x40029000000000000000000000000000), 12.5);
555+
assert_eq!(f128::from_bits(0x40094e40000000000000000000000000), 1337.0);
556+
assert_eq!(f128::from_bits(0xc002c800000000000000000000000000), -14.25);
557557

558558
// Check that NaNs roundtrip their bits regardless of signaling-ness
559559
// 0xA is 0b1010; 0x5 is 0b0101 -- so these two together clobbers all the mantissa bits

library/coretests/tests/floats/f16.rs

Lines changed: 70 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -235,98 +235,98 @@ fn test_classify() {
235235
#[cfg(not(miri))]
236236
#[cfg(target_has_reliable_f16_math)]
237237
fn test_floor() {
238-
assert_approx_eq!(1.0f16.floor(), 1.0f16, TOL_0);
239-
assert_approx_eq!(1.3f16.floor(), 1.0f16, TOL_0);
240-
assert_approx_eq!(1.5f16.floor(), 1.0f16, TOL_0);
241-
assert_approx_eq!(1.7f16.floor(), 1.0f16, TOL_0);
242-
assert_approx_eq!(0.0f16.floor(), 0.0f16, TOL_0);
243-
assert_approx_eq!((-0.0f16).floor(), -0.0f16, TOL_0);
244-
assert_approx_eq!((-1.0f16).floor(), -1.0f16, TOL_0);
245-
assert_approx_eq!((-1.3f16).floor(), -2.0f16, TOL_0);
246-
assert_approx_eq!((-1.5f16).floor(), -2.0f16, TOL_0);
247-
assert_approx_eq!((-1.7f16).floor(), -2.0f16, TOL_0);
238+
assert_eq!(1.0f16.floor(), 1.0f16);
239+
assert_eq!(1.3f16.floor(), 1.0f16);
240+
assert_eq!(1.5f16.floor(), 1.0f16);
241+
assert_eq!(1.7f16.floor(), 1.0f16);
242+
assert_eq!(0.0f16.floor(), 0.0f16);
243+
assert_eq!((-0.0f16).floor(), -0.0f16);
244+
assert_eq!((-1.0f16).floor(), -1.0f16);
245+
assert_eq!((-1.3f16).floor(), -2.0f16);
246+
assert_eq!((-1.5f16).floor(), -2.0f16);
247+
assert_eq!((-1.7f16).floor(), -2.0f16);
248248
}
249249

250250
#[test]
251251
#[cfg(not(miri))]
252252
#[cfg(target_has_reliable_f16_math)]
253253
fn test_ceil() {
254-
assert_approx_eq!(1.0f16.ceil(), 1.0f16, TOL_0);
255-
assert_approx_eq!(1.3f16.ceil(), 2.0f16, TOL_0);
256-
assert_approx_eq!(1.5f16.ceil(), 2.0f16, TOL_0);
257-
assert_approx_eq!(1.7f16.ceil(), 2.0f16, TOL_0);
258-
assert_approx_eq!(0.0f16.ceil(), 0.0f16, TOL_0);
259-
assert_approx_eq!((-0.0f16).ceil(), -0.0f16, TOL_0);
260-
assert_approx_eq!((-1.0f16).ceil(), -1.0f16, TOL_0);
261-
assert_approx_eq!((-1.3f16).ceil(), -1.0f16, TOL_0);
262-
assert_approx_eq!((-1.5f16).ceil(), -1.0f16, TOL_0);
263-
assert_approx_eq!((-1.7f16).ceil(), -1.0f16, TOL_0);
254+
assert_eq!(1.0f16.ceil(), 1.0f16);
255+
assert_eq!(1.3f16.ceil(), 2.0f16);
256+
assert_eq!(1.5f16.ceil(), 2.0f16);
257+
assert_eq!(1.7f16.ceil(), 2.0f16);
258+
assert_eq!(0.0f16.ceil(), 0.0f16);
259+
assert_eq!((-0.0f16).ceil(), -0.0f16);
260+
assert_eq!((-1.0f16).ceil(), -1.0f16);
261+
assert_eq!((-1.3f16).ceil(), -1.0f16);
262+
assert_eq!((-1.5f16).ceil(), -1.0f16);
263+
assert_eq!((-1.7f16).ceil(), -1.0f16);
264264
}
265265

266266
#[test]
267267
#[cfg(not(miri))]
268268
#[cfg(target_has_reliable_f16_math)]
269269
fn test_round() {
270-
assert_approx_eq!(2.5f16.round(), 3.0f16, TOL_0);
271-
assert_approx_eq!(1.0f16.round(), 1.0f16, TOL_0);
272-
assert_approx_eq!(1.3f16.round(), 1.0f16, TOL_0);
273-
assert_approx_eq!(1.5f16.round(), 2.0f16, TOL_0);
274-
assert_approx_eq!(1.7f16.round(), 2.0f16, TOL_0);
275-
assert_approx_eq!(0.0f16.round(), 0.0f16, TOL_0);
276-
assert_approx_eq!((-0.0f16).round(), -0.0f16, TOL_0);
277-
assert_approx_eq!((-1.0f16).round(), -1.0f16, TOL_0);
278-
assert_approx_eq!((-1.3f16).round(), -1.0f16, TOL_0);
279-
assert_approx_eq!((-1.5f16).round(), -2.0f16, TOL_0);
280-
assert_approx_eq!((-1.7f16).round(), -2.0f16, TOL_0);
270+
assert_eq!(2.5f16.round(), 3.0f16);
271+
assert_eq!(1.0f16.round(), 1.0f16);
272+
assert_eq!(1.3f16.round(), 1.0f16);
273+
assert_eq!(1.5f16.round(), 2.0f16);
274+
assert_eq!(1.7f16.round(), 2.0f16);
275+
assert_eq!(0.0f16.round(), 0.0f16);
276+
assert_eq!((-0.0f16).round(), -0.0f16);
277+
assert_eq!((-1.0f16).round(), -1.0f16);
278+
assert_eq!((-1.3f16).round(), -1.0f16);
279+
assert_eq!((-1.5f16).round(), -2.0f16);
280+
assert_eq!((-1.7f16).round(), -2.0f16);
281281
}
282282

283283
#[test]
284284
#[cfg(not(miri))]
285285
#[cfg(target_has_reliable_f16_math)]
286286
fn test_round_ties_even() {
287-
assert_approx_eq!(2.5f16.round_ties_even(), 2.0f16, TOL_0);
288-
assert_approx_eq!(1.0f16.round_ties_even(), 1.0f16, TOL_0);
289-
assert_approx_eq!(1.3f16.round_ties_even(), 1.0f16, TOL_0);
290-
assert_approx_eq!(1.5f16.round_ties_even(), 2.0f16, TOL_0);
291-
assert_approx_eq!(1.7f16.round_ties_even(), 2.0f16, TOL_0);
292-
assert_approx_eq!(0.0f16.round_ties_even(), 0.0f16, TOL_0);
293-
assert_approx_eq!((-0.0f16).round_ties_even(), -0.0f16, TOL_0);
294-
assert_approx_eq!((-1.0f16).round_ties_even(), -1.0f16, TOL_0);
295-
assert_approx_eq!((-1.3f16).round_ties_even(), -1.0f16, TOL_0);
296-
assert_approx_eq!((-1.5f16).round_ties_even(), -2.0f16, TOL_0);
297-
assert_approx_eq!((-1.7f16).round_ties_even(), -2.0f16, TOL_0);
287+
assert_eq!(2.5f16.round_ties_even(), 2.0f16);
288+
assert_eq!(1.0f16.round_ties_even(), 1.0f16);
289+
assert_eq!(1.3f16.round_ties_even(), 1.0f16);
290+
assert_eq!(1.5f16.round_ties_even(), 2.0f16);
291+
assert_eq!(1.7f16.round_ties_even(), 2.0f16);
292+
assert_eq!(0.0f16.round_ties_even(), 0.0f16);
293+
assert_eq!((-0.0f16).round_ties_even(), -0.0f16);
294+
assert_eq!((-1.0f16).round_ties_even(), -1.0f16);
295+
assert_eq!((-1.3f16).round_ties_even(), -1.0f16);
296+
assert_eq!((-1.5f16).round_ties_even(), -2.0f16);
297+
assert_eq!((-1.7f16).round_ties_even(), -2.0f16);
298298
}
299299

300300
#[test]
301301
#[cfg(not(miri))]
302302
#[cfg(target_has_reliable_f16_math)]
303303
fn test_trunc() {
304-
assert_approx_eq!(1.0f16.trunc(), 1.0f16, TOL_0);
305-
assert_approx_eq!(1.3f16.trunc(), 1.0f16, TOL_0);
306-
assert_approx_eq!(1.5f16.trunc(), 1.0f16, TOL_0);
307-
assert_approx_eq!(1.7f16.trunc(), 1.0f16, TOL_0);
308-
assert_approx_eq!(0.0f16.trunc(), 0.0f16, TOL_0);
309-
assert_approx_eq!((-0.0f16).trunc(), -0.0f16, TOL_0);
310-
assert_approx_eq!((-1.0f16).trunc(), -1.0f16, TOL_0);
311-
assert_approx_eq!((-1.3f16).trunc(), -1.0f16, TOL_0);
312-
assert_approx_eq!((-1.5f16).trunc(), -1.0f16, TOL_0);
313-
assert_approx_eq!((-1.7f16).trunc(), -1.0f16, TOL_0);
304+
assert_eq!(1.0f16.trunc(), 1.0f16);
305+
assert_eq!(1.3f16.trunc(), 1.0f16);
306+
assert_eq!(1.5f16.trunc(), 1.0f16);
307+
assert_eq!(1.7f16.trunc(), 1.0f16);
308+
assert_eq!(0.0f16.trunc(), 0.0f16);
309+
assert_eq!((-0.0f16).trunc(), -0.0f16);
310+
assert_eq!((-1.0f16).trunc(), -1.0f16);
311+
assert_eq!((-1.3f16).trunc(), -1.0f16);
312+
assert_eq!((-1.5f16).trunc(), -1.0f16);
313+
assert_eq!((-1.7f16).trunc(), -1.0f16);
314314
}
315315

316316
#[test]
317317
#[cfg(not(miri))]
318318
#[cfg(target_has_reliable_f16_math)]
319319
fn test_fract() {
320-
assert_approx_eq!(1.0f16.fract(), 0.0f16, TOL_0);
321-
assert_approx_eq!(1.3f16.fract(), 0.3f16, TOL_0);
322-
assert_approx_eq!(1.5f16.fract(), 0.5f16, TOL_0);
323-
assert_approx_eq!(1.7f16.fract(), 0.7f16, TOL_0);
324-
assert_approx_eq!(0.0f16.fract(), 0.0f16, TOL_0);
325-
assert_approx_eq!((-0.0f16).fract(), -0.0f16, TOL_0);
326-
assert_approx_eq!((-1.0f16).fract(), -0.0f16, TOL_0);
327-
assert_approx_eq!((-1.3f16).fract(), -0.3f16, TOL_0);
328-
assert_approx_eq!((-1.5f16).fract(), -0.5f16, TOL_0);
329-
assert_approx_eq!((-1.7f16).fract(), -0.7f16, TOL_0);
320+
assert_eq!(1.0f16.fract(), 0.0f16);
321+
assert_eq!(1.3f16.fract(), 0.2998f16);
322+
assert_eq!(1.5f16.fract(), 0.5f16);
323+
assert_eq!(1.7f16.fract(), 0.7f16);
324+
assert_eq!(0.0f16.fract(), 0.0f16);
325+
assert_eq!((-0.0f16).fract(), -0.0f16);
326+
assert_eq!((-1.0f16).fract(), -0.0f16);
327+
assert_eq!((-1.3f16).fract(), -0.2998f16);
328+
assert_eq!((-1.5f16).fract(), -0.5f16);
329+
assert_eq!((-1.7f16).fract(), -0.7f16);
330330
}
331331

332332
#[test]
@@ -437,10 +437,10 @@ fn test_mul_add() {
437437
let nan: f16 = f16::NAN;
438438
let inf: f16 = f16::INFINITY;
439439
let neg_inf: f16 = f16::NEG_INFINITY;
440-
assert_approx_eq!(12.3f16.mul_add(4.5, 6.7), 62.05, TOL_P2);
441-
assert_approx_eq!((-12.3f16).mul_add(-4.5, -6.7), 48.65, TOL_P2);
442-
assert_approx_eq!(0.0f16.mul_add(8.9, 1.2), 1.2, TOL_0);
443-
assert_approx_eq!(3.4f16.mul_add(-0.0, 5.6), 5.6, TOL_0);
440+
assert_eq!(12.3f16.mul_add(4.5, 6.7), 62.031);
441+
assert_eq!((-12.3f16).mul_add(-4.5, -6.7), 48.625);
442+
assert_eq!(0.0f16.mul_add(8.9, 1.2), 1.2);
443+
assert_eq!(3.4f16.mul_add(-0.0, 5.6), 5.6);
444444
assert!(nan.mul_add(7.8, 9.0).is_nan());
445445
assert_eq!(inf.mul_add(7.8, 9.0), inf);
446446
assert_eq!(neg_inf.mul_add(7.8, 9.0), neg_inf);
@@ -530,10 +530,10 @@ fn test_float_bits_conv() {
530530
assert_eq!((12.5f16).to_bits(), 0x4a40);
531531
assert_eq!((1337f16).to_bits(), 0x6539);
532532
assert_eq!((-14.25f16).to_bits(), 0xcb20);
533-
assert_approx_eq!(f16::from_bits(0x3c00), 1.0, TOL_0);
534-
assert_approx_eq!(f16::from_bits(0x4a40), 12.5, TOL_0);
535-
assert_approx_eq!(f16::from_bits(0x6539), 1337.0, TOL_P4);
536-
assert_approx_eq!(f16::from_bits(0xcb20), -14.25, TOL_0);
533+
assert_eq!(f16::from_bits(0x3c00), 1.0);
534+
assert_eq!(f16::from_bits(0x4a40), 12.5);
535+
assert_eq!(f16::from_bits(0x6539), 1337.0);
536+
assert_eq!(f16::from_bits(0xcb20), -14.25);
537537

538538
// Check that NaNs roundtrip their bits regardless of signaling-ness
539539
let masked_nan1 = f16::NAN.to_bits() ^ NAN_MASK1;

0 commit comments

Comments
 (0)