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

Commit 42c413c

Browse files
committed
Shrink mpfr jn test count
1 parent d5afdf6 commit 42c413c

File tree

4 files changed

+21
-13
lines changed

4 files changed

+21
-13
lines changed

crates/libm-test/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ build-musl = ["dep:musl-math-sys"]
1818
[dependencies]
1919
anyhow = "1.0.90"
2020
az = { version = "1.2.1", optional = true }
21+
either = "1.13.0"
2122
libm = { path = "../.." }
2223
libm-macros = { path = "../libm-macros" }
2324
musl-math-sys = { path = "../musl-math-sys", optional = true }

crates/libm-test/src/gen/random.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
44
use std::sync::LazyLock;
55

6+
use either::Either;
67
use rand::{Rng, SeedableRng};
78
use rand_chacha::ChaCha8Rng;
89

910
use super::CachedInput;
10-
use crate::GenerateInput;
11+
use crate::{CheckBasis, CheckCtx, GenerateInput};
1112

1213
const SEED: [u8; 32] = *b"3.141592653589793238462643383279";
1314

@@ -50,9 +51,10 @@ static TEST_CASES_JN: LazyLock<CachedInput> = LazyLock::new(|| {
5051
let mut cases = (&*TEST_CASES).clone();
5152

5253
// These functions are extremely slow, limit them
53-
cases.inputs_i32.truncate((NTESTS / 1000).max(80));
54-
cases.inputs_f32.truncate((NTESTS / 1000).max(80));
55-
cases.inputs_f64.truncate((NTESTS / 1000).max(80));
54+
let ntests_jn = (NTESTS / 1000).max(80);
55+
cases.inputs_i32.truncate(ntests_jn);
56+
cases.inputs_f32.truncate(ntests_jn);
57+
cases.inputs_f64.truncate(ntests_jn);
5658

5759
// It is easy to overflow the stack with these in debug mode
5860
let max_iterations = if cfg!(optimizations_enabled) && cfg!(target_pointer_width = "64") {
@@ -115,11 +117,19 @@ fn make_test_cases(ntests: usize) -> CachedInput {
115117
}
116118

117119
/// Create a test case iterator.
118-
pub fn get_test_cases<RustArgs>(fname: &str) -> impl Iterator<Item = RustArgs>
120+
pub fn get_test_cases<RustArgs>(ctx: &CheckCtx) -> impl Iterator<Item = RustArgs>
119121
where
120122
CachedInput: GenerateInput<RustArgs>,
121123
{
122-
let inputs = if fname == "jn" || fname == "jnf" { &TEST_CASES_JN } else { &TEST_CASES };
123-
124-
CachedInput::get_cases(inputs)
124+
// jn is extremely slow on MPFR, we need to reduce it further
125+
let ntests_jn_multi = (NTESTS / 5000).max(20);
126+
127+
match (&ctx.basis, ctx.fname) {
128+
(CheckBasis::Musl, "jnf") => Either::Left(TEST_CASES_JN.get_cases()),
129+
(_, "jn") => Either::Left(TEST_CASES_JN.get_cases()),
130+
(CheckBasis::MultiPrecision, "jnf") => {
131+
Either::Right(TEST_CASES_JN.get_cases().take(ntests_jn_multi))
132+
}
133+
_ => Either::Left(TEST_CASES.get_cases()),
134+
}
125135
}

crates/libm-test/tests/compare_built_musl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ macro_rules! musl_rand_tests {
2929
fn [< musl_random_ $fn_name >]() {
3030
let fname = stringify!($fn_name);
3131
let ulp = musl_allowed_ulp(fname);
32-
let cases = random::get_test_cases::<$RustArgs>(fname);
3332
let ctx = CheckCtx::new(ulp, fname, CheckBasis::Musl);
33+
let cases = random::get_test_cases::<$RustArgs>(&ctx);
3434

3535
for input in cases {
3636
let musl_res = input.call(musl::$fn_name as $CFn);

crates/libm-test/tests/multiprecision.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ macro_rules! multiprec_rand_tests {
2626

2727
let fname = stringify!($fn_name);
2828
let ulp = multiprec_allowed_ulp(fname);
29-
let cases = random::get_test_cases::<$RustArgs>(fname);
3029
let mut mp_vals = MpOpTy::new();
3130
let ctx = CheckCtx::new(ulp, fname, CheckBasis::MultiPrecision);
31+
let cases = random::get_test_cases::<$RustArgs>(&ctx);
3232

3333
for input in cases {
3434
let mp_res = mp_vals.run(input);
@@ -58,8 +58,5 @@ libm_macros::for_each_function! {
5858
remquof,
5959
scalbn,
6060
scalbnf,
61-
62-
jn,
63-
jnf,
6461
],
6562
}

0 commit comments

Comments
 (0)