Skip to content

Test suite assumes that cos, exp, and other functions have deterministic precision #463

@RalfJung

Description

@RalfJung

After landing rust-lang/rust#138062, the portable-simd test suite no longer passes in Miri:

0.005650   ---- f32::cos::lanes_1 stdout ----
  0.000026   
  0.000010   thread 'f32::cos::lanes_1' panicked at /home/runner/work/miri-test-libstd/miri-test-libstd/rust-src-patched/library/portable-simd/crates/test_helpers/src/lib.rs:126:43:
  0.000008   called `Result::unwrap()` on an `Err` value: Fail(Reason("assertion failed: `(left == right)` \n  left: `[-0.7418637 (bf3deac8)]`,\n right: `[-0.7418636 (bf3deac6)]` at crates/test_helpers/src/lib.rs:183"), [-207806100.0])
  0.000008   note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
  0.000007   note: in Miri, you may have to set `MIRIFLAGS=-Zmiri-env-forward=RUST_BACKTRACE` for the environment variable to have an effect
  0.000007   
  0.000007   ---- f32::cos::lanes_2 stdout ----
  0.000007   
  0.000007   thread 'f32::cos::lanes_2' panicked at /home/runner/work/miri-test-libstd/miri-test-libstd/rust-src-patched/library/portable-simd/crates/test_helpers/src/lib.rs:126:43:
  0.000007   called `Result::unwrap()` on an `Err` value: Fail(Reason("assertion failed: `(left == right)` \n  left: `[-0.7418637 (bf3deac8), 1.0 (3f800000)]`,\n right: `[-0.74186367 (bf3deac7), 1.0 (3f800000)]` at crates/test_helpers/src/lib.rs:183"), [-207806100.0, 0.0])
  0.000022   failures:
  0.070860       f32::cos::lanes_1
  0.014170       f32::cos::lanes_2
  0.013913       f32::cos::lanes_3
  0.015623       f32::cos::lanes_6
  0.013689       f32::exp2::lanes_1
  0.014103       f32::exp2::lanes_2
  0.015393       f32::exp2::lanes_3
  0.013566       f32::exp2::lanes_6
  0.013604       f32::exp::lanes_1
  0.015736       f32::exp::lanes_2
  0.013619       f32::exp::lanes_3
  0.013681       f32::exp::lanes_6
  0.013655       f32::ln::lanes_1
  0.015216       f32::ln::lanes_2
  0.013688       f32::ln::lanes_3
  0.013658       f32::ln::lanes_6
  0.015251       f32::log10::lanes_1
  0.013628       f32::log10::lanes_2
  0.013611       f32::log10::lanes_3
  0.015248       f32::log10::lanes_6
  0.013703       f32::log2::lanes_1
  0.013625       f32::log2::lanes_2
  0.015322       f32::log2::lanes_3
  0.014007       f32::log2::lanes_6
  0.013735       f32::log::lanes_2
  0.015216       f32::log::lanes_3
  0.013565       f32::log::lanes_6
  0.013636       f32::sin::lanes_1
  0.015283       f32::sin::lanes_2
  0.014103       f32::sin::lanes_3
  0.013599       f32::sin::lanes_6
  0.015191       f64::cos::lanes_1
  0.013988       f64::cos::lanes_2
  0.013582       f64::cos::lanes_3
  0.013634       f64::cos::lanes_6
  0.015589       f64::exp2::lanes_1
  0.013691       f64::exp2::lanes_2
  0.013704       f64::exp2::lanes_3
  0.015679       f64::exp2::lanes_6
  0.013647       f64::exp::lanes_1
  0.014061       f64::exp::lanes_2
  0.015406       f64::exp::lanes_3
  0.013673       f64::exp::lanes_6
  0.013610       f64::ln::lanes_1
  0.015338       f64::ln::lanes_2
  0.013550       f64::ln::lanes_3
  0.013579       f64::ln::lanes_6
  0.015199       f64::log10::lanes_1
  0.013582       f64::log10::lanes_2
  0.013587       f64::log10::lanes_3
  0.015058       f64::log10::lanes_6
  0.013520       f64::log2::lanes_1
  0.013474       f64::log2::lanes_2
  0.013490       f64::log2::lanes_3
  0.014898       f64::log2::lanes_6
  0.013661       f64::log::lanes_1
  0.013527       f64::log::lanes_2
  0.014919       f64::log::lanes_3
  0.013641       f64::log::lanes_6
  0.013585       f64::sin::lanes_1
  0.015452       f64::sin::lanes_2
  0.013729       f64::sin::lanes_3
  0.013687       f64::sin::lanes_6

These functions do not have guaranteed precision, so results should probably by compared with assert_approx_ex instead of assert_eq, at least when running in Miri.

Cc @LorrensP-2158466

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions