Skip to content
This repository was archived by the owner on Apr 28, 2025. It is now read-only.

Commit c969ddd

Browse files
committed
Add tests against MPFR for scalbn{f} and ldexp{f}
1 parent 31a58aa commit c969ddd

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed

crates/libm-test/src/mpfloat.rs

+31-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use az::Az;
99
use rug::Assign;
1010
pub use rug::Float as MpFloat;
1111
use rug::float::Round::Nearest;
12-
use rug::ops::{PowAssignRound, RemAssignRound};
12+
use rug::ops::{MulAssignRound, PowAssign, PowAssignRound, RemAssignRound};
1313

1414
use crate::{Float, MathOp};
1515

@@ -255,6 +255,36 @@ macro_rules! impl_op_for_ty {
255255
}
256256
}
257257

258+
// `ldexp` and `scalbn` are the same for binary floating point, so just forward all
259+
// methods.
260+
impl MpOp for crate::op::[<ldexp $suffix>]::Routine {
261+
type MpTy = <crate::op::[<scalbn $suffix>]::Routine as MpOp>::MpTy;
262+
263+
fn new_mp() -> Self::MpTy {
264+
<crate::op::[<scalbn $suffix>]::Routine as MpOp>::new_mp()
265+
}
266+
267+
fn run(this: &mut Self::MpTy, input: Self::RustArgs) -> Self::RustRet {
268+
<crate::op::[<scalbn $suffix>]::Routine as MpOp>::run(this, input)
269+
}
270+
}
271+
272+
impl MpOp for crate::op::[<scalbn $suffix>]::Routine {
273+
type MpTy = (MpFloat, MpFloat);
274+
275+
fn new_mp() -> Self::MpTy {
276+
(new_mpfloat::<Self::FTy>(), new_mpfloat::<Self::FTy>())
277+
}
278+
279+
fn run(this: &mut Self::MpTy, input: Self::RustArgs) -> Self::RustRet {
280+
this.0.assign(input.0);
281+
this.1.assign(2.0);
282+
this.1.pow_assign(input.1);
283+
let ord = this.0.mul_assign_round(&this.1, Nearest);
284+
prep_retval::<Self::FTy>(&mut this.0, ord)
285+
}
286+
}
287+
258288
impl MpOp for crate::op::[<sincos $suffix>]::Routine {
259289
type MpTy = (MpFloat, MpFloat);
260290

crates/libm-test/tests/multiprecision.rs

-4
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,10 @@ libm_macros::for_each_function! {
5555
frexpf,
5656
ilogb,
5757
ilogbf,
58-
ldexp,
59-
ldexpf,
6058
modf,
6159
modff,
6260
remquo,
6361
remquof,
64-
scalbn,
65-
scalbnf,
6662

6763
// FIXME: test needed, see
6864
// https://github.com/rust-lang/libm/pull/311#discussion_r1818273392

0 commit comments

Comments
 (0)