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

Commit dca3fae

Browse files
committed
Adjust the precision of J0/J1 based on new tests
It seems that these results are not target dependent, the high ULP results can be hit on x86 as well.
1 parent da34e6b commit dca3fae

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

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

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ use rand::prelude::Distribution;
66
use rand::{Rng, SeedableRng};
77
use rand_chacha::ChaCha8Rng;
88

9+
use super::KnownSize;
910
use crate::run_cfg::{int_range, iteration_count};
1011
use crate::{CheckCtx, GeneratorKind};
1112

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

1415
/// Generate a sequence of random values of this type.
1516
pub trait RandomInput {
16-
fn get_cases(ctx: &CheckCtx) -> impl Iterator<Item = Self>;
17+
fn get_cases(ctx: &CheckCtx) -> impl ExactSizeIterator<Item = Self>;
1718
}
1819

1920
/// Generate a sequence of deterministically random floats.
@@ -37,52 +38,57 @@ fn random_ints(count: u64, range: RangeInclusive<i32>) -> impl Iterator<Item = i
3738
macro_rules! impl_random_input {
3839
($fty:ty) => {
3940
impl RandomInput for ($fty,) {
40-
fn get_cases(ctx: &CheckCtx) -> impl Iterator<Item = Self> {
41+
fn get_cases(ctx: &CheckCtx) -> impl ExactSizeIterator<Item = Self> {
4142
let count = iteration_count(ctx, GeneratorKind::Random, 0);
42-
random_floats(count).map(|f: $fty| (f,))
43+
let iter = random_floats(count).map(|f: $fty| (f,));
44+
KnownSize::new(iter, count)
4345
}
4446
}
4547

4648
impl RandomInput for ($fty, $fty) {
47-
fn get_cases(ctx: &CheckCtx) -> impl Iterator<Item = Self> {
49+
fn get_cases(ctx: &CheckCtx) -> impl ExactSizeIterator<Item = Self> {
4850
let count0 = iteration_count(ctx, GeneratorKind::Random, 0);
4951
let count1 = iteration_count(ctx, GeneratorKind::Random, 1);
50-
random_floats(count0)
51-
.flat_map(move |f1: $fty| random_floats(count1).map(move |f2: $fty| (f1, f2)))
52+
let iter = random_floats(count0)
53+
.flat_map(move |f1: $fty| random_floats(count1).map(move |f2: $fty| (f1, f2)));
54+
KnownSize::new(iter, count0 * count1)
5255
}
5356
}
5457

5558
impl RandomInput for ($fty, $fty, $fty) {
56-
fn get_cases(ctx: &CheckCtx) -> impl Iterator<Item = Self> {
59+
fn get_cases(ctx: &CheckCtx) -> impl ExactSizeIterator<Item = Self> {
5760
let count0 = iteration_count(ctx, GeneratorKind::Random, 0);
5861
let count1 = iteration_count(ctx, GeneratorKind::Random, 1);
5962
let count2 = iteration_count(ctx, GeneratorKind::Random, 2);
60-
random_floats(count0).flat_map(move |f1: $fty| {
63+
let iter = random_floats(count0).flat_map(move |f1: $fty| {
6164
random_floats(count1).flat_map(move |f2: $fty| {
6265
random_floats(count2).map(move |f3: $fty| (f1, f2, f3))
6366
})
64-
})
67+
});
68+
KnownSize::new(iter, count0 * count1 * count2)
6569
}
6670
}
6771

6872
impl RandomInput for (i32, $fty) {
69-
fn get_cases(ctx: &CheckCtx) -> impl Iterator<Item = Self> {
73+
fn get_cases(ctx: &CheckCtx) -> impl ExactSizeIterator<Item = Self> {
7074
let count0 = iteration_count(ctx, GeneratorKind::Random, 0);
7175
let count1 = iteration_count(ctx, GeneratorKind::Random, 1);
7276
let range0 = int_range(ctx, 0);
73-
random_ints(count0, range0)
74-
.flat_map(move |f1: i32| random_floats(count1).map(move |f2: $fty| (f1, f2)))
77+
let iter = random_ints(count0, range0)
78+
.flat_map(move |f1: i32| random_floats(count1).map(move |f2: $fty| (f1, f2)));
79+
KnownSize::new(iter, count0 * count1)
7580
}
7681
}
7782

7883
impl RandomInput for ($fty, i32) {
79-
fn get_cases(ctx: &CheckCtx) -> impl Iterator<Item = Self> {
84+
fn get_cases(ctx: &CheckCtx) -> impl ExactSizeIterator<Item = Self> {
8085
let count0 = iteration_count(ctx, GeneratorKind::Random, 0);
8186
let count1 = iteration_count(ctx, GeneratorKind::Random, 1);
8287
let range1 = int_range(ctx, 1);
83-
random_floats(count0).flat_map(move |f1: $fty| {
88+
let iter = random_floats(count0).flat_map(move |f1: $fty| {
8489
random_ints(count1, range1.clone()).map(move |f2: i32| (f1, f2))
85-
})
90+
});
91+
KnownSize::new(iter, count0 * count1)
8692
}
8793
}
8894
};

0 commit comments

Comments
 (0)