From 1ddee8070d3cb83609b1f71c29e3deda3d30fd51 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Sun, 16 Aug 2015 00:42:53 -0700 Subject: Remove dependencies on libm functions from libcore. There wasn't any particular reason the functions needed to be there anyway, so just get rid of them, and adjust libstd to compensate. With this change, libcore depends on exactly two floating-point functions: fmod and fmodf. They are implicitly referenced because they are used to implement "%". --- src/libcoretest/num/flt2dec/mod.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/libcoretest') diff --git a/src/libcoretest/num/flt2dec/mod.rs b/src/libcoretest/num/flt2dec/mod.rs index 488cd3a779c..8ae33a44202 100644 --- a/src/libcoretest/num/flt2dec/mod.rs +++ b/src/libcoretest/num/flt2dec/mod.rs @@ -164,12 +164,26 @@ fn check_exact(mut f: F, v: T, vstr: &str, expected: &[u8], expectedk: i16 } } +trait TestableFloat : DecodableFloat + fmt::Display { + /// Returns `x * 2^exp`. Almost same to `std::{f32,f64}::ldexp`. + /// This is used for testing. + fn ldexpi(f: i64, exp: isize) -> Self; +} + +impl TestableFloat for f32 { + fn ldexpi(f: i64, exp: isize) -> Self { f as Self * (exp as Self).exp2() } +} + +impl TestableFloat for f64 { + fn ldexpi(f: i64, exp: isize) -> Self { f as Self * (exp as Self).exp2() } +} + fn check_exact_one(mut f: F, x: i64, e: isize, tstr: &str, expected: &[u8], expectedk: i16) - where T: DecodableFloat + fmt::Display, + where T: TestableFloat, F: FnMut(&Decoded, &mut [u8], i16) -> (usize, i16) { // use a large enough buffer let mut buf = [b'_'; 1024]; - let v: T = DecodableFloat::ldexpi(x, e); + let v: T = TestableFloat::ldexpi(x, e); let decoded = decode_finite(v); try_exact!(f(&decoded) => &mut buf, &expected, expectedk; -- cgit 1.4.1-3-g733a5