#![allow(
clippy::approx_constant,
clippy::excessive_precision,
clippy::type_complexity
)]
use super::math_kernels::*;
use super::tests_util::{Report, check};
use crate::{Array, Float};
fn rint<F: Float>(x: F) -> F {
Array::scalar(x).rint().item()
}
fn fix<F: Float>(x: F) -> F {
Array::scalar(x).fix().item()
}
fn fabs<F: Float>(x: F) -> F {
Array::scalar(x).fabs().item()
}
fn positive<F: Float>(x: F) -> F {
Array::scalar(x).positive().item()
}
fn negative<F: Float>(x: F) -> F {
Array::scalar(x).negative().item()
}
#[test]
fn sinc_f64() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(f64::NAN, f64::NAN),
(f64::INFINITY, f64::NAN),
(f64::NEG_INFINITY, f64::NAN),
(0.0, 1.0),
(-0.0, 1.0),
(1.0, 3.8981718325193755e-17),
(-1.0, 3.8981718325193755e-17),
(0.5, 0.6366197723675814),
(-0.5, 0.6366197723675814),
(1.5, -0.2122065907891938),
(-1.5, -0.2122065907891938),
(2.5, 0.12732395447351627),
(-2.5, 0.12732395447351627),
(3.0, 3.8981718325193755e-17),
(4.5, 0.0707355302630646),
(-7.25, -0.031045390212314006),
(8.0, -3.8981718325193755e-17),
(8.000001, 1.2499998419395415e-07),
(100.0, 6.2528371445095934e-18),
(123456.789, 1.5866568945854314e-06),
(1e+16, -1.1943397231451733e-17),
(0.1, 0.983631643083466),
(-0.1, 0.983631643083466),
(1e-300, 1.0),
(-1e-300, 1.0),
(5e-324, 1.0),
(-5e-324, 1.0),
(2.2250738585072014e-308, 1.0),
(1e+300, -2.872633251731255e-301),
(-1e+300, -2.872633251731255e-301),
(1.7976931348623157e+308, f64::NAN),
(-1.7976931348623157e+308, f64::NAN),
];
for &(x, want) in CASES {
check("sinc", &format!("{x:?}"), sinc(x), want, 1e-12, 0.0);
}
}
#[test]
fn i0_f64() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(f64::NAN, f64::NAN),
(f64::INFINITY, f64::NAN),
(f64::NEG_INFINITY, f64::NAN),
(0.0, 1.0),
(-0.0, 1.0),
(1.0, 1.2660658777520082),
(-1.0, 1.2660658777520082),
(0.5, 1.0634833707413234),
(-0.5, 1.0634833707413234),
(1.5, 1.6467231897728907),
(-1.5, 1.6467231897728907),
(2.5, 3.289839144050123),
(-2.5, 3.289839144050123),
(3.0, 4.880792585865024),
(4.5, 17.481171855609276),
(-7.25, 212.55834116279757),
(8.0, 427.56411572180474),
(8.000001, 427.56451559513005),
(100.0, 1.0737517071310738e+42),
(123456.789, f64::INFINITY),
(1e+16, f64::INFINITY),
(0.1, 1.0025015629340956),
(-0.1, 1.0025015629340956),
(1e-300, 1.0),
(-1e-300, 1.0),
(5e-324, 1.0),
(-5e-324, 1.0),
(2.2250738585072014e-308, 1.0),
(1e+300, f64::INFINITY),
(-1e+300, f64::INFINITY),
(1.7976931348623157e+308, f64::INFINITY),
(-1.7976931348623157e+308, f64::INFINITY),
];
for &(x, want) in CASES {
check("i0", &format!("{x:?}"), i0(x), want, 1e-12, 0.0);
}
}
#[test]
fn deg2rad_f64() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY),
(f64::NEG_INFINITY, f64::NEG_INFINITY),
(0.0, 0.0),
(-0.0, -0.0),
(1.0, 0.017453292519943295),
(-1.0, -0.017453292519943295),
(0.5, 0.008726646259971648),
(-0.5, -0.008726646259971648),
(1.5, 0.026179938779914945),
(-1.5, -0.026179938779914945),
(2.5, 0.04363323129985824),
(-2.5, -0.04363323129985824),
(3.0, 0.05235987755982989),
(4.5, 0.07853981633974483),
(-7.25, -0.1265363707695889),
(8.0, 0.13962634015954636),
(8.000001, 0.13962635761283887),
(100.0, 1.7453292519943295),
(123456.789, 2154.727451989918),
(1e+16, 174532925199432.97),
(0.1, 0.0017453292519943296),
(-0.1, -0.0017453292519943296),
(1e-300, 1.7453292519943295e-302),
(-1e-300, -1.7453292519943295e-302),
(5e-324, 0.0),
(-5e-324, -0.0),
(2.2250738585072014e-308, 3.8834864931005e-310),
(1e+300, 1.7453292519943297e+298),
(-1e+300, -1.7453292519943297e+298),
(1.7976931348623157e+308, 3.1375664143845866e+306),
(-1.7976931348623157e+308, -3.1375664143845866e+306),
];
for &(x, want) in CASES {
check("deg2rad", &format!("{x:?}"), deg2rad(x), want, 0.0, 0.0);
}
}
#[test]
fn rad2deg_f64() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY),
(f64::NEG_INFINITY, f64::NEG_INFINITY),
(0.0, 0.0),
(-0.0, -0.0),
(1.0, 57.29577951308232),
(-1.0, -57.29577951308232),
(0.5, 28.64788975654116),
(-0.5, -28.64788975654116),
(1.5, 85.94366926962348),
(-1.5, -85.94366926962348),
(2.5, 143.2394487827058),
(-2.5, -143.2394487827058),
(3.0, 171.88733853924697),
(4.5, 257.8310078088705),
(-7.25, -415.39440146984685),
(8.0, 458.3662361046586),
(8.000001, 458.36629340043805),
(100.0, 5729.5779513082325),
(123456.789, 7073552.961937128),
(1e+16, 5.7295779513082323e+17),
(0.1, 5.729577951308233),
(-0.1, -5.729577951308233),
(1e-300, 5.729577951308232e-299),
(-1e-300, -5.729577951308232e-299),
(5e-324, 2.8e-322),
(-5e-324, -2.8e-322),
(2.2250738585072014e-308, 1.2748734119735194e-306),
(1e+300, 5.729577951308233e+301),
(-1e+300, -5.729577951308233e+301),
(1.7976931348623157e+308, f64::INFINITY),
(-1.7976931348623157e+308, f64::NEG_INFINITY),
];
for &(x, want) in CASES {
check("rad2deg", &format!("{x:?}"), rad2deg(x), want, 0.0, 0.0);
}
}
#[test]
fn rint_f64() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY),
(f64::NEG_INFINITY, f64::NEG_INFINITY),
(0.0, 0.0),
(-0.0, -0.0),
(1.0, 1.0),
(-1.0, -1.0),
(0.5, 0.0),
(-0.5, -0.0),
(1.5, 2.0),
(-1.5, -2.0),
(2.5, 2.0),
(-2.5, -2.0),
(3.0, 3.0),
(4.5, 4.0),
(-7.25, -7.0),
(8.0, 8.0),
(8.000001, 8.0),
(100.0, 100.0),
(123456.789, 123457.0),
(1e+16, 1e+16),
(0.1, 0.0),
(-0.1, -0.0),
(1e-300, 0.0),
(-1e-300, -0.0),
(5e-324, 0.0),
(-5e-324, -0.0),
(2.2250738585072014e-308, 0.0),
(1e+300, 1e+300),
(-1e+300, -1e+300),
(1.7976931348623157e+308, 1.7976931348623157e+308),
(-1.7976931348623157e+308, -1.7976931348623157e+308),
(0.5, 0.0),
(1.5, 2.0),
(2.5, 2.0),
(-0.4, -0.0),
(-0.6, -1.0),
(4503599627370497.0, 4503599627370497.0),
(8388609.0, 8388609.0),
];
for &(x, want) in CASES {
check("rint", &format!("{x:?}"), rint(x), want, 0.0, 0.0);
}
}
#[test]
fn fix_f64() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY),
(f64::NEG_INFINITY, f64::NEG_INFINITY),
(0.0, 0.0),
(-0.0, -0.0),
(1.0, 1.0),
(-1.0, -1.0),
(0.5, 0.0),
(-0.5, -0.0),
(1.5, 1.0),
(-1.5, -1.0),
(2.5, 2.0),
(-2.5, -2.0),
(3.0, 3.0),
(4.5, 4.0),
(-7.25, -7.0),
(8.0, 8.0),
(8.000001, 8.0),
(100.0, 100.0),
(123456.789, 123456.0),
(1e+16, 1e+16),
(0.1, 0.0),
(-0.1, -0.0),
(1e-300, 0.0),
(-1e-300, -0.0),
(5e-324, 0.0),
(-5e-324, -0.0),
(2.2250738585072014e-308, 0.0),
(1e+300, 1e+300),
(-1e+300, -1e+300),
(1.7976931348623157e+308, 1.7976931348623157e+308),
(-1.7976931348623157e+308, -1.7976931348623157e+308),
(-0.4, -0.0),
(0.4, 0.0),
(2.7, 2.0),
(-2.7, -2.0),
];
for &(x, want) in CASES {
check("fix", &format!("{x:?}"), fix(x), want, 0.0, 0.0);
}
}
#[test]
fn fabs_f64() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY),
(f64::NEG_INFINITY, f64::INFINITY),
(0.0, 0.0),
(-0.0, 0.0),
(1.0, 1.0),
(-1.0, 1.0),
(0.5, 0.5),
(-0.5, 0.5),
(1.5, 1.5),
(-1.5, 1.5),
(2.5, 2.5),
(-2.5, 2.5),
(3.0, 3.0),
(4.5, 4.5),
(-7.25, 7.25),
(8.0, 8.0),
(8.000001, 8.000001),
(100.0, 100.0),
(123456.789, 123456.789),
(1e+16, 1e+16),
(0.1, 0.1),
(-0.1, 0.1),
(1e-300, 1e-300),
(-1e-300, 1e-300),
(5e-324, 5e-324),
(-5e-324, 5e-324),
(2.2250738585072014e-308, 2.2250738585072014e-308),
(1e+300, 1e+300),
(-1e+300, 1e+300),
(1.7976931348623157e+308, 1.7976931348623157e+308),
(-1.7976931348623157e+308, 1.7976931348623157e+308),
];
for &(x, want) in CASES {
check("fabs", &format!("{x:?}"), fabs(x), want, 0.0, 0.0);
}
}
#[test]
fn positive_f64() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY),
(f64::NEG_INFINITY, f64::NEG_INFINITY),
(0.0, 0.0),
(-0.0, -0.0),
(1.0, 1.0),
(-1.0, -1.0),
(0.5, 0.5),
(-0.5, -0.5),
(1.5, 1.5),
(-1.5, -1.5),
(2.5, 2.5),
(-2.5, -2.5),
(3.0, 3.0),
(4.5, 4.5),
(-7.25, -7.25),
(8.0, 8.0),
(8.000001, 8.000001),
(100.0, 100.0),
(123456.789, 123456.789),
(1e+16, 1e+16),
(0.1, 0.1),
(-0.1, -0.1),
(1e-300, 1e-300),
(-1e-300, -1e-300),
(5e-324, 5e-324),
(-5e-324, -5e-324),
(2.2250738585072014e-308, 2.2250738585072014e-308),
(1e+300, 1e+300),
(-1e+300, -1e+300),
(1.7976931348623157e+308, 1.7976931348623157e+308),
(-1.7976931348623157e+308, -1.7976931348623157e+308),
];
for &(x, want) in CASES {
check("positive", &format!("{x:?}"), positive(x), want, 0.0, 0.0);
}
}
#[test]
fn negative_f64() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(f64::NAN, f64::NAN),
(f64::INFINITY, f64::NEG_INFINITY),
(f64::NEG_INFINITY, f64::INFINITY),
(0.0, -0.0),
(-0.0, 0.0),
(1.0, -1.0),
(-1.0, 1.0),
(0.5, -0.5),
(-0.5, 0.5),
(1.5, -1.5),
(-1.5, 1.5),
(2.5, -2.5),
(-2.5, 2.5),
(3.0, -3.0),
(4.5, -4.5),
(-7.25, 7.25),
(8.0, -8.0),
(8.000001, -8.000001),
(100.0, -100.0),
(123456.789, -123456.789),
(1e+16, -1e+16),
(0.1, -0.1),
(-0.1, 0.1),
(1e-300, -1e-300),
(-1e-300, 1e-300),
(5e-324, -5e-324),
(-5e-324, 5e-324),
(2.2250738585072014e-308, -2.2250738585072014e-308),
(1e+300, -1e+300),
(-1e+300, 1e+300),
(1.7976931348623157e+308, -1.7976931348623157e+308),
(-1.7976931348623157e+308, 1.7976931348623157e+308),
];
for &(x, want) in CASES {
check("negative", &format!("{x:?}"), negative(x), want, 0.0, 0.0);
}
}
#[test]
fn spacing_f64() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(f64::NAN, f64::NAN),
(f64::INFINITY, f64::NAN),
(f64::NEG_INFINITY, f64::NAN),
(0.0, 5e-324),
(-0.0, 5e-324),
(1.0, 2.220446049250313e-16),
(-1.0, -2.220446049250313e-16),
(0.5, 1.1102230246251565e-16),
(-0.5, -1.1102230246251565e-16),
(1.5, 2.220446049250313e-16),
(-1.5, -2.220446049250313e-16),
(2.5, 4.440892098500626e-16),
(-2.5, -4.440892098500626e-16),
(3.0, 4.440892098500626e-16),
(4.5, 8.881784197001252e-16),
(-7.25, -8.881784197001252e-16),
(8.0, 1.7763568394002505e-15),
(8.000001, 1.7763568394002505e-15),
(100.0, 1.4210854715202004e-14),
(123456.789, 1.4551915228366852e-11),
(1e+16, 2.0),
(0.1, 1.3877787807814457e-17),
(-0.1, -1.3877787807814457e-17),
(1e-300, 1.6578092e-316),
(-1e-300, -1.6578092e-316),
(5e-324, 5e-324),
(-5e-324, -5e-324),
(2.2250738585072014e-308, 5e-324),
(1e+300, 1.487016908477783e+284),
(-1e+300, -1.487016908477783e+284),
(1.7976931348623157e+308, f64::INFINITY),
(-1.7976931348623157e+308, f64::NEG_INFINITY),
];
for &(x, want) in CASES {
check("spacing", &format!("{x:?}"), spacing(x), want, 0.0, 0.0);
}
}
#[test]
fn sinc_f32() {
let _report = Report;
const CASES: &[(f32, f32)] = &[
(f32::NAN, f32::NAN),
(f32::INFINITY, f32::NAN),
(f32::NEG_INFINITY, f32::NAN),
(0.0, 1.0),
(-0.0, 1.0),
(1.0, -2.7827534e-08),
(-1.0, -2.7827534e-08),
(0.5, 0.63661975),
(-0.5, 0.63661975),
(1.5, -0.21220659),
(-1.5, -0.21220659),
(2.5, 0.12732396),
(-2.5, 0.12732396),
(3.0, -2.5305382e-09),
(4.5, 0.07073553),
(-7.25, -0.031045383),
(8.0, 2.7827534e-08),
(100.0, 1.8720616e-08),
(123456.79, 1.5944861e-06),
(1e+16, 2.890816e-17),
(0.1, 0.9836317),
(-0.1, 0.9836317),
(1e-30, 1.0),
(-1e-30, 1.0),
(1e-45, 1.0),
(-1e-45, 1.0),
(1.1754944e-38, 1.0),
(1e+30, -2.490513e-31),
(-1e+30, -2.490513e-31),
(3.4028235e+38, f32::NAN),
(-3.4028235e+38, f32::NAN),
(89.0, 2.0172366e-09),
(88.0, 7.612179e-08),
];
for &(x, want) in CASES {
check("sinc", &format!("{x:?}"), sinc(x), want, 2e-5, 0.0);
}
}
#[test]
fn i0_f32() {
let _report = Report;
const CASES: &[(f32, f32)] = &[
(f32::NAN, f32::NAN),
(f32::INFINITY, f32::NAN),
(f32::NEG_INFINITY, f32::NAN),
(0.0, 0.99999994),
(-0.0, 0.99999994),
(1.0, 1.2660661),
(-1.0, 1.2660661),
(0.5, 1.0634835),
(-0.5, 1.0634835),
(1.5, 1.6467233),
(-1.5, 1.6467233),
(2.5, 3.2898393),
(-2.5, 3.2898393),
(3.0, 4.8807926),
(4.5, 17.48117),
(-7.25, 212.55836),
(8.0, 427.5642),
(100.0, f32::INFINITY),
(123456.79, f32::INFINITY),
(1e+16, f32::INFINITY),
(0.1, 1.0025016),
(-0.1, 1.0025016),
(1e-30, 0.99999994),
(-1e-30, 0.99999994),
(1e-45, 0.99999994),
(-1e-45, 0.99999994),
(1.1754944e-38, 0.99999994),
(1e+30, f32::INFINITY),
(-1e+30, f32::INFINITY),
(3.4028235e+38, f32::INFINITY),
(-3.4028235e+38, f32::INFINITY),
(89.0, f32::INFINITY),
(88.0, 7.0340195e+36),
];
for &(x, want) in CASES {
check("i0", &format!("{x:?}"), i0(x), want, 2e-5, 0.0);
}
}
#[test]
fn deg2rad_f32() {
let _report = Report;
const CASES: &[(f32, f32)] = &[
(f32::NAN, f32::NAN),
(f32::INFINITY, f32::INFINITY),
(f32::NEG_INFINITY, f32::NEG_INFINITY),
(0.0, 0.0),
(-0.0, -0.0),
(1.0, 0.017453292),
(-1.0, -0.017453292),
(0.5, 0.008726646),
(-0.5, -0.008726646),
(1.5, 0.02617994),
(-1.5, -0.02617994),
(2.5, 0.04363323),
(-2.5, -0.04363323),
(3.0, 0.05235988),
(4.5, 0.07853982),
(-7.25, -0.12653637),
(8.0, 0.13962634),
(100.0, 1.7453293),
(123456.79, 2154.7275),
(1e+16, 1.7453293e+14),
(0.1, 0.0017453292),
(-0.1, -0.0017453292),
(1e-30, 1.7453292e-32),
(-1e-30, -1.7453292e-32),
(1e-45, 0.0),
(-1e-45, -0.0),
(1.1754944e-38, 2.05163e-40),
(1e+30, 1.7453293e+28),
(-1e+30, -1.7453293e+28),
(3.4028235e+38, 5.939047e+36),
(-3.4028235e+38, -5.939047e+36),
(89.0, 1.553343),
(88.0, 1.5358897),
];
for &(x, want) in CASES {
check("deg2rad", &format!("{x:?}"), deg2rad(x), want, 0.0, 0.0);
}
}
#[test]
fn rad2deg_f32() {
let _report = Report;
const CASES: &[(f32, f32)] = &[
(f32::NAN, f32::NAN),
(f32::INFINITY, f32::INFINITY),
(f32::NEG_INFINITY, f32::NEG_INFINITY),
(0.0, 0.0),
(-0.0, -0.0),
(1.0, 57.295776),
(-1.0, -57.295776),
(0.5, 28.647888),
(-0.5, -28.647888),
(1.5, 85.943665),
(-1.5, -85.943665),
(2.5, 143.23944),
(-2.5, -143.23944),
(3.0, 171.88733),
(4.5, 257.831),
(-7.25, -415.39438),
(8.0, 458.3662),
(100.0, 5729.5776),
(123456.79, 7.0735525e+06),
(1e+16, 5.7295778e+17),
(0.1, 5.7295775),
(-0.1, -5.7295775),
(1e-30, 5.729578e-29),
(-1e-30, -5.729578e-29),
(1e-45, 8e-44),
(-1e-45, -8e-44),
(1.1754944e-38, 6.735086e-37),
(1e+30, 5.7295777e+31),
(-1e+30, -5.7295777e+31),
(3.4028235e+38, f32::INFINITY),
(-3.4028235e+38, f32::NEG_INFINITY),
(89.0, 5099.324),
(88.0, 5042.0283),
];
for &(x, want) in CASES {
check("rad2deg", &format!("{x:?}"), rad2deg(x), want, 0.0, 0.0);
}
}
#[test]
fn rint_f32() {
let _report = Report;
const CASES: &[(f32, f32)] = &[
(f32::NAN, f32::NAN),
(f32::INFINITY, f32::INFINITY),
(f32::NEG_INFINITY, f32::NEG_INFINITY),
(0.0, 0.0),
(-0.0, -0.0),
(1.0, 1.0),
(-1.0, -1.0),
(0.5, 0.0),
(-0.5, -0.0),
(1.5, 2.0),
(-1.5, -2.0),
(2.5, 2.0),
(-2.5, -2.0),
(3.0, 3.0),
(4.5, 4.0),
(-7.25, -7.0),
(8.0, 8.0),
(100.0, 100.0),
(123456.79, 123457.0),
(1e+16, 1e+16),
(0.1, 0.0),
(-0.1, -0.0),
(1e-30, 0.0),
(-1e-30, -0.0),
(1e-45, 0.0),
(-1e-45, -0.0),
(1.1754944e-38, 0.0),
(1e+30, 1e+30),
(-1e+30, -1e+30),
(3.4028235e+38, 3.4028235e+38),
(-3.4028235e+38, -3.4028235e+38),
(89.0, 89.0),
(88.0, 88.0),
(0.5, 0.0),
(1.5, 2.0),
(2.5, 2.0),
(-0.4, -0.0),
(-0.6, -1.0),
(4.5035996e+15, 4.5035996e+15),
(8.388609e+06, 8.388609e+06),
];
for &(x, want) in CASES {
check("rint", &format!("{x:?}"), rint(x), want, 0.0, 0.0);
}
}
#[test]
fn fix_f32() {
let _report = Report;
const CASES: &[(f32, f32)] = &[
(f32::NAN, f32::NAN),
(f32::INFINITY, f32::INFINITY),
(f32::NEG_INFINITY, f32::NEG_INFINITY),
(0.0, 0.0),
(-0.0, -0.0),
(1.0, 1.0),
(-1.0, -1.0),
(0.5, 0.0),
(-0.5, -0.0),
(1.5, 1.0),
(-1.5, -1.0),
(2.5, 2.0),
(-2.5, -2.0),
(3.0, 3.0),
(4.5, 4.0),
(-7.25, -7.0),
(8.0, 8.0),
(100.0, 100.0),
(123456.79, 123456.0),
(1e+16, 1e+16),
(0.1, 0.0),
(-0.1, -0.0),
(1e-30, 0.0),
(-1e-30, -0.0),
(1e-45, 0.0),
(-1e-45, -0.0),
(1.1754944e-38, 0.0),
(1e+30, 1e+30),
(-1e+30, -1e+30),
(3.4028235e+38, 3.4028235e+38),
(-3.4028235e+38, -3.4028235e+38),
(89.0, 89.0),
(88.0, 88.0),
(-0.4, -0.0),
(0.4, 0.0),
(2.7, 2.0),
(-2.7, -2.0),
];
for &(x, want) in CASES {
check("fix", &format!("{x:?}"), fix(x), want, 0.0, 0.0);
}
}
#[test]
fn fabs_f32() {
let _report = Report;
const CASES: &[(f32, f32)] = &[
(f32::NAN, f32::NAN),
(f32::INFINITY, f32::INFINITY),
(f32::NEG_INFINITY, f32::INFINITY),
(0.0, 0.0),
(-0.0, 0.0),
(1.0, 1.0),
(-1.0, 1.0),
(0.5, 0.5),
(-0.5, 0.5),
(1.5, 1.5),
(-1.5, 1.5),
(2.5, 2.5),
(-2.5, 2.5),
(3.0, 3.0),
(4.5, 4.5),
(-7.25, 7.25),
(8.0, 8.0),
(100.0, 100.0),
(123456.79, 123456.79),
(1e+16, 1e+16),
(0.1, 0.1),
(-0.1, 0.1),
(1e-30, 1e-30),
(-1e-30, 1e-30),
(1e-45, 1e-45),
(-1e-45, 1e-45),
(1.1754944e-38, 1.1754944e-38),
(1e+30, 1e+30),
(-1e+30, 1e+30),
(3.4028235e+38, 3.4028235e+38),
(-3.4028235e+38, 3.4028235e+38),
(89.0, 89.0),
(88.0, 88.0),
];
for &(x, want) in CASES {
check("fabs", &format!("{x:?}"), fabs(x), want, 0.0, 0.0);
}
}
#[test]
fn positive_f32() {
let _report = Report;
const CASES: &[(f32, f32)] = &[
(f32::NAN, f32::NAN),
(f32::INFINITY, f32::INFINITY),
(f32::NEG_INFINITY, f32::NEG_INFINITY),
(0.0, 0.0),
(-0.0, -0.0),
(1.0, 1.0),
(-1.0, -1.0),
(0.5, 0.5),
(-0.5, -0.5),
(1.5, 1.5),
(-1.5, -1.5),
(2.5, 2.5),
(-2.5, -2.5),
(3.0, 3.0),
(4.5, 4.5),
(-7.25, -7.25),
(8.0, 8.0),
(100.0, 100.0),
(123456.79, 123456.79),
(1e+16, 1e+16),
(0.1, 0.1),
(-0.1, -0.1),
(1e-30, 1e-30),
(-1e-30, -1e-30),
(1e-45, 1e-45),
(-1e-45, -1e-45),
(1.1754944e-38, 1.1754944e-38),
(1e+30, 1e+30),
(-1e+30, -1e+30),
(3.4028235e+38, 3.4028235e+38),
(-3.4028235e+38, -3.4028235e+38),
(89.0, 89.0),
(88.0, 88.0),
];
for &(x, want) in CASES {
check("positive", &format!("{x:?}"), positive(x), want, 0.0, 0.0);
}
}
#[test]
fn negative_f32() {
let _report = Report;
const CASES: &[(f32, f32)] = &[
(f32::NAN, f32::NAN),
(f32::INFINITY, f32::NEG_INFINITY),
(f32::NEG_INFINITY, f32::INFINITY),
(0.0, -0.0),
(-0.0, 0.0),
(1.0, -1.0),
(-1.0, 1.0),
(0.5, -0.5),
(-0.5, 0.5),
(1.5, -1.5),
(-1.5, 1.5),
(2.5, -2.5),
(-2.5, 2.5),
(3.0, -3.0),
(4.5, -4.5),
(-7.25, 7.25),
(8.0, -8.0),
(100.0, -100.0),
(123456.79, -123456.79),
(1e+16, -1e+16),
(0.1, -0.1),
(-0.1, 0.1),
(1e-30, -1e-30),
(-1e-30, 1e-30),
(1e-45, -1e-45),
(-1e-45, 1e-45),
(1.1754944e-38, -1.1754944e-38),
(1e+30, -1e+30),
(-1e+30, 1e+30),
(3.4028235e+38, -3.4028235e+38),
(-3.4028235e+38, 3.4028235e+38),
(89.0, -89.0),
(88.0, -88.0),
];
for &(x, want) in CASES {
check("negative", &format!("{x:?}"), negative(x), want, 0.0, 0.0);
}
}
#[test]
fn spacing_f32() {
let _report = Report;
const CASES: &[(f32, f32)] = &[
(f32::NAN, f32::NAN),
(f32::INFINITY, f32::NAN),
(f32::NEG_INFINITY, f32::NAN),
(0.0, 1e-45),
(-0.0, 1e-45),
(1.0, 1.1920929e-07),
(-1.0, -1.1920929e-07),
(0.5, 5.9604645e-08),
(-0.5, -5.9604645e-08),
(1.5, 1.1920929e-07),
(-1.5, -1.1920929e-07),
(2.5, 2.3841858e-07),
(-2.5, -2.3841858e-07),
(3.0, 2.3841858e-07),
(4.5, 4.7683716e-07),
(-7.25, -4.7683716e-07),
(8.0, 9.536743e-07),
(100.0, 7.6293945e-06),
(123456.79, 0.0078125),
(1e+16, 1.0737418e+09),
(0.1, 7.450581e-09),
(-0.1, -7.450581e-09),
(1e-30, 9.403955e-38),
(-1e-30, -9.403955e-38),
(1e-45, 1e-45),
(-1e-45, -1e-45),
(1.1754944e-38, 1e-45),
(1e+30, 7.5557864e+22),
(-1e+30, -7.5557864e+22),
(3.4028235e+38, f32::INFINITY),
(-3.4028235e+38, f32::NEG_INFINITY),
(89.0, 7.6293945e-06),
(88.0, 7.6293945e-06),
];
for &(x, want) in CASES {
check("spacing", &format!("{x:?}"), spacing(x), want, 0.0, 0.0);
}
}
#[test]
fn signbit_f64() {
let _report = Report;
const CASES: &[(f64, bool)] = &[
(f64::NAN, false),
(f64::INFINITY, false),
(f64::NEG_INFINITY, true),
(0.0, false),
(-0.0, true),
(1.0, false),
(-1.0, true),
(0.5, false),
(-0.5, true),
(1.5, false),
(-1.5, true),
(2.5, false),
(-2.5, true),
(3.0, false),
(4.5, false),
(-7.25, true),
(8.0, false),
(8.000001, false),
(100.0, false),
(123456.789, false),
(1e+16, false),
(0.1, false),
(-0.1, true),
(1e-300, false),
(-1e-300, true),
(5e-324, false),
(-5e-324, true),
(2.2250738585072014e-308, false),
(1e+300, false),
(-1e+300, true),
(1.7976931348623157e+308, false),
(-1.7976931348623157e+308, true),
];
for &(x, want) in CASES {
assert_eq!(signbit(x), want, "signbit({x:?})");
}
assert!(signbit(f64::from_bits(0xFFF8_0000_0000_0000)));
assert!(!signbit(f32::NAN));
assert!(signbit(-0.0f32));
}
#[test]
fn fmod_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN),
(f64::NAN, 0.0, f64::NAN),
(f64::NAN, -0.0, f64::NAN),
(f64::NAN, 1.0, f64::NAN),
(f64::NAN, -1.0, f64::NAN),
(f64::NAN, 2.0, f64::NAN),
(f64::NAN, -2.0, f64::NAN),
(f64::NAN, 5.0, f64::NAN),
(f64::NAN, -5.0, f64::NAN),
(f64::NAN, 5.5, f64::NAN),
(f64::NAN, -5.5, f64::NAN),
(f64::NAN, 0.3, f64::NAN),
(f64::NAN, -0.3, f64::NAN),
(f64::NAN, 7.0, f64::NAN),
(f64::NAN, 1e+300, f64::NAN),
(f64::NAN, -1e+300, f64::NAN),
(f64::NAN, 5e-324, f64::NAN),
(f64::NAN, -5e-324, f64::NAN),
(f64::NAN, 1e-10, f64::NAN),
(f64::NAN, 3.0, f64::NAN),
(f64::NAN, -3.0, f64::NAN),
(f64::INFINITY, f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY, f64::NAN),
(f64::INFINITY, f64::NEG_INFINITY, f64::NAN),
(f64::INFINITY, 0.0, f64::NAN),
(f64::INFINITY, -0.0, f64::NAN),
(f64::INFINITY, 1.0, f64::NAN),
(f64::INFINITY, -1.0, f64::NAN),
(f64::INFINITY, 2.0, f64::NAN),
(f64::INFINITY, -2.0, f64::NAN),
(f64::INFINITY, 5.0, f64::NAN),
(f64::INFINITY, -5.0, f64::NAN),
(f64::INFINITY, 5.5, f64::NAN),
(f64::INFINITY, -5.5, f64::NAN),
(f64::INFINITY, 0.3, f64::NAN),
(f64::INFINITY, -0.3, f64::NAN),
(f64::INFINITY, 7.0, f64::NAN),
(f64::INFINITY, 1e+300, f64::NAN),
(f64::INFINITY, -1e+300, f64::NAN),
(f64::INFINITY, 5e-324, f64::NAN),
(f64::INFINITY, -5e-324, f64::NAN),
(f64::INFINITY, 1e-10, f64::NAN),
(f64::INFINITY, 3.0, f64::NAN),
(f64::INFINITY, -3.0, f64::NAN),
(f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::INFINITY, f64::NAN),
(f64::NEG_INFINITY, f64::NEG_INFINITY, f64::NAN),
(f64::NEG_INFINITY, 0.0, f64::NAN),
(f64::NEG_INFINITY, -0.0, f64::NAN),
(f64::NEG_INFINITY, 1.0, f64::NAN),
(f64::NEG_INFINITY, -1.0, f64::NAN),
(f64::NEG_INFINITY, 2.0, f64::NAN),
(f64::NEG_INFINITY, -2.0, f64::NAN),
(f64::NEG_INFINITY, 5.0, f64::NAN),
(f64::NEG_INFINITY, -5.0, f64::NAN),
(f64::NEG_INFINITY, 5.5, f64::NAN),
(f64::NEG_INFINITY, -5.5, f64::NAN),
(f64::NEG_INFINITY, 0.3, f64::NAN),
(f64::NEG_INFINITY, -0.3, f64::NAN),
(f64::NEG_INFINITY, 7.0, f64::NAN),
(f64::NEG_INFINITY, 1e+300, f64::NAN),
(f64::NEG_INFINITY, -1e+300, f64::NAN),
(f64::NEG_INFINITY, 5e-324, f64::NAN),
(f64::NEG_INFINITY, -5e-324, f64::NAN),
(f64::NEG_INFINITY, 1e-10, f64::NAN),
(f64::NEG_INFINITY, 3.0, f64::NAN),
(f64::NEG_INFINITY, -3.0, f64::NAN),
(0.0, f64::NAN, f64::NAN),
(0.0, f64::INFINITY, 0.0),
(0.0, f64::NEG_INFINITY, 0.0),
(0.0, 0.0, f64::NAN),
(0.0, -0.0, f64::NAN),
(0.0, 1.0, 0.0),
(0.0, -1.0, 0.0),
(0.0, 2.0, 0.0),
(0.0, -2.0, 0.0),
(0.0, 5.0, 0.0),
(0.0, -5.0, 0.0),
(0.0, 5.5, 0.0),
(0.0, -5.5, 0.0),
(0.0, 0.3, 0.0),
(0.0, -0.3, 0.0),
(0.0, 7.0, 0.0),
(0.0, 1e+300, 0.0),
(0.0, -1e+300, 0.0),
(0.0, 5e-324, 0.0),
(0.0, -5e-324, 0.0),
(0.0, 1e-10, 0.0),
(0.0, 3.0, 0.0),
(0.0, -3.0, 0.0),
(-0.0, f64::NAN, f64::NAN),
(-0.0, f64::INFINITY, -0.0),
(-0.0, f64::NEG_INFINITY, -0.0),
(-0.0, 0.0, f64::NAN),
(-0.0, -0.0, f64::NAN),
(-0.0, 1.0, -0.0),
(-0.0, -1.0, -0.0),
(-0.0, 2.0, -0.0),
(-0.0, -2.0, -0.0),
(-0.0, 5.0, -0.0),
(-0.0, -5.0, -0.0),
(-0.0, 5.5, -0.0),
(-0.0, -5.5, -0.0),
(-0.0, 0.3, -0.0),
(-0.0, -0.3, -0.0),
(-0.0, 7.0, -0.0),
(-0.0, 1e+300, -0.0),
(-0.0, -1e+300, -0.0),
(-0.0, 5e-324, -0.0),
(-0.0, -5e-324, -0.0),
(-0.0, 1e-10, -0.0),
(-0.0, 3.0, -0.0),
(-0.0, -3.0, -0.0),
(1.0, f64::NAN, f64::NAN),
(1.0, f64::INFINITY, 1.0),
(1.0, f64::NEG_INFINITY, 1.0),
(1.0, 0.0, f64::NAN),
(1.0, -0.0, f64::NAN),
(1.0, 1.0, 0.0),
(1.0, -1.0, 0.0),
(1.0, 2.0, 1.0),
(1.0, -2.0, 1.0),
(1.0, 5.0, 1.0),
(1.0, -5.0, 1.0),
(1.0, 5.5, 1.0),
(1.0, -5.5, 1.0),
(1.0, 0.3, 0.10000000000000003),
(1.0, -0.3, 0.10000000000000003),
(1.0, 7.0, 1.0),
(1.0, 1e+300, 1.0),
(1.0, -1e+300, 1.0),
(1.0, 5e-324, 0.0),
(1.0, -5e-324, 0.0),
(1.0, 1e-10, 9.999996356780269e-11),
(1.0, 3.0, 1.0),
(1.0, -3.0, 1.0),
(-1.0, f64::NAN, f64::NAN),
(-1.0, f64::INFINITY, -1.0),
(-1.0, f64::NEG_INFINITY, -1.0),
(-1.0, 0.0, f64::NAN),
(-1.0, -0.0, f64::NAN),
(-1.0, 1.0, -0.0),
(-1.0, -1.0, -0.0),
(-1.0, 2.0, -1.0),
(-1.0, -2.0, -1.0),
(-1.0, 5.0, -1.0),
(-1.0, -5.0, -1.0),
(-1.0, 5.5, -1.0),
(-1.0, -5.5, -1.0),
(-1.0, 0.3, -0.10000000000000003),
(-1.0, -0.3, -0.10000000000000003),
(-1.0, 7.0, -1.0),
(-1.0, 1e+300, -1.0),
(-1.0, -1e+300, -1.0),
(-1.0, 5e-324, -0.0),
(-1.0, -5e-324, -0.0),
(-1.0, 1e-10, -9.999996356780269e-11),
(-1.0, 3.0, -1.0),
(-1.0, -3.0, -1.0),
(2.0, f64::NAN, f64::NAN),
(2.0, f64::INFINITY, 2.0),
(2.0, f64::NEG_INFINITY, 2.0),
(2.0, 0.0, f64::NAN),
(2.0, -0.0, f64::NAN),
(2.0, 1.0, 0.0),
(2.0, -1.0, 0.0),
(2.0, 2.0, 0.0),
(2.0, -2.0, 0.0),
(2.0, 5.0, 2.0),
(2.0, -5.0, 2.0),
(2.0, 5.5, 2.0),
(2.0, -5.5, 2.0),
(2.0, 0.3, 0.20000000000000007),
(2.0, -0.3, 0.20000000000000007),
(2.0, 7.0, 2.0),
(2.0, 1e+300, 2.0),
(2.0, -1e+300, 2.0),
(2.0, 5e-324, 0.0),
(2.0, -5e-324, 0.0),
(2.0, 1e-10, 9.999992713560537e-11),
(2.0, 3.0, 2.0),
(2.0, -3.0, 2.0),
(-2.0, f64::NAN, f64::NAN),
(-2.0, f64::INFINITY, -2.0),
(-2.0, f64::NEG_INFINITY, -2.0),
(-2.0, 0.0, f64::NAN),
(-2.0, -0.0, f64::NAN),
(-2.0, 1.0, -0.0),
(-2.0, -1.0, -0.0),
(-2.0, 2.0, -0.0),
(-2.0, -2.0, -0.0),
(-2.0, 5.0, -2.0),
(-2.0, -5.0, -2.0),
(-2.0, 5.5, -2.0),
(-2.0, -5.5, -2.0),
(-2.0, 0.3, -0.20000000000000007),
(-2.0, -0.3, -0.20000000000000007),
(-2.0, 7.0, -2.0),
(-2.0, 1e+300, -2.0),
(-2.0, -1e+300, -2.0),
(-2.0, 5e-324, -0.0),
(-2.0, -5e-324, -0.0),
(-2.0, 1e-10, -9.999992713560537e-11),
(-2.0, 3.0, -2.0),
(-2.0, -3.0, -2.0),
(5.0, f64::NAN, f64::NAN),
(5.0, f64::INFINITY, 5.0),
(5.0, f64::NEG_INFINITY, 5.0),
(5.0, 0.0, f64::NAN),
(5.0, -0.0, f64::NAN),
(5.0, 1.0, 0.0),
(5.0, -1.0, 0.0),
(5.0, 2.0, 1.0),
(5.0, -2.0, 1.0),
(5.0, 5.0, 0.0),
(5.0, -5.0, 0.0),
(5.0, 5.5, 5.0),
(5.0, -5.5, 5.0),
(5.0, 0.3, 0.20000000000000018),
(5.0, -0.3, 0.20000000000000018),
(5.0, 7.0, 5.0),
(5.0, 1e+300, 5.0),
(5.0, -1e+300, 5.0),
(5.0, 5e-324, 0.0),
(5.0, -5e-324, 0.0),
(5.0, 1e-10, 9.999981783901343e-11),
(5.0, 3.0, 2.0),
(5.0, -3.0, 2.0),
(-5.0, f64::NAN, f64::NAN),
(-5.0, f64::INFINITY, -5.0),
(-5.0, f64::NEG_INFINITY, -5.0),
(-5.0, 0.0, f64::NAN),
(-5.0, -0.0, f64::NAN),
(-5.0, 1.0, -0.0),
(-5.0, -1.0, -0.0),
(-5.0, 2.0, -1.0),
(-5.0, -2.0, -1.0),
(-5.0, 5.0, -0.0),
(-5.0, -5.0, -0.0),
(-5.0, 5.5, -5.0),
(-5.0, -5.5, -5.0),
(-5.0, 0.3, -0.20000000000000018),
(-5.0, -0.3, -0.20000000000000018),
(-5.0, 7.0, -5.0),
(-5.0, 1e+300, -5.0),
(-5.0, -1e+300, -5.0),
(-5.0, 5e-324, -0.0),
(-5.0, -5e-324, -0.0),
(-5.0, 1e-10, -9.999981783901343e-11),
(-5.0, 3.0, -2.0),
(-5.0, -3.0, -2.0),
(5.5, f64::NAN, f64::NAN),
(5.5, f64::INFINITY, 5.5),
(5.5, f64::NEG_INFINITY, 5.5),
(5.5, 0.0, f64::NAN),
(5.5, -0.0, f64::NAN),
(5.5, 1.0, 0.5),
(5.5, -1.0, 0.5),
(5.5, 2.0, 1.5),
(5.5, -2.0, 1.5),
(5.5, 5.0, 0.5),
(5.5, -5.0, 0.5),
(5.5, 5.5, 0.0),
(5.5, -5.5, 0.0),
(5.5, 0.3, 0.1000000000000002),
(5.5, -0.3, 0.1000000000000002),
(5.5, 7.0, 5.5),
(5.5, 1e+300, 5.5),
(5.5, -1e+300, 5.5),
(5.5, 5e-324, 0.0),
(5.5, -5e-324, 0.0),
(5.5, 1e-10, 9.999979962291477e-11),
(5.5, 3.0, 2.5),
(5.5, -3.0, 2.5),
(-5.5, f64::NAN, f64::NAN),
(-5.5, f64::INFINITY, -5.5),
(-5.5, f64::NEG_INFINITY, -5.5),
(-5.5, 0.0, f64::NAN),
(-5.5, -0.0, f64::NAN),
(-5.5, 1.0, -0.5),
(-5.5, -1.0, -0.5),
(-5.5, 2.0, -1.5),
(-5.5, -2.0, -1.5),
(-5.5, 5.0, -0.5),
(-5.5, -5.0, -0.5),
(-5.5, 5.5, -0.0),
(-5.5, -5.5, -0.0),
(-5.5, 0.3, -0.1000000000000002),
(-5.5, -0.3, -0.1000000000000002),
(-5.5, 7.0, -5.5),
(-5.5, 1e+300, -5.5),
(-5.5, -1e+300, -5.5),
(-5.5, 5e-324, -0.0),
(-5.5, -5e-324, -0.0),
(-5.5, 1e-10, -9.999979962291477e-11),
(-5.5, 3.0, -2.5),
(-5.5, -3.0, -2.5),
(0.3, f64::NAN, f64::NAN),
(0.3, f64::INFINITY, 0.3),
(0.3, f64::NEG_INFINITY, 0.3),
(0.3, 0.0, f64::NAN),
(0.3, -0.0, f64::NAN),
(0.3, 1.0, 0.3),
(0.3, -1.0, 0.3),
(0.3, 2.0, 0.3),
(0.3, -2.0, 0.3),
(0.3, 5.0, 0.3),
(0.3, -5.0, 0.3),
(0.3, 5.5, 0.3),
(0.3, -5.5, 0.3),
(0.3, 0.3, 0.0),
(0.3, -0.3, 0.0),
(0.3, 7.0, 0.3),
(0.3, 1e+300, 0.3),
(0.3, -1e+300, 0.3),
(0.3, 5e-324, 0.0),
(0.3, -5e-324, 0.0),
(0.3, 1e-10, 9.999997796811056e-11),
(0.3, 3.0, 0.3),
(0.3, -3.0, 0.3),
(-0.3, f64::NAN, f64::NAN),
(-0.3, f64::INFINITY, -0.3),
(-0.3, f64::NEG_INFINITY, -0.3),
(-0.3, 0.0, f64::NAN),
(-0.3, -0.0, f64::NAN),
(-0.3, 1.0, -0.3),
(-0.3, -1.0, -0.3),
(-0.3, 2.0, -0.3),
(-0.3, -2.0, -0.3),
(-0.3, 5.0, -0.3),
(-0.3, -5.0, -0.3),
(-0.3, 5.5, -0.3),
(-0.3, -5.5, -0.3),
(-0.3, 0.3, -0.0),
(-0.3, -0.3, -0.0),
(-0.3, 7.0, -0.3),
(-0.3, 1e+300, -0.3),
(-0.3, -1e+300, -0.3),
(-0.3, 5e-324, -0.0),
(-0.3, -5e-324, -0.0),
(-0.3, 1e-10, -9.999997796811056e-11),
(-0.3, 3.0, -0.3),
(-0.3, -3.0, -0.3),
(7.0, f64::NAN, f64::NAN),
(7.0, f64::INFINITY, 7.0),
(7.0, f64::NEG_INFINITY, 7.0),
(7.0, 0.0, f64::NAN),
(7.0, -0.0, f64::NAN),
(7.0, 1.0, 0.0),
(7.0, -1.0, 0.0),
(7.0, 2.0, 1.0),
(7.0, -2.0, 1.0),
(7.0, 5.0, 2.0),
(7.0, -5.0, 2.0),
(7.0, 5.5, 1.5),
(7.0, -5.5, 1.5),
(7.0, 0.3, 0.10000000000000026),
(7.0, -0.3, 0.10000000000000026),
(7.0, 7.0, 0.0),
(7.0, 1e+300, 7.0),
(7.0, -1e+300, 7.0),
(7.0, 5e-324, 0.0),
(7.0, -5e-324, 0.0),
(7.0, 1e-10, 9.99997449746188e-11),
(7.0, 3.0, 1.0),
(7.0, -3.0, 1.0),
(1e+300, f64::NAN, f64::NAN),
(1e+300, f64::INFINITY, 1e+300),
(1e+300, f64::NEG_INFINITY, 1e+300),
(1e+300, 0.0, f64::NAN),
(1e+300, -0.0, f64::NAN),
(1e+300, 1.0, 0.0),
(1e+300, -1.0, 0.0),
(1e+300, 2.0, 0.0),
(1e+300, -2.0, 0.0),
(1e+300, 5.0, 0.0),
(1e+300, -5.0, 0.0),
(1e+300, 5.5, 1.5),
(1e+300, -5.5, 1.5),
(1e+300, 0.3, 0.15321850028067768),
(1e+300, -0.3, 0.15321850028067768),
(1e+300, 7.0, 1.0),
(1e+300, 1e+300, 0.0),
(1e+300, -1e+300, 0.0),
(1e+300, 5e-324, 0.0),
(1e+300, -5e-324, 0.0),
(1e+300, 1e-10, 5.476641984772742e-11),
(1e+300, 3.0, 0.0),
(1e+300, -3.0, 0.0),
(-1e+300, f64::NAN, f64::NAN),
(-1e+300, f64::INFINITY, -1e+300),
(-1e+300, f64::NEG_INFINITY, -1e+300),
(-1e+300, 0.0, f64::NAN),
(-1e+300, -0.0, f64::NAN),
(-1e+300, 1.0, -0.0),
(-1e+300, -1.0, -0.0),
(-1e+300, 2.0, -0.0),
(-1e+300, -2.0, -0.0),
(-1e+300, 5.0, -0.0),
(-1e+300, -5.0, -0.0),
(-1e+300, 5.5, -1.5),
(-1e+300, -5.5, -1.5),
(-1e+300, 0.3, -0.15321850028067768),
(-1e+300, -0.3, -0.15321850028067768),
(-1e+300, 7.0, -1.0),
(-1e+300, 1e+300, -0.0),
(-1e+300, -1e+300, -0.0),
(-1e+300, 5e-324, -0.0),
(-1e+300, -5e-324, -0.0),
(-1e+300, 1e-10, -5.476641984772742e-11),
(-1e+300, 3.0, -0.0),
(-1e+300, -3.0, -0.0),
(5e-324, f64::NAN, f64::NAN),
(5e-324, f64::INFINITY, 5e-324),
(5e-324, f64::NEG_INFINITY, 5e-324),
(5e-324, 0.0, f64::NAN),
(5e-324, -0.0, f64::NAN),
(5e-324, 1.0, 5e-324),
(5e-324, -1.0, 5e-324),
(5e-324, 2.0, 5e-324),
(5e-324, -2.0, 5e-324),
(5e-324, 5.0, 5e-324),
(5e-324, -5.0, 5e-324),
(5e-324, 5.5, 5e-324),
(5e-324, -5.5, 5e-324),
(5e-324, 0.3, 5e-324),
(5e-324, -0.3, 5e-324),
(5e-324, 7.0, 5e-324),
(5e-324, 1e+300, 5e-324),
(5e-324, -1e+300, 5e-324),
(5e-324, 5e-324, 0.0),
(5e-324, -5e-324, 0.0),
(5e-324, 1e-10, 5e-324),
(5e-324, 3.0, 5e-324),
(5e-324, -3.0, 5e-324),
(-5e-324, f64::NAN, f64::NAN),
(-5e-324, f64::INFINITY, -5e-324),
(-5e-324, f64::NEG_INFINITY, -5e-324),
(-5e-324, 0.0, f64::NAN),
(-5e-324, -0.0, f64::NAN),
(-5e-324, 1.0, -5e-324),
(-5e-324, -1.0, -5e-324),
(-5e-324, 2.0, -5e-324),
(-5e-324, -2.0, -5e-324),
(-5e-324, 5.0, -5e-324),
(-5e-324, -5.0, -5e-324),
(-5e-324, 5.5, -5e-324),
(-5e-324, -5.5, -5e-324),
(-5e-324, 0.3, -5e-324),
(-5e-324, -0.3, -5e-324),
(-5e-324, 7.0, -5e-324),
(-5e-324, 1e+300, -5e-324),
(-5e-324, -1e+300, -5e-324),
(-5e-324, 5e-324, -0.0),
(-5e-324, -5e-324, -0.0),
(-5e-324, 1e-10, -5e-324),
(-5e-324, 3.0, -5e-324),
(-5e-324, -3.0, -5e-324),
(1e-10, f64::NAN, f64::NAN),
(1e-10, f64::INFINITY, 1e-10),
(1e-10, f64::NEG_INFINITY, 1e-10),
(1e-10, 0.0, f64::NAN),
(1e-10, -0.0, f64::NAN),
(1e-10, 1.0, 1e-10),
(1e-10, -1.0, 1e-10),
(1e-10, 2.0, 1e-10),
(1e-10, -2.0, 1e-10),
(1e-10, 5.0, 1e-10),
(1e-10, -5.0, 1e-10),
(1e-10, 5.5, 1e-10),
(1e-10, -5.5, 1e-10),
(1e-10, 0.3, 1e-10),
(1e-10, -0.3, 1e-10),
(1e-10, 7.0, 1e-10),
(1e-10, 1e+300, 1e-10),
(1e-10, -1e+300, 1e-10),
(1e-10, 5e-324, 0.0),
(1e-10, -5e-324, 0.0),
(1e-10, 1e-10, 0.0),
(1e-10, 3.0, 1e-10),
(1e-10, -3.0, 1e-10),
(3.0, f64::NAN, f64::NAN),
(3.0, f64::INFINITY, 3.0),
(3.0, f64::NEG_INFINITY, 3.0),
(3.0, 0.0, f64::NAN),
(3.0, -0.0, f64::NAN),
(3.0, 1.0, 0.0),
(3.0, -1.0, 0.0),
(3.0, 2.0, 1.0),
(3.0, -2.0, 1.0),
(3.0, 5.0, 3.0),
(3.0, -5.0, 3.0),
(3.0, 5.5, 3.0),
(3.0, -5.5, 3.0),
(3.0, 0.3, 1.1102230246251565e-16),
(3.0, -0.3, 1.1102230246251565e-16),
(3.0, 7.0, 3.0),
(3.0, 1e+300, 3.0),
(3.0, -1e+300, 3.0),
(3.0, 5e-324, 0.0),
(3.0, -5e-324, 0.0),
(3.0, 1e-10, 9.999989070340806e-11),
(3.0, 3.0, 0.0),
(3.0, -3.0, 0.0),
(-3.0, f64::NAN, f64::NAN),
(-3.0, f64::INFINITY, -3.0),
(-3.0, f64::NEG_INFINITY, -3.0),
(-3.0, 0.0, f64::NAN),
(-3.0, -0.0, f64::NAN),
(-3.0, 1.0, -0.0),
(-3.0, -1.0, -0.0),
(-3.0, 2.0, -1.0),
(-3.0, -2.0, -1.0),
(-3.0, 5.0, -3.0),
(-3.0, -5.0, -3.0),
(-3.0, 5.5, -3.0),
(-3.0, -5.5, -3.0),
(-3.0, 0.3, -1.1102230246251565e-16),
(-3.0, -0.3, -1.1102230246251565e-16),
(-3.0, 7.0, -3.0),
(-3.0, 1e+300, -3.0),
(-3.0, -1e+300, -3.0),
(-3.0, 5e-324, -0.0),
(-3.0, -5e-324, -0.0),
(-3.0, 1e-10, -9.999989070340806e-11),
(-3.0, 3.0, -0.0),
(-3.0, -3.0, -0.0),
];
for &(x, y, want) in CASES {
check("fmod", &format!("{x:?}, {y:?}"), fmod(x, y), want, 0.0, 0.0);
}
}
#[test]
fn remainder_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN),
(f64::NAN, 0.0, f64::NAN),
(f64::NAN, -0.0, f64::NAN),
(f64::NAN, 1.0, f64::NAN),
(f64::NAN, -1.0, f64::NAN),
(f64::NAN, 2.0, f64::NAN),
(f64::NAN, -2.0, f64::NAN),
(f64::NAN, 5.0, f64::NAN),
(f64::NAN, -5.0, f64::NAN),
(f64::NAN, 5.5, f64::NAN),
(f64::NAN, -5.5, f64::NAN),
(f64::NAN, 0.3, f64::NAN),
(f64::NAN, -0.3, f64::NAN),
(f64::NAN, 7.0, f64::NAN),
(f64::NAN, 1e+300, f64::NAN),
(f64::NAN, -1e+300, f64::NAN),
(f64::NAN, 5e-324, f64::NAN),
(f64::NAN, -5e-324, f64::NAN),
(f64::NAN, 1e-10, f64::NAN),
(f64::NAN, 3.0, f64::NAN),
(f64::NAN, -3.0, f64::NAN),
(f64::INFINITY, f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY, f64::NAN),
(f64::INFINITY, f64::NEG_INFINITY, f64::NAN),
(f64::INFINITY, 0.0, f64::NAN),
(f64::INFINITY, -0.0, f64::NAN),
(f64::INFINITY, 1.0, f64::NAN),
(f64::INFINITY, -1.0, f64::NAN),
(f64::INFINITY, 2.0, f64::NAN),
(f64::INFINITY, -2.0, f64::NAN),
(f64::INFINITY, 5.0, f64::NAN),
(f64::INFINITY, -5.0, f64::NAN),
(f64::INFINITY, 5.5, f64::NAN),
(f64::INFINITY, -5.5, f64::NAN),
(f64::INFINITY, 0.3, f64::NAN),
(f64::INFINITY, -0.3, f64::NAN),
(f64::INFINITY, 7.0, f64::NAN),
(f64::INFINITY, 1e+300, f64::NAN),
(f64::INFINITY, -1e+300, f64::NAN),
(f64::INFINITY, 5e-324, f64::NAN),
(f64::INFINITY, -5e-324, f64::NAN),
(f64::INFINITY, 1e-10, f64::NAN),
(f64::INFINITY, 3.0, f64::NAN),
(f64::INFINITY, -3.0, f64::NAN),
(f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::INFINITY, f64::NAN),
(f64::NEG_INFINITY, f64::NEG_INFINITY, f64::NAN),
(f64::NEG_INFINITY, 0.0, f64::NAN),
(f64::NEG_INFINITY, -0.0, f64::NAN),
(f64::NEG_INFINITY, 1.0, f64::NAN),
(f64::NEG_INFINITY, -1.0, f64::NAN),
(f64::NEG_INFINITY, 2.0, f64::NAN),
(f64::NEG_INFINITY, -2.0, f64::NAN),
(f64::NEG_INFINITY, 5.0, f64::NAN),
(f64::NEG_INFINITY, -5.0, f64::NAN),
(f64::NEG_INFINITY, 5.5, f64::NAN),
(f64::NEG_INFINITY, -5.5, f64::NAN),
(f64::NEG_INFINITY, 0.3, f64::NAN),
(f64::NEG_INFINITY, -0.3, f64::NAN),
(f64::NEG_INFINITY, 7.0, f64::NAN),
(f64::NEG_INFINITY, 1e+300, f64::NAN),
(f64::NEG_INFINITY, -1e+300, f64::NAN),
(f64::NEG_INFINITY, 5e-324, f64::NAN),
(f64::NEG_INFINITY, -5e-324, f64::NAN),
(f64::NEG_INFINITY, 1e-10, f64::NAN),
(f64::NEG_INFINITY, 3.0, f64::NAN),
(f64::NEG_INFINITY, -3.0, f64::NAN),
(0.0, f64::NAN, f64::NAN),
(0.0, f64::INFINITY, 0.0),
(0.0, f64::NEG_INFINITY, -0.0),
(0.0, 0.0, f64::NAN),
(0.0, -0.0, f64::NAN),
(0.0, 1.0, 0.0),
(0.0, -1.0, -0.0),
(0.0, 2.0, 0.0),
(0.0, -2.0, -0.0),
(0.0, 5.0, 0.0),
(0.0, -5.0, -0.0),
(0.0, 5.5, 0.0),
(0.0, -5.5, -0.0),
(0.0, 0.3, 0.0),
(0.0, -0.3, -0.0),
(0.0, 7.0, 0.0),
(0.0, 1e+300, 0.0),
(0.0, -1e+300, -0.0),
(0.0, 5e-324, 0.0),
(0.0, -5e-324, -0.0),
(0.0, 1e-10, 0.0),
(0.0, 3.0, 0.0),
(0.0, -3.0, -0.0),
(-0.0, f64::NAN, f64::NAN),
(-0.0, f64::INFINITY, 0.0),
(-0.0, f64::NEG_INFINITY, -0.0),
(-0.0, 0.0, f64::NAN),
(-0.0, -0.0, f64::NAN),
(-0.0, 1.0, 0.0),
(-0.0, -1.0, -0.0),
(-0.0, 2.0, 0.0),
(-0.0, -2.0, -0.0),
(-0.0, 5.0, 0.0),
(-0.0, -5.0, -0.0),
(-0.0, 5.5, 0.0),
(-0.0, -5.5, -0.0),
(-0.0, 0.3, 0.0),
(-0.0, -0.3, -0.0),
(-0.0, 7.0, 0.0),
(-0.0, 1e+300, 0.0),
(-0.0, -1e+300, -0.0),
(-0.0, 5e-324, 0.0),
(-0.0, -5e-324, -0.0),
(-0.0, 1e-10, 0.0),
(-0.0, 3.0, 0.0),
(-0.0, -3.0, -0.0),
(1.0, f64::NAN, f64::NAN),
(1.0, f64::INFINITY, 1.0),
(1.0, f64::NEG_INFINITY, f64::NEG_INFINITY),
(1.0, 0.0, f64::NAN),
(1.0, -0.0, f64::NAN),
(1.0, 1.0, 0.0),
(1.0, -1.0, -0.0),
(1.0, 2.0, 1.0),
(1.0, -2.0, -1.0),
(1.0, 5.0, 1.0),
(1.0, -5.0, -4.0),
(1.0, 5.5, 1.0),
(1.0, -5.5, -4.5),
(1.0, 0.3, 0.10000000000000003),
(1.0, -0.3, -0.19999999999999996),
(1.0, 7.0, 1.0),
(1.0, 1e+300, 1.0),
(1.0, -1e+300, -1e+300),
(1.0, 5e-324, 0.0),
(1.0, -5e-324, -0.0),
(1.0, 1e-10, 9.999996356780269e-11),
(1.0, 3.0, 1.0),
(1.0, -3.0, -2.0),
(-1.0, f64::NAN, f64::NAN),
(-1.0, f64::INFINITY, f64::INFINITY),
(-1.0, f64::NEG_INFINITY, -1.0),
(-1.0, 0.0, f64::NAN),
(-1.0, -0.0, f64::NAN),
(-1.0, 1.0, 0.0),
(-1.0, -1.0, -0.0),
(-1.0, 2.0, 1.0),
(-1.0, -2.0, -1.0),
(-1.0, 5.0, 4.0),
(-1.0, -5.0, -1.0),
(-1.0, 5.5, 4.5),
(-1.0, -5.5, -1.0),
(-1.0, 0.3, 0.19999999999999996),
(-1.0, -0.3, -0.10000000000000003),
(-1.0, 7.0, 6.0),
(-1.0, 1e+300, 1e+300),
(-1.0, -1e+300, -1.0),
(-1.0, 5e-324, 0.0),
(-1.0, -5e-324, -0.0),
(-1.0, 1e-10, 3.643219731549774e-17),
(-1.0, 3.0, 2.0),
(-1.0, -3.0, -1.0),
(2.0, f64::NAN, f64::NAN),
(2.0, f64::INFINITY, 2.0),
(2.0, f64::NEG_INFINITY, f64::NEG_INFINITY),
(2.0, 0.0, f64::NAN),
(2.0, -0.0, f64::NAN),
(2.0, 1.0, 0.0),
(2.0, -1.0, -0.0),
(2.0, 2.0, 0.0),
(2.0, -2.0, -0.0),
(2.0, 5.0, 2.0),
(2.0, -5.0, -3.0),
(2.0, 5.5, 2.0),
(2.0, -5.5, -3.5),
(2.0, 0.3, 0.20000000000000007),
(2.0, -0.3, -0.09999999999999992),
(2.0, 7.0, 2.0),
(2.0, 1e+300, 2.0),
(2.0, -1e+300, -1e+300),
(2.0, 5e-324, 0.0),
(2.0, -5e-324, -0.0),
(2.0, 1e-10, 9.999992713560537e-11),
(2.0, 3.0, 2.0),
(2.0, -3.0, -1.0),
(-2.0, f64::NAN, f64::NAN),
(-2.0, f64::INFINITY, f64::INFINITY),
(-2.0, f64::NEG_INFINITY, -2.0),
(-2.0, 0.0, f64::NAN),
(-2.0, -0.0, f64::NAN),
(-2.0, 1.0, 0.0),
(-2.0, -1.0, -0.0),
(-2.0, 2.0, 0.0),
(-2.0, -2.0, -0.0),
(-2.0, 5.0, 3.0),
(-2.0, -5.0, -2.0),
(-2.0, 5.5, 3.5),
(-2.0, -5.5, -2.0),
(-2.0, 0.3, 0.09999999999999992),
(-2.0, -0.3, -0.20000000000000007),
(-2.0, 7.0, 5.0),
(-2.0, 1e+300, 1e+300),
(-2.0, -1e+300, -2.0),
(-2.0, 5e-324, 0.0),
(-2.0, -5e-324, -0.0),
(-2.0, 1e-10, 7.286439463099548e-17),
(-2.0, 3.0, 1.0),
(-2.0, -3.0, -2.0),
(5.0, f64::NAN, f64::NAN),
(5.0, f64::INFINITY, 5.0),
(5.0, f64::NEG_INFINITY, f64::NEG_INFINITY),
(5.0, 0.0, f64::NAN),
(5.0, -0.0, f64::NAN),
(5.0, 1.0, 0.0),
(5.0, -1.0, -0.0),
(5.0, 2.0, 1.0),
(5.0, -2.0, -1.0),
(5.0, 5.0, 0.0),
(5.0, -5.0, -0.0),
(5.0, 5.5, 5.0),
(5.0, -5.5, -0.5),
(5.0, 0.3, 0.20000000000000018),
(5.0, -0.3, -0.09999999999999981),
(5.0, 7.0, 5.0),
(5.0, 1e+300, 5.0),
(5.0, -1e+300, -1e+300),
(5.0, 5e-324, 0.0),
(5.0, -5e-324, -0.0),
(5.0, 1e-10, 9.999981783901343e-11),
(5.0, 3.0, 2.0),
(5.0, -3.0, -1.0),
(-5.0, f64::NAN, f64::NAN),
(-5.0, f64::INFINITY, f64::INFINITY),
(-5.0, f64::NEG_INFINITY, -5.0),
(-5.0, 0.0, f64::NAN),
(-5.0, -0.0, f64::NAN),
(-5.0, 1.0, 0.0),
(-5.0, -1.0, -0.0),
(-5.0, 2.0, 1.0),
(-5.0, -2.0, -1.0),
(-5.0, 5.0, 0.0),
(-5.0, -5.0, -0.0),
(-5.0, 5.5, 0.5),
(-5.0, -5.5, -5.0),
(-5.0, 0.3, 0.09999999999999981),
(-5.0, -0.3, -0.20000000000000018),
(-5.0, 7.0, 2.0),
(-5.0, 1e+300, 1e+300),
(-5.0, -1e+300, -5.0),
(-5.0, 5e-324, 0.0),
(-5.0, -5e-324, -0.0),
(-5.0, 1e-10, 1.821609865774887e-16),
(-5.0, 3.0, 1.0),
(-5.0, -3.0, -2.0),
(5.5, f64::NAN, f64::NAN),
(5.5, f64::INFINITY, 5.5),
(5.5, f64::NEG_INFINITY, f64::NEG_INFINITY),
(5.5, 0.0, f64::NAN),
(5.5, -0.0, f64::NAN),
(5.5, 1.0, 0.5),
(5.5, -1.0, -0.5),
(5.5, 2.0, 1.5),
(5.5, -2.0, -0.5),
(5.5, 5.0, 0.5),
(5.5, -5.0, -4.5),
(5.5, 5.5, 0.0),
(5.5, -5.5, -0.0),
(5.5, 0.3, 0.1000000000000002),
(5.5, -0.3, -0.1999999999999998),
(5.5, 7.0, 5.5),
(5.5, 1e+300, 5.5),
(5.5, -1e+300, -1e+300),
(5.5, 5e-324, 0.0),
(5.5, -5e-324, -0.0),
(5.5, 1e-10, 9.999979962291477e-11),
(5.5, 3.0, 2.5),
(5.5, -3.0, -0.5),
(-5.5, f64::NAN, f64::NAN),
(-5.5, f64::INFINITY, f64::INFINITY),
(-5.5, f64::NEG_INFINITY, -5.5),
(-5.5, 0.0, f64::NAN),
(-5.5, -0.0, f64::NAN),
(-5.5, 1.0, 0.5),
(-5.5, -1.0, -0.5),
(-5.5, 2.0, 0.5),
(-5.5, -2.0, -1.5),
(-5.5, 5.0, 4.5),
(-5.5, -5.0, -0.5),
(-5.5, 5.5, 0.0),
(-5.5, -5.5, -0.0),
(-5.5, 0.3, 0.1999999999999998),
(-5.5, -0.3, -0.1000000000000002),
(-5.5, 7.0, 1.5),
(-5.5, 1e+300, 1e+300),
(-5.5, -1e+300, -5.5),
(-5.5, 5e-324, 0.0),
(-5.5, -5e-324, -0.0),
(-5.5, 1e-10, 2.0037708523523758e-16),
(-5.5, 3.0, 0.5),
(-5.5, -3.0, -2.5),
(0.3, f64::NAN, f64::NAN),
(0.3, f64::INFINITY, 0.3),
(0.3, f64::NEG_INFINITY, f64::NEG_INFINITY),
(0.3, 0.0, f64::NAN),
(0.3, -0.0, f64::NAN),
(0.3, 1.0, 0.3),
(0.3, -1.0, -0.7),
(0.3, 2.0, 0.3),
(0.3, -2.0, -1.7),
(0.3, 5.0, 0.3),
(0.3, -5.0, -4.7),
(0.3, 5.5, 0.3),
(0.3, -5.5, -5.2),
(0.3, 0.3, 0.0),
(0.3, -0.3, -0.0),
(0.3, 7.0, 0.3),
(0.3, 1e+300, 0.3),
(0.3, -1e+300, -1e+300),
(0.3, 5e-324, 0.0),
(0.3, -5e-324, -0.0),
(0.3, 1e-10, 9.999997796811056e-11),
(0.3, 3.0, 0.3),
(0.3, -3.0, -2.7),
(-0.3, f64::NAN, f64::NAN),
(-0.3, f64::INFINITY, f64::INFINITY),
(-0.3, f64::NEG_INFINITY, -0.3),
(-0.3, 0.0, f64::NAN),
(-0.3, -0.0, f64::NAN),
(-0.3, 1.0, 0.7),
(-0.3, -1.0, -0.3),
(-0.3, 2.0, 1.7),
(-0.3, -2.0, -0.3),
(-0.3, 5.0, 4.7),
(-0.3, -5.0, -0.3),
(-0.3, 5.5, 5.2),
(-0.3, -5.5, -0.3),
(-0.3, 0.3, 0.0),
(-0.3, -0.3, -0.0),
(-0.3, 7.0, 6.7),
(-0.3, 1e+300, 1e+300),
(-0.3, -1e+300, -0.3),
(-0.3, 5e-324, 0.0),
(-0.3, -5e-324, -0.0),
(-0.3, 1e-10, 2.2031889440900888e-17),
(-0.3, 3.0, 2.7),
(-0.3, -3.0, -0.3),
(7.0, f64::NAN, f64::NAN),
(7.0, f64::INFINITY, 7.0),
(7.0, f64::NEG_INFINITY, f64::NEG_INFINITY),
(7.0, 0.0, f64::NAN),
(7.0, -0.0, f64::NAN),
(7.0, 1.0, 0.0),
(7.0, -1.0, -0.0),
(7.0, 2.0, 1.0),
(7.0, -2.0, -1.0),
(7.0, 5.0, 2.0),
(7.0, -5.0, -3.0),
(7.0, 5.5, 1.5),
(7.0, -5.5, -4.0),
(7.0, 0.3, 0.10000000000000026),
(7.0, -0.3, -0.19999999999999973),
(7.0, 7.0, 0.0),
(7.0, 1e+300, 7.0),
(7.0, -1e+300, -1e+300),
(7.0, 5e-324, 0.0),
(7.0, -5e-324, -0.0),
(7.0, 1e-10, 9.99997449746188e-11),
(7.0, 3.0, 1.0),
(7.0, -3.0, -2.0),
(1e+300, f64::NAN, f64::NAN),
(1e+300, f64::INFINITY, 1e+300),
(1e+300, f64::NEG_INFINITY, f64::NEG_INFINITY),
(1e+300, 0.0, f64::NAN),
(1e+300, -0.0, f64::NAN),
(1e+300, 1.0, 0.0),
(1e+300, -1.0, -0.0),
(1e+300, 2.0, 0.0),
(1e+300, -2.0, -0.0),
(1e+300, 5.0, 0.0),
(1e+300, -5.0, -0.0),
(1e+300, 5.5, 1.5),
(1e+300, -5.5, -4.0),
(1e+300, 0.3, 0.15321850028067768),
(1e+300, -0.3, -0.1467814997193223),
(1e+300, 7.0, 1.0),
(1e+300, 1e+300, 0.0),
(1e+300, -1e+300, -0.0),
(1e+300, 5e-324, 0.0),
(1e+300, -5e-324, -0.0),
(1e+300, 1e-10, 5.476641984772742e-11),
(1e+300, 3.0, 0.0),
(1e+300, -3.0, -0.0),
(-1e+300, f64::NAN, f64::NAN),
(-1e+300, f64::INFINITY, f64::INFINITY),
(-1e+300, f64::NEG_INFINITY, -1e+300),
(-1e+300, 0.0, f64::NAN),
(-1e+300, -0.0, f64::NAN),
(-1e+300, 1.0, 0.0),
(-1e+300, -1.0, -0.0),
(-1e+300, 2.0, 0.0),
(-1e+300, -2.0, -0.0),
(-1e+300, 5.0, 0.0),
(-1e+300, -5.0, -0.0),
(-1e+300, 5.5, 4.0),
(-1e+300, -5.5, -1.5),
(-1e+300, 0.3, 0.1467814997193223),
(-1e+300, -0.3, -0.15321850028067768),
(-1e+300, 7.0, 6.0),
(-1e+300, 1e+300, 0.0),
(-1e+300, -1e+300, -0.0),
(-1e+300, 5e-324, 0.0),
(-1e+300, -5e-324, -0.0),
(-1e+300, 1e-10, 4.5233580152272584e-11),
(-1e+300, 3.0, 0.0),
(-1e+300, -3.0, -0.0),
(5e-324, f64::NAN, f64::NAN),
(5e-324, f64::INFINITY, 5e-324),
(5e-324, f64::NEG_INFINITY, f64::NEG_INFINITY),
(5e-324, 0.0, f64::NAN),
(5e-324, -0.0, f64::NAN),
(5e-324, 1.0, 5e-324),
(5e-324, -1.0, -1.0),
(5e-324, 2.0, 5e-324),
(5e-324, -2.0, -2.0),
(5e-324, 5.0, 5e-324),
(5e-324, -5.0, -5.0),
(5e-324, 5.5, 5e-324),
(5e-324, -5.5, -5.5),
(5e-324, 0.3, 5e-324),
(5e-324, -0.3, -0.3),
(5e-324, 7.0, 5e-324),
(5e-324, 1e+300, 5e-324),
(5e-324, -1e+300, -1e+300),
(5e-324, 5e-324, 0.0),
(5e-324, -5e-324, -0.0),
(5e-324, 1e-10, 5e-324),
(5e-324, 3.0, 5e-324),
(5e-324, -3.0, -3.0),
(-5e-324, f64::NAN, f64::NAN),
(-5e-324, f64::INFINITY, f64::INFINITY),
(-5e-324, f64::NEG_INFINITY, -5e-324),
(-5e-324, 0.0, f64::NAN),
(-5e-324, -0.0, f64::NAN),
(-5e-324, 1.0, 1.0),
(-5e-324, -1.0, -5e-324),
(-5e-324, 2.0, 2.0),
(-5e-324, -2.0, -5e-324),
(-5e-324, 5.0, 5.0),
(-5e-324, -5.0, -5e-324),
(-5e-324, 5.5, 5.5),
(-5e-324, -5.5, -5e-324),
(-5e-324, 0.3, 0.3),
(-5e-324, -0.3, -5e-324),
(-5e-324, 7.0, 7.0),
(-5e-324, 1e+300, 1e+300),
(-5e-324, -1e+300, -5e-324),
(-5e-324, 5e-324, 0.0),
(-5e-324, -5e-324, -0.0),
(-5e-324, 1e-10, 1e-10),
(-5e-324, 3.0, 3.0),
(-5e-324, -3.0, -5e-324),
(1e-10, f64::NAN, f64::NAN),
(1e-10, f64::INFINITY, 1e-10),
(1e-10, f64::NEG_INFINITY, f64::NEG_INFINITY),
(1e-10, 0.0, f64::NAN),
(1e-10, -0.0, f64::NAN),
(1e-10, 1.0, 1e-10),
(1e-10, -1.0, -0.9999999999),
(1e-10, 2.0, 1e-10),
(1e-10, -2.0, -1.9999999999),
(1e-10, 5.0, 1e-10),
(1e-10, -5.0, -4.9999999999),
(1e-10, 5.5, 1e-10),
(1e-10, -5.5, -5.4999999999),
(1e-10, 0.3, 1e-10),
(1e-10, -0.3, -0.2999999999),
(1e-10, 7.0, 1e-10),
(1e-10, 1e+300, 1e-10),
(1e-10, -1e+300, -1e+300),
(1e-10, 5e-324, 0.0),
(1e-10, -5e-324, -0.0),
(1e-10, 1e-10, 0.0),
(1e-10, 3.0, 1e-10),
(1e-10, -3.0, -2.9999999999),
(3.0, f64::NAN, f64::NAN),
(3.0, f64::INFINITY, 3.0),
(3.0, f64::NEG_INFINITY, f64::NEG_INFINITY),
(3.0, 0.0, f64::NAN),
(3.0, -0.0, f64::NAN),
(3.0, 1.0, 0.0),
(3.0, -1.0, -0.0),
(3.0, 2.0, 1.0),
(3.0, -2.0, -1.0),
(3.0, 5.0, 3.0),
(3.0, -5.0, -2.0),
(3.0, 5.5, 3.0),
(3.0, -5.5, -2.5),
(3.0, 0.3, 1.1102230246251565e-16),
(3.0, -0.3, -0.2999999999999999),
(3.0, 7.0, 3.0),
(3.0, 1e+300, 3.0),
(3.0, -1e+300, -1e+300),
(3.0, 5e-324, 0.0),
(3.0, -5e-324, -0.0),
(3.0, 1e-10, 9.999989070340806e-11),
(3.0, 3.0, 0.0),
(3.0, -3.0, -0.0),
(-3.0, f64::NAN, f64::NAN),
(-3.0, f64::INFINITY, f64::INFINITY),
(-3.0, f64::NEG_INFINITY, -3.0),
(-3.0, 0.0, f64::NAN),
(-3.0, -0.0, f64::NAN),
(-3.0, 1.0, 0.0),
(-3.0, -1.0, -0.0),
(-3.0, 2.0, 1.0),
(-3.0, -2.0, -1.0),
(-3.0, 5.0, 2.0),
(-3.0, -5.0, -3.0),
(-3.0, 5.5, 2.5),
(-3.0, -5.5, -3.0),
(-3.0, 0.3, 0.2999999999999999),
(-3.0, -0.3, -1.1102230246251565e-16),
(-3.0, 7.0, 4.0),
(-3.0, 1e+300, 1e+300),
(-3.0, -1e+300, -3.0),
(-3.0, 5e-324, 0.0),
(-3.0, -5e-324, -0.0),
(-3.0, 1e-10, 1.0929659194649322e-16),
(-3.0, 3.0, 0.0),
(-3.0, -3.0, -0.0),
];
for &(x, y, want) in CASES {
check(
"remainder",
&format!("{x:?}, {y:?}"),
remainder(x, y),
want,
0.0,
0.0,
);
}
}
#[test]
fn floor_divide_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN),
(f64::NAN, 0.0, f64::NAN),
(f64::NAN, -0.0, f64::NAN),
(f64::NAN, 1.0, f64::NAN),
(f64::NAN, -1.0, f64::NAN),
(f64::NAN, 2.0, f64::NAN),
(f64::NAN, -2.0, f64::NAN),
(f64::NAN, 5.0, f64::NAN),
(f64::NAN, -5.0, f64::NAN),
(f64::NAN, 5.5, f64::NAN),
(f64::NAN, -5.5, f64::NAN),
(f64::NAN, 0.3, f64::NAN),
(f64::NAN, -0.3, f64::NAN),
(f64::NAN, 7.0, f64::NAN),
(f64::NAN, 1e+300, f64::NAN),
(f64::NAN, -1e+300, f64::NAN),
(f64::NAN, 5e-324, f64::NAN),
(f64::NAN, -5e-324, f64::NAN),
(f64::NAN, 1e-10, f64::NAN),
(f64::NAN, 3.0, f64::NAN),
(f64::NAN, -3.0, f64::NAN),
(f64::INFINITY, f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY, f64::NAN),
(f64::INFINITY, f64::NEG_INFINITY, f64::NAN),
(f64::INFINITY, 0.0, f64::INFINITY),
(f64::INFINITY, -0.0, f64::NEG_INFINITY),
(f64::INFINITY, 1.0, f64::NAN),
(f64::INFINITY, -1.0, f64::NAN),
(f64::INFINITY, 2.0, f64::NAN),
(f64::INFINITY, -2.0, f64::NAN),
(f64::INFINITY, 5.0, f64::NAN),
(f64::INFINITY, -5.0, f64::NAN),
(f64::INFINITY, 5.5, f64::NAN),
(f64::INFINITY, -5.5, f64::NAN),
(f64::INFINITY, 0.3, f64::NAN),
(f64::INFINITY, -0.3, f64::NAN),
(f64::INFINITY, 7.0, f64::NAN),
(f64::INFINITY, 1e+300, f64::NAN),
(f64::INFINITY, -1e+300, f64::NAN),
(f64::INFINITY, 5e-324, f64::NAN),
(f64::INFINITY, -5e-324, f64::NAN),
(f64::INFINITY, 1e-10, f64::NAN),
(f64::INFINITY, 3.0, f64::NAN),
(f64::INFINITY, -3.0, f64::NAN),
(f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::INFINITY, f64::NAN),
(f64::NEG_INFINITY, f64::NEG_INFINITY, f64::NAN),
(f64::NEG_INFINITY, 0.0, f64::NEG_INFINITY),
(f64::NEG_INFINITY, -0.0, f64::INFINITY),
(f64::NEG_INFINITY, 1.0, f64::NAN),
(f64::NEG_INFINITY, -1.0, f64::NAN),
(f64::NEG_INFINITY, 2.0, f64::NAN),
(f64::NEG_INFINITY, -2.0, f64::NAN),
(f64::NEG_INFINITY, 5.0, f64::NAN),
(f64::NEG_INFINITY, -5.0, f64::NAN),
(f64::NEG_INFINITY, 5.5, f64::NAN),
(f64::NEG_INFINITY, -5.5, f64::NAN),
(f64::NEG_INFINITY, 0.3, f64::NAN),
(f64::NEG_INFINITY, -0.3, f64::NAN),
(f64::NEG_INFINITY, 7.0, f64::NAN),
(f64::NEG_INFINITY, 1e+300, f64::NAN),
(f64::NEG_INFINITY, -1e+300, f64::NAN),
(f64::NEG_INFINITY, 5e-324, f64::NAN),
(f64::NEG_INFINITY, -5e-324, f64::NAN),
(f64::NEG_INFINITY, 1e-10, f64::NAN),
(f64::NEG_INFINITY, 3.0, f64::NAN),
(f64::NEG_INFINITY, -3.0, f64::NAN),
(0.0, f64::NAN, f64::NAN),
(0.0, f64::INFINITY, 0.0),
(0.0, f64::NEG_INFINITY, -0.0),
(0.0, 0.0, f64::NAN),
(0.0, -0.0, f64::NAN),
(0.0, 1.0, 0.0),
(0.0, -1.0, -0.0),
(0.0, 2.0, 0.0),
(0.0, -2.0, -0.0),
(0.0, 5.0, 0.0),
(0.0, -5.0, -0.0),
(0.0, 5.5, 0.0),
(0.0, -5.5, -0.0),
(0.0, 0.3, 0.0),
(0.0, -0.3, -0.0),
(0.0, 7.0, 0.0),
(0.0, 1e+300, 0.0),
(0.0, -1e+300, -0.0),
(0.0, 5e-324, 0.0),
(0.0, -5e-324, -0.0),
(0.0, 1e-10, 0.0),
(0.0, 3.0, 0.0),
(0.0, -3.0, -0.0),
(-0.0, f64::NAN, f64::NAN),
(-0.0, f64::INFINITY, -0.0),
(-0.0, f64::NEG_INFINITY, 0.0),
(-0.0, 0.0, f64::NAN),
(-0.0, -0.0, f64::NAN),
(-0.0, 1.0, -0.0),
(-0.0, -1.0, 0.0),
(-0.0, 2.0, -0.0),
(-0.0, -2.0, 0.0),
(-0.0, 5.0, -0.0),
(-0.0, -5.0, 0.0),
(-0.0, 5.5, -0.0),
(-0.0, -5.5, 0.0),
(-0.0, 0.3, -0.0),
(-0.0, -0.3, 0.0),
(-0.0, 7.0, -0.0),
(-0.0, 1e+300, -0.0),
(-0.0, -1e+300, 0.0),
(-0.0, 5e-324, -0.0),
(-0.0, -5e-324, 0.0),
(-0.0, 1e-10, -0.0),
(-0.0, 3.0, -0.0),
(-0.0, -3.0, 0.0),
(1.0, f64::NAN, f64::NAN),
(1.0, f64::INFINITY, 0.0),
(1.0, f64::NEG_INFINITY, -1.0),
(1.0, 0.0, f64::INFINITY),
(1.0, -0.0, f64::NEG_INFINITY),
(1.0, 1.0, 1.0),
(1.0, -1.0, -1.0),
(1.0, 2.0, 0.0),
(1.0, -2.0, -1.0),
(1.0, 5.0, 0.0),
(1.0, -5.0, -1.0),
(1.0, 5.5, 0.0),
(1.0, -5.5, -1.0),
(1.0, 0.3, 3.0),
(1.0, -0.3, -4.0),
(1.0, 7.0, 0.0),
(1.0, 1e+300, 0.0),
(1.0, -1e+300, -1.0),
(1.0, 5e-324, f64::INFINITY),
(1.0, -5e-324, f64::NEG_INFINITY),
(1.0, 1e-10, 9999999999.0),
(1.0, 3.0, 0.0),
(1.0, -3.0, -1.0),
(-1.0, f64::NAN, f64::NAN),
(-1.0, f64::INFINITY, -1.0),
(-1.0, f64::NEG_INFINITY, 0.0),
(-1.0, 0.0, f64::NEG_INFINITY),
(-1.0, -0.0, f64::INFINITY),
(-1.0, 1.0, -1.0),
(-1.0, -1.0, 1.0),
(-1.0, 2.0, -1.0),
(-1.0, -2.0, 0.0),
(-1.0, 5.0, -1.0),
(-1.0, -5.0, 0.0),
(-1.0, 5.5, -1.0),
(-1.0, -5.5, 0.0),
(-1.0, 0.3, -4.0),
(-1.0, -0.3, 3.0),
(-1.0, 7.0, -1.0),
(-1.0, 1e+300, -1.0),
(-1.0, -1e+300, 0.0),
(-1.0, 5e-324, f64::NEG_INFINITY),
(-1.0, -5e-324, f64::INFINITY),
(-1.0, 1e-10, -10000000000.0),
(-1.0, 3.0, -1.0),
(-1.0, -3.0, 0.0),
(2.0, f64::NAN, f64::NAN),
(2.0, f64::INFINITY, 0.0),
(2.0, f64::NEG_INFINITY, -1.0),
(2.0, 0.0, f64::INFINITY),
(2.0, -0.0, f64::NEG_INFINITY),
(2.0, 1.0, 2.0),
(2.0, -1.0, -2.0),
(2.0, 2.0, 1.0),
(2.0, -2.0, -1.0),
(2.0, 5.0, 0.0),
(2.0, -5.0, -1.0),
(2.0, 5.5, 0.0),
(2.0, -5.5, -1.0),
(2.0, 0.3, 6.0),
(2.0, -0.3, -7.0),
(2.0, 7.0, 0.0),
(2.0, 1e+300, 0.0),
(2.0, -1e+300, -1.0),
(2.0, 5e-324, f64::INFINITY),
(2.0, -5e-324, f64::NEG_INFINITY),
(2.0, 1e-10, 19999999999.0),
(2.0, 3.0, 0.0),
(2.0, -3.0, -1.0),
(-2.0, f64::NAN, f64::NAN),
(-2.0, f64::INFINITY, -1.0),
(-2.0, f64::NEG_INFINITY, 0.0),
(-2.0, 0.0, f64::NEG_INFINITY),
(-2.0, -0.0, f64::INFINITY),
(-2.0, 1.0, -2.0),
(-2.0, -1.0, 2.0),
(-2.0, 2.0, -1.0),
(-2.0, -2.0, 1.0),
(-2.0, 5.0, -1.0),
(-2.0, -5.0, 0.0),
(-2.0, 5.5, -1.0),
(-2.0, -5.5, 0.0),
(-2.0, 0.3, -7.0),
(-2.0, -0.3, 6.0),
(-2.0, 7.0, -1.0),
(-2.0, 1e+300, -1.0),
(-2.0, -1e+300, 0.0),
(-2.0, 5e-324, f64::NEG_INFINITY),
(-2.0, -5e-324, f64::INFINITY),
(-2.0, 1e-10, -20000000000.0),
(-2.0, 3.0, -1.0),
(-2.0, -3.0, 0.0),
(5.0, f64::NAN, f64::NAN),
(5.0, f64::INFINITY, 0.0),
(5.0, f64::NEG_INFINITY, -1.0),
(5.0, 0.0, f64::INFINITY),
(5.0, -0.0, f64::NEG_INFINITY),
(5.0, 1.0, 5.0),
(5.0, -1.0, -5.0),
(5.0, 2.0, 2.0),
(5.0, -2.0, -3.0),
(5.0, 5.0, 1.0),
(5.0, -5.0, -1.0),
(5.0, 5.5, 0.0),
(5.0, -5.5, -1.0),
(5.0, 0.3, 16.0),
(5.0, -0.3, -17.0),
(5.0, 7.0, 0.0),
(5.0, 1e+300, 0.0),
(5.0, -1e+300, -1.0),
(5.0, 5e-324, f64::INFINITY),
(5.0, -5e-324, f64::NEG_INFINITY),
(5.0, 1e-10, 49999999999.0),
(5.0, 3.0, 1.0),
(5.0, -3.0, -2.0),
(-5.0, f64::NAN, f64::NAN),
(-5.0, f64::INFINITY, -1.0),
(-5.0, f64::NEG_INFINITY, 0.0),
(-5.0, 0.0, f64::NEG_INFINITY),
(-5.0, -0.0, f64::INFINITY),
(-5.0, 1.0, -5.0),
(-5.0, -1.0, 5.0),
(-5.0, 2.0, -3.0),
(-5.0, -2.0, 2.0),
(-5.0, 5.0, -1.0),
(-5.0, -5.0, 1.0),
(-5.0, 5.5, -1.0),
(-5.0, -5.5, 0.0),
(-5.0, 0.3, -17.0),
(-5.0, -0.3, 16.0),
(-5.0, 7.0, -1.0),
(-5.0, 1e+300, -1.0),
(-5.0, -1e+300, 0.0),
(-5.0, 5e-324, f64::NEG_INFINITY),
(-5.0, -5e-324, f64::INFINITY),
(-5.0, 1e-10, -50000000000.0),
(-5.0, 3.0, -2.0),
(-5.0, -3.0, 1.0),
(5.5, f64::NAN, f64::NAN),
(5.5, f64::INFINITY, 0.0),
(5.5, f64::NEG_INFINITY, -1.0),
(5.5, 0.0, f64::INFINITY),
(5.5, -0.0, f64::NEG_INFINITY),
(5.5, 1.0, 5.0),
(5.5, -1.0, -6.0),
(5.5, 2.0, 2.0),
(5.5, -2.0, -3.0),
(5.5, 5.0, 1.0),
(5.5, -5.0, -2.0),
(5.5, 5.5, 1.0),
(5.5, -5.5, -1.0),
(5.5, 0.3, 18.0),
(5.5, -0.3, -19.0),
(5.5, 7.0, 0.0),
(5.5, 1e+300, 0.0),
(5.5, -1e+300, -1.0),
(5.5, 5e-324, f64::INFINITY),
(5.5, -5e-324, f64::NEG_INFINITY),
(5.5, 1e-10, 54999999999.0),
(5.5, 3.0, 1.0),
(5.5, -3.0, -2.0),
(-5.5, f64::NAN, f64::NAN),
(-5.5, f64::INFINITY, -1.0),
(-5.5, f64::NEG_INFINITY, 0.0),
(-5.5, 0.0, f64::NEG_INFINITY),
(-5.5, -0.0, f64::INFINITY),
(-5.5, 1.0, -6.0),
(-5.5, -1.0, 5.0),
(-5.5, 2.0, -3.0),
(-5.5, -2.0, 2.0),
(-5.5, 5.0, -2.0),
(-5.5, -5.0, 1.0),
(-5.5, 5.5, -1.0),
(-5.5, -5.5, 1.0),
(-5.5, 0.3, -19.0),
(-5.5, -0.3, 18.0),
(-5.5, 7.0, -1.0),
(-5.5, 1e+300, -1.0),
(-5.5, -1e+300, 0.0),
(-5.5, 5e-324, f64::NEG_INFINITY),
(-5.5, -5e-324, f64::INFINITY),
(-5.5, 1e-10, -55000000000.0),
(-5.5, 3.0, -2.0),
(-5.5, -3.0, 1.0),
(0.3, f64::NAN, f64::NAN),
(0.3, f64::INFINITY, 0.0),
(0.3, f64::NEG_INFINITY, -1.0),
(0.3, 0.0, f64::INFINITY),
(0.3, -0.0, f64::NEG_INFINITY),
(0.3, 1.0, 0.0),
(0.3, -1.0, -1.0),
(0.3, 2.0, 0.0),
(0.3, -2.0, -1.0),
(0.3, 5.0, 0.0),
(0.3, -5.0, -1.0),
(0.3, 5.5, 0.0),
(0.3, -5.5, -1.0),
(0.3, 0.3, 1.0),
(0.3, -0.3, -1.0),
(0.3, 7.0, 0.0),
(0.3, 1e+300, 0.0),
(0.3, -1e+300, -1.0),
(0.3, 5e-324, f64::INFINITY),
(0.3, -5e-324, f64::NEG_INFINITY),
(0.3, 1e-10, 2999999999.0),
(0.3, 3.0, 0.0),
(0.3, -3.0, -1.0),
(-0.3, f64::NAN, f64::NAN),
(-0.3, f64::INFINITY, -1.0),
(-0.3, f64::NEG_INFINITY, 0.0),
(-0.3, 0.0, f64::NEG_INFINITY),
(-0.3, -0.0, f64::INFINITY),
(-0.3, 1.0, -1.0),
(-0.3, -1.0, 0.0),
(-0.3, 2.0, -1.0),
(-0.3, -2.0, 0.0),
(-0.3, 5.0, -1.0),
(-0.3, -5.0, 0.0),
(-0.3, 5.5, -1.0),
(-0.3, -5.5, 0.0),
(-0.3, 0.3, -1.0),
(-0.3, -0.3, 1.0),
(-0.3, 7.0, -1.0),
(-0.3, 1e+300, -1.0),
(-0.3, -1e+300, 0.0),
(-0.3, 5e-324, f64::NEG_INFINITY),
(-0.3, -5e-324, f64::INFINITY),
(-0.3, 1e-10, -3000000000.0),
(-0.3, 3.0, -1.0),
(-0.3, -3.0, 0.0),
(7.0, f64::NAN, f64::NAN),
(7.0, f64::INFINITY, 0.0),
(7.0, f64::NEG_INFINITY, -1.0),
(7.0, 0.0, f64::INFINITY),
(7.0, -0.0, f64::NEG_INFINITY),
(7.0, 1.0, 7.0),
(7.0, -1.0, -7.0),
(7.0, 2.0, 3.0),
(7.0, -2.0, -4.0),
(7.0, 5.0, 1.0),
(7.0, -5.0, -2.0),
(7.0, 5.5, 1.0),
(7.0, -5.5, -2.0),
(7.0, 0.3, 23.0),
(7.0, -0.3, -24.0),
(7.0, 7.0, 1.0),
(7.0, 1e+300, 0.0),
(7.0, -1e+300, -1.0),
(7.0, 5e-324, f64::INFINITY),
(7.0, -5e-324, f64::NEG_INFINITY),
(7.0, 1e-10, 69999999999.0),
(7.0, 3.0, 2.0),
(7.0, -3.0, -3.0),
(1e+300, f64::NAN, f64::NAN),
(1e+300, f64::INFINITY, 0.0),
(1e+300, f64::NEG_INFINITY, -1.0),
(1e+300, 0.0, f64::INFINITY),
(1e+300, -0.0, f64::NEG_INFINITY),
(1e+300, 1.0, 1e+300),
(1e+300, -1.0, -1e+300),
(1e+300, 2.0, 5e+299),
(1e+300, -2.0, -5e+299),
(1e+300, 5.0, 2e+299),
(1e+300, -5.0, -2e+299),
(1e+300, 5.5, 1.8181818181818183e+299),
(1e+300, -5.5, -1.8181818181818183e+299),
(1e+300, 0.3, 3.3333333333333335e+300),
(1e+300, -0.3, -3.3333333333333335e+300),
(1e+300, 7.0, 1.4285714285714286e+299),
(1e+300, 1e+300, 1.0),
(1e+300, -1e+300, -1.0),
(1e+300, 5e-324, f64::INFINITY),
(1e+300, -5e-324, f64::NEG_INFINITY),
(1e+300, 1e-10, f64::INFINITY),
(1e+300, 3.0, 3.3333333333333335e+299),
(1e+300, -3.0, -3.3333333333333335e+299),
(-1e+300, f64::NAN, f64::NAN),
(-1e+300, f64::INFINITY, -1.0),
(-1e+300, f64::NEG_INFINITY, 0.0),
(-1e+300, 0.0, f64::NEG_INFINITY),
(-1e+300, -0.0, f64::INFINITY),
(-1e+300, 1.0, -1e+300),
(-1e+300, -1.0, 1e+300),
(-1e+300, 2.0, -5e+299),
(-1e+300, -2.0, 5e+299),
(-1e+300, 5.0, -2e+299),
(-1e+300, -5.0, 2e+299),
(-1e+300, 5.5, -1.8181818181818183e+299),
(-1e+300, -5.5, 1.8181818181818183e+299),
(-1e+300, 0.3, -3.3333333333333335e+300),
(-1e+300, -0.3, 3.3333333333333335e+300),
(-1e+300, 7.0, -1.4285714285714286e+299),
(-1e+300, 1e+300, -1.0),
(-1e+300, -1e+300, 1.0),
(-1e+300, 5e-324, f64::NEG_INFINITY),
(-1e+300, -5e-324, f64::INFINITY),
(-1e+300, 1e-10, f64::NEG_INFINITY),
(-1e+300, 3.0, -3.3333333333333335e+299),
(-1e+300, -3.0, 3.3333333333333335e+299),
(5e-324, f64::NAN, f64::NAN),
(5e-324, f64::INFINITY, 0.0),
(5e-324, f64::NEG_INFINITY, -1.0),
(5e-324, 0.0, f64::INFINITY),
(5e-324, -0.0, f64::NEG_INFINITY),
(5e-324, 1.0, 0.0),
(5e-324, -1.0, -1.0),
(5e-324, 2.0, 0.0),
(5e-324, -2.0, -1.0),
(5e-324, 5.0, 0.0),
(5e-324, -5.0, -1.0),
(5e-324, 5.5, 0.0),
(5e-324, -5.5, -1.0),
(5e-324, 0.3, 0.0),
(5e-324, -0.3, -1.0),
(5e-324, 7.0, 0.0),
(5e-324, 1e+300, 0.0),
(5e-324, -1e+300, -1.0),
(5e-324, 5e-324, 1.0),
(5e-324, -5e-324, -1.0),
(5e-324, 1e-10, 0.0),
(5e-324, 3.0, 0.0),
(5e-324, -3.0, -1.0),
(-5e-324, f64::NAN, f64::NAN),
(-5e-324, f64::INFINITY, -1.0),
(-5e-324, f64::NEG_INFINITY, 0.0),
(-5e-324, 0.0, f64::NEG_INFINITY),
(-5e-324, -0.0, f64::INFINITY),
(-5e-324, 1.0, -1.0),
(-5e-324, -1.0, 0.0),
(-5e-324, 2.0, -1.0),
(-5e-324, -2.0, 0.0),
(-5e-324, 5.0, -1.0),
(-5e-324, -5.0, 0.0),
(-5e-324, 5.5, -1.0),
(-5e-324, -5.5, 0.0),
(-5e-324, 0.3, -1.0),
(-5e-324, -0.3, 0.0),
(-5e-324, 7.0, -1.0),
(-5e-324, 1e+300, -1.0),
(-5e-324, -1e+300, 0.0),
(-5e-324, 5e-324, -1.0),
(-5e-324, -5e-324, 1.0),
(-5e-324, 1e-10, -1.0),
(-5e-324, 3.0, -1.0),
(-5e-324, -3.0, 0.0),
(1e-10, f64::NAN, f64::NAN),
(1e-10, f64::INFINITY, 0.0),
(1e-10, f64::NEG_INFINITY, -1.0),
(1e-10, 0.0, f64::INFINITY),
(1e-10, -0.0, f64::NEG_INFINITY),
(1e-10, 1.0, 0.0),
(1e-10, -1.0, -1.0),
(1e-10, 2.0, 0.0),
(1e-10, -2.0, -1.0),
(1e-10, 5.0, 0.0),
(1e-10, -5.0, -1.0),
(1e-10, 5.5, 0.0),
(1e-10, -5.5, -1.0),
(1e-10, 0.3, 0.0),
(1e-10, -0.3, -1.0),
(1e-10, 7.0, 0.0),
(1e-10, 1e+300, 0.0),
(1e-10, -1e+300, -1.0),
(1e-10, 5e-324, f64::INFINITY),
(1e-10, -5e-324, f64::NEG_INFINITY),
(1e-10, 1e-10, 1.0),
(1e-10, 3.0, 0.0),
(1e-10, -3.0, -1.0),
(3.0, f64::NAN, f64::NAN),
(3.0, f64::INFINITY, 0.0),
(3.0, f64::NEG_INFINITY, -1.0),
(3.0, 0.0, f64::INFINITY),
(3.0, -0.0, f64::NEG_INFINITY),
(3.0, 1.0, 3.0),
(3.0, -1.0, -3.0),
(3.0, 2.0, 1.0),
(3.0, -2.0, -2.0),
(3.0, 5.0, 0.0),
(3.0, -5.0, -1.0),
(3.0, 5.5, 0.0),
(3.0, -5.5, -1.0),
(3.0, 0.3, 10.0),
(3.0, -0.3, -11.0),
(3.0, 7.0, 0.0),
(3.0, 1e+300, 0.0),
(3.0, -1e+300, -1.0),
(3.0, 5e-324, f64::INFINITY),
(3.0, -5e-324, f64::NEG_INFINITY),
(3.0, 1e-10, 29999999999.0),
(3.0, 3.0, 1.0),
(3.0, -3.0, -1.0),
(-3.0, f64::NAN, f64::NAN),
(-3.0, f64::INFINITY, -1.0),
(-3.0, f64::NEG_INFINITY, 0.0),
(-3.0, 0.0, f64::NEG_INFINITY),
(-3.0, -0.0, f64::INFINITY),
(-3.0, 1.0, -3.0),
(-3.0, -1.0, 3.0),
(-3.0, 2.0, -2.0),
(-3.0, -2.0, 1.0),
(-3.0, 5.0, -1.0),
(-3.0, -5.0, 0.0),
(-3.0, 5.5, -1.0),
(-3.0, -5.5, 0.0),
(-3.0, 0.3, -11.0),
(-3.0, -0.3, 10.0),
(-3.0, 7.0, -1.0),
(-3.0, 1e+300, -1.0),
(-3.0, -1e+300, 0.0),
(-3.0, 5e-324, f64::NEG_INFINITY),
(-3.0, -5e-324, f64::INFINITY),
(-3.0, 1e-10, -30000000000.0),
(-3.0, 3.0, -1.0),
(-3.0, -3.0, 1.0),
];
for &(x, y, want) in CASES {
check(
"floor_divide",
&format!("{x:?}, {y:?}"),
floor_divide(x, y),
want,
0.0,
0.0,
);
}
}
#[test]
fn copysign_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN),
(f64::NAN, 0.0, f64::NAN),
(f64::NAN, -0.0, f64::NAN),
(f64::NAN, 1.0, f64::NAN),
(f64::NAN, -1.0, f64::NAN),
(f64::NAN, 2.0, f64::NAN),
(f64::NAN, -2.0, f64::NAN),
(f64::NAN, 5.0, f64::NAN),
(f64::NAN, -5.0, f64::NAN),
(f64::NAN, 5.5, f64::NAN),
(f64::NAN, -5.5, f64::NAN),
(f64::NAN, 0.3, f64::NAN),
(f64::NAN, -0.3, f64::NAN),
(f64::NAN, 7.0, f64::NAN),
(f64::NAN, 1e+300, f64::NAN),
(f64::NAN, -1e+300, f64::NAN),
(f64::NAN, 5e-324, f64::NAN),
(f64::NAN, -5e-324, f64::NAN),
(f64::NAN, 1e-10, f64::NAN),
(f64::NAN, 3.0, f64::NAN),
(f64::NAN, -3.0, f64::NAN),
(f64::INFINITY, f64::NAN, f64::INFINITY),
(f64::INFINITY, f64::INFINITY, f64::INFINITY),
(f64::INFINITY, f64::NEG_INFINITY, f64::NEG_INFINITY),
(f64::INFINITY, 0.0, f64::INFINITY),
(f64::INFINITY, -0.0, f64::NEG_INFINITY),
(f64::INFINITY, 1.0, f64::INFINITY),
(f64::INFINITY, -1.0, f64::NEG_INFINITY),
(f64::INFINITY, 2.0, f64::INFINITY),
(f64::INFINITY, -2.0, f64::NEG_INFINITY),
(f64::INFINITY, 5.0, f64::INFINITY),
(f64::INFINITY, -5.0, f64::NEG_INFINITY),
(f64::INFINITY, 5.5, f64::INFINITY),
(f64::INFINITY, -5.5, f64::NEG_INFINITY),
(f64::INFINITY, 0.3, f64::INFINITY),
(f64::INFINITY, -0.3, f64::NEG_INFINITY),
(f64::INFINITY, 7.0, f64::INFINITY),
(f64::INFINITY, 1e+300, f64::INFINITY),
(f64::INFINITY, -1e+300, f64::NEG_INFINITY),
(f64::INFINITY, 5e-324, f64::INFINITY),
(f64::INFINITY, -5e-324, f64::NEG_INFINITY),
(f64::INFINITY, 1e-10, f64::INFINITY),
(f64::INFINITY, 3.0, f64::INFINITY),
(f64::INFINITY, -3.0, f64::NEG_INFINITY),
(f64::NEG_INFINITY, f64::NAN, f64::INFINITY),
(f64::NEG_INFINITY, f64::INFINITY, f64::INFINITY),
(f64::NEG_INFINITY, f64::NEG_INFINITY, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 0.0, f64::INFINITY),
(f64::NEG_INFINITY, -0.0, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 1.0, f64::INFINITY),
(f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 2.0, f64::INFINITY),
(f64::NEG_INFINITY, -2.0, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 5.0, f64::INFINITY),
(f64::NEG_INFINITY, -5.0, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 5.5, f64::INFINITY),
(f64::NEG_INFINITY, -5.5, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 0.3, f64::INFINITY),
(f64::NEG_INFINITY, -0.3, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 7.0, f64::INFINITY),
(f64::NEG_INFINITY, 1e+300, f64::INFINITY),
(f64::NEG_INFINITY, -1e+300, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 5e-324, f64::INFINITY),
(f64::NEG_INFINITY, -5e-324, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 1e-10, f64::INFINITY),
(f64::NEG_INFINITY, 3.0, f64::INFINITY),
(f64::NEG_INFINITY, -3.0, f64::NEG_INFINITY),
(0.0, f64::NAN, 0.0),
(0.0, f64::INFINITY, 0.0),
(0.0, f64::NEG_INFINITY, -0.0),
(0.0, 0.0, 0.0),
(0.0, -0.0, -0.0),
(0.0, 1.0, 0.0),
(0.0, -1.0, -0.0),
(0.0, 2.0, 0.0),
(0.0, -2.0, -0.0),
(0.0, 5.0, 0.0),
(0.0, -5.0, -0.0),
(0.0, 5.5, 0.0),
(0.0, -5.5, -0.0),
(0.0, 0.3, 0.0),
(0.0, -0.3, -0.0),
(0.0, 7.0, 0.0),
(0.0, 1e+300, 0.0),
(0.0, -1e+300, -0.0),
(0.0, 5e-324, 0.0),
(0.0, -5e-324, -0.0),
(0.0, 1e-10, 0.0),
(0.0, 3.0, 0.0),
(0.0, -3.0, -0.0),
(-0.0, f64::NAN, 0.0),
(-0.0, f64::INFINITY, 0.0),
(-0.0, f64::NEG_INFINITY, -0.0),
(-0.0, 0.0, 0.0),
(-0.0, -0.0, -0.0),
(-0.0, 1.0, 0.0),
(-0.0, -1.0, -0.0),
(-0.0, 2.0, 0.0),
(-0.0, -2.0, -0.0),
(-0.0, 5.0, 0.0),
(-0.0, -5.0, -0.0),
(-0.0, 5.5, 0.0),
(-0.0, -5.5, -0.0),
(-0.0, 0.3, 0.0),
(-0.0, -0.3, -0.0),
(-0.0, 7.0, 0.0),
(-0.0, 1e+300, 0.0),
(-0.0, -1e+300, -0.0),
(-0.0, 5e-324, 0.0),
(-0.0, -5e-324, -0.0),
(-0.0, 1e-10, 0.0),
(-0.0, 3.0, 0.0),
(-0.0, -3.0, -0.0),
(1.0, f64::NAN, 1.0),
(1.0, f64::INFINITY, 1.0),
(1.0, f64::NEG_INFINITY, -1.0),
(1.0, 0.0, 1.0),
(1.0, -0.0, -1.0),
(1.0, 1.0, 1.0),
(1.0, -1.0, -1.0),
(1.0, 2.0, 1.0),
(1.0, -2.0, -1.0),
(1.0, 5.0, 1.0),
(1.0, -5.0, -1.0),
(1.0, 5.5, 1.0),
(1.0, -5.5, -1.0),
(1.0, 0.3, 1.0),
(1.0, -0.3, -1.0),
(1.0, 7.0, 1.0),
(1.0, 1e+300, 1.0),
(1.0, -1e+300, -1.0),
(1.0, 5e-324, 1.0),
(1.0, -5e-324, -1.0),
(1.0, 1e-10, 1.0),
(1.0, 3.0, 1.0),
(1.0, -3.0, -1.0),
(-1.0, f64::NAN, 1.0),
(-1.0, f64::INFINITY, 1.0),
(-1.0, f64::NEG_INFINITY, -1.0),
(-1.0, 0.0, 1.0),
(-1.0, -0.0, -1.0),
(-1.0, 1.0, 1.0),
(-1.0, -1.0, -1.0),
(-1.0, 2.0, 1.0),
(-1.0, -2.0, -1.0),
(-1.0, 5.0, 1.0),
(-1.0, -5.0, -1.0),
(-1.0, 5.5, 1.0),
(-1.0, -5.5, -1.0),
(-1.0, 0.3, 1.0),
(-1.0, -0.3, -1.0),
(-1.0, 7.0, 1.0),
(-1.0, 1e+300, 1.0),
(-1.0, -1e+300, -1.0),
(-1.0, 5e-324, 1.0),
(-1.0, -5e-324, -1.0),
(-1.0, 1e-10, 1.0),
(-1.0, 3.0, 1.0),
(-1.0, -3.0, -1.0),
(2.0, f64::NAN, 2.0),
(2.0, f64::INFINITY, 2.0),
(2.0, f64::NEG_INFINITY, -2.0),
(2.0, 0.0, 2.0),
(2.0, -0.0, -2.0),
(2.0, 1.0, 2.0),
(2.0, -1.0, -2.0),
(2.0, 2.0, 2.0),
(2.0, -2.0, -2.0),
(2.0, 5.0, 2.0),
(2.0, -5.0, -2.0),
(2.0, 5.5, 2.0),
(2.0, -5.5, -2.0),
(2.0, 0.3, 2.0),
(2.0, -0.3, -2.0),
(2.0, 7.0, 2.0),
(2.0, 1e+300, 2.0),
(2.0, -1e+300, -2.0),
(2.0, 5e-324, 2.0),
(2.0, -5e-324, -2.0),
(2.0, 1e-10, 2.0),
(2.0, 3.0, 2.0),
(2.0, -3.0, -2.0),
(-2.0, f64::NAN, 2.0),
(-2.0, f64::INFINITY, 2.0),
(-2.0, f64::NEG_INFINITY, -2.0),
(-2.0, 0.0, 2.0),
(-2.0, -0.0, -2.0),
(-2.0, 1.0, 2.0),
(-2.0, -1.0, -2.0),
(-2.0, 2.0, 2.0),
(-2.0, -2.0, -2.0),
(-2.0, 5.0, 2.0),
(-2.0, -5.0, -2.0),
(-2.0, 5.5, 2.0),
(-2.0, -5.5, -2.0),
(-2.0, 0.3, 2.0),
(-2.0, -0.3, -2.0),
(-2.0, 7.0, 2.0),
(-2.0, 1e+300, 2.0),
(-2.0, -1e+300, -2.0),
(-2.0, 5e-324, 2.0),
(-2.0, -5e-324, -2.0),
(-2.0, 1e-10, 2.0),
(-2.0, 3.0, 2.0),
(-2.0, -3.0, -2.0),
(5.0, f64::NAN, 5.0),
(5.0, f64::INFINITY, 5.0),
(5.0, f64::NEG_INFINITY, -5.0),
(5.0, 0.0, 5.0),
(5.0, -0.0, -5.0),
(5.0, 1.0, 5.0),
(5.0, -1.0, -5.0),
(5.0, 2.0, 5.0),
(5.0, -2.0, -5.0),
(5.0, 5.0, 5.0),
(5.0, -5.0, -5.0),
(5.0, 5.5, 5.0),
(5.0, -5.5, -5.0),
(5.0, 0.3, 5.0),
(5.0, -0.3, -5.0),
(5.0, 7.0, 5.0),
(5.0, 1e+300, 5.0),
(5.0, -1e+300, -5.0),
(5.0, 5e-324, 5.0),
(5.0, -5e-324, -5.0),
(5.0, 1e-10, 5.0),
(5.0, 3.0, 5.0),
(5.0, -3.0, -5.0),
(-5.0, f64::NAN, 5.0),
(-5.0, f64::INFINITY, 5.0),
(-5.0, f64::NEG_INFINITY, -5.0),
(-5.0, 0.0, 5.0),
(-5.0, -0.0, -5.0),
(-5.0, 1.0, 5.0),
(-5.0, -1.0, -5.0),
(-5.0, 2.0, 5.0),
(-5.0, -2.0, -5.0),
(-5.0, 5.0, 5.0),
(-5.0, -5.0, -5.0),
(-5.0, 5.5, 5.0),
(-5.0, -5.5, -5.0),
(-5.0, 0.3, 5.0),
(-5.0, -0.3, -5.0),
(-5.0, 7.0, 5.0),
(-5.0, 1e+300, 5.0),
(-5.0, -1e+300, -5.0),
(-5.0, 5e-324, 5.0),
(-5.0, -5e-324, -5.0),
(-5.0, 1e-10, 5.0),
(-5.0, 3.0, 5.0),
(-5.0, -3.0, -5.0),
(5.5, f64::NAN, 5.5),
(5.5, f64::INFINITY, 5.5),
(5.5, f64::NEG_INFINITY, -5.5),
(5.5, 0.0, 5.5),
(5.5, -0.0, -5.5),
(5.5, 1.0, 5.5),
(5.5, -1.0, -5.5),
(5.5, 2.0, 5.5),
(5.5, -2.0, -5.5),
(5.5, 5.0, 5.5),
(5.5, -5.0, -5.5),
(5.5, 5.5, 5.5),
(5.5, -5.5, -5.5),
(5.5, 0.3, 5.5),
(5.5, -0.3, -5.5),
(5.5, 7.0, 5.5),
(5.5, 1e+300, 5.5),
(5.5, -1e+300, -5.5),
(5.5, 5e-324, 5.5),
(5.5, -5e-324, -5.5),
(5.5, 1e-10, 5.5),
(5.5, 3.0, 5.5),
(5.5, -3.0, -5.5),
(-5.5, f64::NAN, 5.5),
(-5.5, f64::INFINITY, 5.5),
(-5.5, f64::NEG_INFINITY, -5.5),
(-5.5, 0.0, 5.5),
(-5.5, -0.0, -5.5),
(-5.5, 1.0, 5.5),
(-5.5, -1.0, -5.5),
(-5.5, 2.0, 5.5),
(-5.5, -2.0, -5.5),
(-5.5, 5.0, 5.5),
(-5.5, -5.0, -5.5),
(-5.5, 5.5, 5.5),
(-5.5, -5.5, -5.5),
(-5.5, 0.3, 5.5),
(-5.5, -0.3, -5.5),
(-5.5, 7.0, 5.5),
(-5.5, 1e+300, 5.5),
(-5.5, -1e+300, -5.5),
(-5.5, 5e-324, 5.5),
(-5.5, -5e-324, -5.5),
(-5.5, 1e-10, 5.5),
(-5.5, 3.0, 5.5),
(-5.5, -3.0, -5.5),
(0.3, f64::NAN, 0.3),
(0.3, f64::INFINITY, 0.3),
(0.3, f64::NEG_INFINITY, -0.3),
(0.3, 0.0, 0.3),
(0.3, -0.0, -0.3),
(0.3, 1.0, 0.3),
(0.3, -1.0, -0.3),
(0.3, 2.0, 0.3),
(0.3, -2.0, -0.3),
(0.3, 5.0, 0.3),
(0.3, -5.0, -0.3),
(0.3, 5.5, 0.3),
(0.3, -5.5, -0.3),
(0.3, 0.3, 0.3),
(0.3, -0.3, -0.3),
(0.3, 7.0, 0.3),
(0.3, 1e+300, 0.3),
(0.3, -1e+300, -0.3),
(0.3, 5e-324, 0.3),
(0.3, -5e-324, -0.3),
(0.3, 1e-10, 0.3),
(0.3, 3.0, 0.3),
(0.3, -3.0, -0.3),
(-0.3, f64::NAN, 0.3),
(-0.3, f64::INFINITY, 0.3),
(-0.3, f64::NEG_INFINITY, -0.3),
(-0.3, 0.0, 0.3),
(-0.3, -0.0, -0.3),
(-0.3, 1.0, 0.3),
(-0.3, -1.0, -0.3),
(-0.3, 2.0, 0.3),
(-0.3, -2.0, -0.3),
(-0.3, 5.0, 0.3),
(-0.3, -5.0, -0.3),
(-0.3, 5.5, 0.3),
(-0.3, -5.5, -0.3),
(-0.3, 0.3, 0.3),
(-0.3, -0.3, -0.3),
(-0.3, 7.0, 0.3),
(-0.3, 1e+300, 0.3),
(-0.3, -1e+300, -0.3),
(-0.3, 5e-324, 0.3),
(-0.3, -5e-324, -0.3),
(-0.3, 1e-10, 0.3),
(-0.3, 3.0, 0.3),
(-0.3, -3.0, -0.3),
(7.0, f64::NAN, 7.0),
(7.0, f64::INFINITY, 7.0),
(7.0, f64::NEG_INFINITY, -7.0),
(7.0, 0.0, 7.0),
(7.0, -0.0, -7.0),
(7.0, 1.0, 7.0),
(7.0, -1.0, -7.0),
(7.0, 2.0, 7.0),
(7.0, -2.0, -7.0),
(7.0, 5.0, 7.0),
(7.0, -5.0, -7.0),
(7.0, 5.5, 7.0),
(7.0, -5.5, -7.0),
(7.0, 0.3, 7.0),
(7.0, -0.3, -7.0),
(7.0, 7.0, 7.0),
(7.0, 1e+300, 7.0),
(7.0, -1e+300, -7.0),
(7.0, 5e-324, 7.0),
(7.0, -5e-324, -7.0),
(7.0, 1e-10, 7.0),
(7.0, 3.0, 7.0),
(7.0, -3.0, -7.0),
(1e+300, f64::NAN, 1e+300),
(1e+300, f64::INFINITY, 1e+300),
(1e+300, f64::NEG_INFINITY, -1e+300),
(1e+300, 0.0, 1e+300),
(1e+300, -0.0, -1e+300),
(1e+300, 1.0, 1e+300),
(1e+300, -1.0, -1e+300),
(1e+300, 2.0, 1e+300),
(1e+300, -2.0, -1e+300),
(1e+300, 5.0, 1e+300),
(1e+300, -5.0, -1e+300),
(1e+300, 5.5, 1e+300),
(1e+300, -5.5, -1e+300),
(1e+300, 0.3, 1e+300),
(1e+300, -0.3, -1e+300),
(1e+300, 7.0, 1e+300),
(1e+300, 1e+300, 1e+300),
(1e+300, -1e+300, -1e+300),
(1e+300, 5e-324, 1e+300),
(1e+300, -5e-324, -1e+300),
(1e+300, 1e-10, 1e+300),
(1e+300, 3.0, 1e+300),
(1e+300, -3.0, -1e+300),
(-1e+300, f64::NAN, 1e+300),
(-1e+300, f64::INFINITY, 1e+300),
(-1e+300, f64::NEG_INFINITY, -1e+300),
(-1e+300, 0.0, 1e+300),
(-1e+300, -0.0, -1e+300),
(-1e+300, 1.0, 1e+300),
(-1e+300, -1.0, -1e+300),
(-1e+300, 2.0, 1e+300),
(-1e+300, -2.0, -1e+300),
(-1e+300, 5.0, 1e+300),
(-1e+300, -5.0, -1e+300),
(-1e+300, 5.5, 1e+300),
(-1e+300, -5.5, -1e+300),
(-1e+300, 0.3, 1e+300),
(-1e+300, -0.3, -1e+300),
(-1e+300, 7.0, 1e+300),
(-1e+300, 1e+300, 1e+300),
(-1e+300, -1e+300, -1e+300),
(-1e+300, 5e-324, 1e+300),
(-1e+300, -5e-324, -1e+300),
(-1e+300, 1e-10, 1e+300),
(-1e+300, 3.0, 1e+300),
(-1e+300, -3.0, -1e+300),
(5e-324, f64::NAN, 5e-324),
(5e-324, f64::INFINITY, 5e-324),
(5e-324, f64::NEG_INFINITY, -5e-324),
(5e-324, 0.0, 5e-324),
(5e-324, -0.0, -5e-324),
(5e-324, 1.0, 5e-324),
(5e-324, -1.0, -5e-324),
(5e-324, 2.0, 5e-324),
(5e-324, -2.0, -5e-324),
(5e-324, 5.0, 5e-324),
(5e-324, -5.0, -5e-324),
(5e-324, 5.5, 5e-324),
(5e-324, -5.5, -5e-324),
(5e-324, 0.3, 5e-324),
(5e-324, -0.3, -5e-324),
(5e-324, 7.0, 5e-324),
(5e-324, 1e+300, 5e-324),
(5e-324, -1e+300, -5e-324),
(5e-324, 5e-324, 5e-324),
(5e-324, -5e-324, -5e-324),
(5e-324, 1e-10, 5e-324),
(5e-324, 3.0, 5e-324),
(5e-324, -3.0, -5e-324),
(-5e-324, f64::NAN, 5e-324),
(-5e-324, f64::INFINITY, 5e-324),
(-5e-324, f64::NEG_INFINITY, -5e-324),
(-5e-324, 0.0, 5e-324),
(-5e-324, -0.0, -5e-324),
(-5e-324, 1.0, 5e-324),
(-5e-324, -1.0, -5e-324),
(-5e-324, 2.0, 5e-324),
(-5e-324, -2.0, -5e-324),
(-5e-324, 5.0, 5e-324),
(-5e-324, -5.0, -5e-324),
(-5e-324, 5.5, 5e-324),
(-5e-324, -5.5, -5e-324),
(-5e-324, 0.3, 5e-324),
(-5e-324, -0.3, -5e-324),
(-5e-324, 7.0, 5e-324),
(-5e-324, 1e+300, 5e-324),
(-5e-324, -1e+300, -5e-324),
(-5e-324, 5e-324, 5e-324),
(-5e-324, -5e-324, -5e-324),
(-5e-324, 1e-10, 5e-324),
(-5e-324, 3.0, 5e-324),
(-5e-324, -3.0, -5e-324),
(1e-10, f64::NAN, 1e-10),
(1e-10, f64::INFINITY, 1e-10),
(1e-10, f64::NEG_INFINITY, -1e-10),
(1e-10, 0.0, 1e-10),
(1e-10, -0.0, -1e-10),
(1e-10, 1.0, 1e-10),
(1e-10, -1.0, -1e-10),
(1e-10, 2.0, 1e-10),
(1e-10, -2.0, -1e-10),
(1e-10, 5.0, 1e-10),
(1e-10, -5.0, -1e-10),
(1e-10, 5.5, 1e-10),
(1e-10, -5.5, -1e-10),
(1e-10, 0.3, 1e-10),
(1e-10, -0.3, -1e-10),
(1e-10, 7.0, 1e-10),
(1e-10, 1e+300, 1e-10),
(1e-10, -1e+300, -1e-10),
(1e-10, 5e-324, 1e-10),
(1e-10, -5e-324, -1e-10),
(1e-10, 1e-10, 1e-10),
(1e-10, 3.0, 1e-10),
(1e-10, -3.0, -1e-10),
(3.0, f64::NAN, 3.0),
(3.0, f64::INFINITY, 3.0),
(3.0, f64::NEG_INFINITY, -3.0),
(3.0, 0.0, 3.0),
(3.0, -0.0, -3.0),
(3.0, 1.0, 3.0),
(3.0, -1.0, -3.0),
(3.0, 2.0, 3.0),
(3.0, -2.0, -3.0),
(3.0, 5.0, 3.0),
(3.0, -5.0, -3.0),
(3.0, 5.5, 3.0),
(3.0, -5.5, -3.0),
(3.0, 0.3, 3.0),
(3.0, -0.3, -3.0),
(3.0, 7.0, 3.0),
(3.0, 1e+300, 3.0),
(3.0, -1e+300, -3.0),
(3.0, 5e-324, 3.0),
(3.0, -5e-324, -3.0),
(3.0, 1e-10, 3.0),
(3.0, 3.0, 3.0),
(3.0, -3.0, -3.0),
(-3.0, f64::NAN, 3.0),
(-3.0, f64::INFINITY, 3.0),
(-3.0, f64::NEG_INFINITY, -3.0),
(-3.0, 0.0, 3.0),
(-3.0, -0.0, -3.0),
(-3.0, 1.0, 3.0),
(-3.0, -1.0, -3.0),
(-3.0, 2.0, 3.0),
(-3.0, -2.0, -3.0),
(-3.0, 5.0, 3.0),
(-3.0, -5.0, -3.0),
(-3.0, 5.5, 3.0),
(-3.0, -5.5, -3.0),
(-3.0, 0.3, 3.0),
(-3.0, -0.3, -3.0),
(-3.0, 7.0, 3.0),
(-3.0, 1e+300, 3.0),
(-3.0, -1e+300, -3.0),
(-3.0, 5e-324, 3.0),
(-3.0, -5e-324, -3.0),
(-3.0, 1e-10, 3.0),
(-3.0, 3.0, 3.0),
(-3.0, -3.0, -3.0),
];
for &(x, y, want) in CASES {
check(
"copysign",
&format!("{x:?}, {y:?}"),
copysign(x, y),
want,
0.0,
0.0,
);
}
}
#[test]
fn nextafter_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN),
(f64::NAN, 0.0, f64::NAN),
(f64::NAN, -0.0, f64::NAN),
(f64::NAN, 1.0, f64::NAN),
(f64::NAN, -1.0, f64::NAN),
(f64::NAN, 2.0, f64::NAN),
(f64::NAN, -2.0, f64::NAN),
(f64::NAN, 5.0, f64::NAN),
(f64::NAN, -5.0, f64::NAN),
(f64::NAN, 5.5, f64::NAN),
(f64::NAN, -5.5, f64::NAN),
(f64::NAN, 0.3, f64::NAN),
(f64::NAN, -0.3, f64::NAN),
(f64::NAN, 7.0, f64::NAN),
(f64::NAN, 1e+300, f64::NAN),
(f64::NAN, -1e+300, f64::NAN),
(f64::NAN, 5e-324, f64::NAN),
(f64::NAN, -5e-324, f64::NAN),
(f64::NAN, 1e-10, f64::NAN),
(f64::NAN, 3.0, f64::NAN),
(f64::NAN, -3.0, f64::NAN),
(f64::INFINITY, f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY, f64::INFINITY),
(f64::INFINITY, f64::NEG_INFINITY, 1.7976931348623157e+308),
(f64::INFINITY, 0.0, 1.7976931348623157e+308),
(f64::INFINITY, -0.0, 1.7976931348623157e+308),
(f64::INFINITY, 1.0, 1.7976931348623157e+308),
(f64::INFINITY, -1.0, 1.7976931348623157e+308),
(f64::INFINITY, 2.0, 1.7976931348623157e+308),
(f64::INFINITY, -2.0, 1.7976931348623157e+308),
(f64::INFINITY, 5.0, 1.7976931348623157e+308),
(f64::INFINITY, -5.0, 1.7976931348623157e+308),
(f64::INFINITY, 5.5, 1.7976931348623157e+308),
(f64::INFINITY, -5.5, 1.7976931348623157e+308),
(f64::INFINITY, 0.3, 1.7976931348623157e+308),
(f64::INFINITY, -0.3, 1.7976931348623157e+308),
(f64::INFINITY, 7.0, 1.7976931348623157e+308),
(f64::INFINITY, 1e+300, 1.7976931348623157e+308),
(f64::INFINITY, -1e+300, 1.7976931348623157e+308),
(f64::INFINITY, 5e-324, 1.7976931348623157e+308),
(f64::INFINITY, -5e-324, 1.7976931348623157e+308),
(f64::INFINITY, 1e-10, 1.7976931348623157e+308),
(f64::INFINITY, 3.0, 1.7976931348623157e+308),
(f64::INFINITY, -3.0, 1.7976931348623157e+308),
(f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::INFINITY, -1.7976931348623157e+308),
(f64::NEG_INFINITY, f64::NEG_INFINITY, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 0.0, -1.7976931348623157e+308),
(f64::NEG_INFINITY, -0.0, -1.7976931348623157e+308),
(f64::NEG_INFINITY, 1.0, -1.7976931348623157e+308),
(f64::NEG_INFINITY, -1.0, -1.7976931348623157e+308),
(f64::NEG_INFINITY, 2.0, -1.7976931348623157e+308),
(f64::NEG_INFINITY, -2.0, -1.7976931348623157e+308),
(f64::NEG_INFINITY, 5.0, -1.7976931348623157e+308),
(f64::NEG_INFINITY, -5.0, -1.7976931348623157e+308),
(f64::NEG_INFINITY, 5.5, -1.7976931348623157e+308),
(f64::NEG_INFINITY, -5.5, -1.7976931348623157e+308),
(f64::NEG_INFINITY, 0.3, -1.7976931348623157e+308),
(f64::NEG_INFINITY, -0.3, -1.7976931348623157e+308),
(f64::NEG_INFINITY, 7.0, -1.7976931348623157e+308),
(f64::NEG_INFINITY, 1e+300, -1.7976931348623157e+308),
(f64::NEG_INFINITY, -1e+300, -1.7976931348623157e+308),
(f64::NEG_INFINITY, 5e-324, -1.7976931348623157e+308),
(f64::NEG_INFINITY, -5e-324, -1.7976931348623157e+308),
(f64::NEG_INFINITY, 1e-10, -1.7976931348623157e+308),
(f64::NEG_INFINITY, 3.0, -1.7976931348623157e+308),
(f64::NEG_INFINITY, -3.0, -1.7976931348623157e+308),
(0.0, f64::NAN, f64::NAN),
(0.0, f64::INFINITY, 5e-324),
(0.0, f64::NEG_INFINITY, -5e-324),
(0.0, 0.0, 0.0),
(0.0, -0.0, -0.0),
(0.0, 1.0, 5e-324),
(0.0, -1.0, -5e-324),
(0.0, 2.0, 5e-324),
(0.0, -2.0, -5e-324),
(0.0, 5.0, 5e-324),
(0.0, -5.0, -5e-324),
(0.0, 5.5, 5e-324),
(0.0, -5.5, -5e-324),
(0.0, 0.3, 5e-324),
(0.0, -0.3, -5e-324),
(0.0, 7.0, 5e-324),
(0.0, 1e+300, 5e-324),
(0.0, -1e+300, -5e-324),
(0.0, 5e-324, 5e-324),
(0.0, -5e-324, -5e-324),
(0.0, 1e-10, 5e-324),
(0.0, 3.0, 5e-324),
(0.0, -3.0, -5e-324),
(-0.0, f64::NAN, f64::NAN),
(-0.0, f64::INFINITY, 5e-324),
(-0.0, f64::NEG_INFINITY, -5e-324),
(-0.0, 0.0, 0.0),
(-0.0, -0.0, -0.0),
(-0.0, 1.0, 5e-324),
(-0.0, -1.0, -5e-324),
(-0.0, 2.0, 5e-324),
(-0.0, -2.0, -5e-324),
(-0.0, 5.0, 5e-324),
(-0.0, -5.0, -5e-324),
(-0.0, 5.5, 5e-324),
(-0.0, -5.5, -5e-324),
(-0.0, 0.3, 5e-324),
(-0.0, -0.3, -5e-324),
(-0.0, 7.0, 5e-324),
(-0.0, 1e+300, 5e-324),
(-0.0, -1e+300, -5e-324),
(-0.0, 5e-324, 5e-324),
(-0.0, -5e-324, -5e-324),
(-0.0, 1e-10, 5e-324),
(-0.0, 3.0, 5e-324),
(-0.0, -3.0, -5e-324),
(1.0, f64::NAN, f64::NAN),
(1.0, f64::INFINITY, 1.0000000000000002),
(1.0, f64::NEG_INFINITY, 0.9999999999999999),
(1.0, 0.0, 0.9999999999999999),
(1.0, -0.0, 0.9999999999999999),
(1.0, 1.0, 1.0),
(1.0, -1.0, 0.9999999999999999),
(1.0, 2.0, 1.0000000000000002),
(1.0, -2.0, 0.9999999999999999),
(1.0, 5.0, 1.0000000000000002),
(1.0, -5.0, 0.9999999999999999),
(1.0, 5.5, 1.0000000000000002),
(1.0, -5.5, 0.9999999999999999),
(1.0, 0.3, 0.9999999999999999),
(1.0, -0.3, 0.9999999999999999),
(1.0, 7.0, 1.0000000000000002),
(1.0, 1e+300, 1.0000000000000002),
(1.0, -1e+300, 0.9999999999999999),
(1.0, 5e-324, 0.9999999999999999),
(1.0, -5e-324, 0.9999999999999999),
(1.0, 1e-10, 0.9999999999999999),
(1.0, 3.0, 1.0000000000000002),
(1.0, -3.0, 0.9999999999999999),
(-1.0, f64::NAN, f64::NAN),
(-1.0, f64::INFINITY, -0.9999999999999999),
(-1.0, f64::NEG_INFINITY, -1.0000000000000002),
(-1.0, 0.0, -0.9999999999999999),
(-1.0, -0.0, -0.9999999999999999),
(-1.0, 1.0, -0.9999999999999999),
(-1.0, -1.0, -1.0),
(-1.0, 2.0, -0.9999999999999999),
(-1.0, -2.0, -1.0000000000000002),
(-1.0, 5.0, -0.9999999999999999),
(-1.0, -5.0, -1.0000000000000002),
(-1.0, 5.5, -0.9999999999999999),
(-1.0, -5.5, -1.0000000000000002),
(-1.0, 0.3, -0.9999999999999999),
(-1.0, -0.3, -0.9999999999999999),
(-1.0, 7.0, -0.9999999999999999),
(-1.0, 1e+300, -0.9999999999999999),
(-1.0, -1e+300, -1.0000000000000002),
(-1.0, 5e-324, -0.9999999999999999),
(-1.0, -5e-324, -0.9999999999999999),
(-1.0, 1e-10, -0.9999999999999999),
(-1.0, 3.0, -0.9999999999999999),
(-1.0, -3.0, -1.0000000000000002),
(2.0, f64::NAN, f64::NAN),
(2.0, f64::INFINITY, 2.0000000000000004),
(2.0, f64::NEG_INFINITY, 1.9999999999999998),
(2.0, 0.0, 1.9999999999999998),
(2.0, -0.0, 1.9999999999999998),
(2.0, 1.0, 1.9999999999999998),
(2.0, -1.0, 1.9999999999999998),
(2.0, 2.0, 2.0),
(2.0, -2.0, 1.9999999999999998),
(2.0, 5.0, 2.0000000000000004),
(2.0, -5.0, 1.9999999999999998),
(2.0, 5.5, 2.0000000000000004),
(2.0, -5.5, 1.9999999999999998),
(2.0, 0.3, 1.9999999999999998),
(2.0, -0.3, 1.9999999999999998),
(2.0, 7.0, 2.0000000000000004),
(2.0, 1e+300, 2.0000000000000004),
(2.0, -1e+300, 1.9999999999999998),
(2.0, 5e-324, 1.9999999999999998),
(2.0, -5e-324, 1.9999999999999998),
(2.0, 1e-10, 1.9999999999999998),
(2.0, 3.0, 2.0000000000000004),
(2.0, -3.0, 1.9999999999999998),
(-2.0, f64::NAN, f64::NAN),
(-2.0, f64::INFINITY, -1.9999999999999998),
(-2.0, f64::NEG_INFINITY, -2.0000000000000004),
(-2.0, 0.0, -1.9999999999999998),
(-2.0, -0.0, -1.9999999999999998),
(-2.0, 1.0, -1.9999999999999998),
(-2.0, -1.0, -1.9999999999999998),
(-2.0, 2.0, -1.9999999999999998),
(-2.0, -2.0, -2.0),
(-2.0, 5.0, -1.9999999999999998),
(-2.0, -5.0, -2.0000000000000004),
(-2.0, 5.5, -1.9999999999999998),
(-2.0, -5.5, -2.0000000000000004),
(-2.0, 0.3, -1.9999999999999998),
(-2.0, -0.3, -1.9999999999999998),
(-2.0, 7.0, -1.9999999999999998),
(-2.0, 1e+300, -1.9999999999999998),
(-2.0, -1e+300, -2.0000000000000004),
(-2.0, 5e-324, -1.9999999999999998),
(-2.0, -5e-324, -1.9999999999999998),
(-2.0, 1e-10, -1.9999999999999998),
(-2.0, 3.0, -1.9999999999999998),
(-2.0, -3.0, -2.0000000000000004),
(5.0, f64::NAN, f64::NAN),
(5.0, f64::INFINITY, 5.000000000000001),
(5.0, f64::NEG_INFINITY, 4.999999999999999),
(5.0, 0.0, 4.999999999999999),
(5.0, -0.0, 4.999999999999999),
(5.0, 1.0, 4.999999999999999),
(5.0, -1.0, 4.999999999999999),
(5.0, 2.0, 4.999999999999999),
(5.0, -2.0, 4.999999999999999),
(5.0, 5.0, 5.0),
(5.0, -5.0, 4.999999999999999),
(5.0, 5.5, 5.000000000000001),
(5.0, -5.5, 4.999999999999999),
(5.0, 0.3, 4.999999999999999),
(5.0, -0.3, 4.999999999999999),
(5.0, 7.0, 5.000000000000001),
(5.0, 1e+300, 5.000000000000001),
(5.0, -1e+300, 4.999999999999999),
(5.0, 5e-324, 4.999999999999999),
(5.0, -5e-324, 4.999999999999999),
(5.0, 1e-10, 4.999999999999999),
(5.0, 3.0, 4.999999999999999),
(5.0, -3.0, 4.999999999999999),
(-5.0, f64::NAN, f64::NAN),
(-5.0, f64::INFINITY, -4.999999999999999),
(-5.0, f64::NEG_INFINITY, -5.000000000000001),
(-5.0, 0.0, -4.999999999999999),
(-5.0, -0.0, -4.999999999999999),
(-5.0, 1.0, -4.999999999999999),
(-5.0, -1.0, -4.999999999999999),
(-5.0, 2.0, -4.999999999999999),
(-5.0, -2.0, -4.999999999999999),
(-5.0, 5.0, -4.999999999999999),
(-5.0, -5.0, -5.0),
(-5.0, 5.5, -4.999999999999999),
(-5.0, -5.5, -5.000000000000001),
(-5.0, 0.3, -4.999999999999999),
(-5.0, -0.3, -4.999999999999999),
(-5.0, 7.0, -4.999999999999999),
(-5.0, 1e+300, -4.999999999999999),
(-5.0, -1e+300, -5.000000000000001),
(-5.0, 5e-324, -4.999999999999999),
(-5.0, -5e-324, -4.999999999999999),
(-5.0, 1e-10, -4.999999999999999),
(-5.0, 3.0, -4.999999999999999),
(-5.0, -3.0, -4.999999999999999),
(5.5, f64::NAN, f64::NAN),
(5.5, f64::INFINITY, 5.500000000000001),
(5.5, f64::NEG_INFINITY, 5.499999999999999),
(5.5, 0.0, 5.499999999999999),
(5.5, -0.0, 5.499999999999999),
(5.5, 1.0, 5.499999999999999),
(5.5, -1.0, 5.499999999999999),
(5.5, 2.0, 5.499999999999999),
(5.5, -2.0, 5.499999999999999),
(5.5, 5.0, 5.499999999999999),
(5.5, -5.0, 5.499999999999999),
(5.5, 5.5, 5.5),
(5.5, -5.5, 5.499999999999999),
(5.5, 0.3, 5.499999999999999),
(5.5, -0.3, 5.499999999999999),
(5.5, 7.0, 5.500000000000001),
(5.5, 1e+300, 5.500000000000001),
(5.5, -1e+300, 5.499999999999999),
(5.5, 5e-324, 5.499999999999999),
(5.5, -5e-324, 5.499999999999999),
(5.5, 1e-10, 5.499999999999999),
(5.5, 3.0, 5.499999999999999),
(5.5, -3.0, 5.499999999999999),
(-5.5, f64::NAN, f64::NAN),
(-5.5, f64::INFINITY, -5.499999999999999),
(-5.5, f64::NEG_INFINITY, -5.500000000000001),
(-5.5, 0.0, -5.499999999999999),
(-5.5, -0.0, -5.499999999999999),
(-5.5, 1.0, -5.499999999999999),
(-5.5, -1.0, -5.499999999999999),
(-5.5, 2.0, -5.499999999999999),
(-5.5, -2.0, -5.499999999999999),
(-5.5, 5.0, -5.499999999999999),
(-5.5, -5.0, -5.499999999999999),
(-5.5, 5.5, -5.499999999999999),
(-5.5, -5.5, -5.5),
(-5.5, 0.3, -5.499999999999999),
(-5.5, -0.3, -5.499999999999999),
(-5.5, 7.0, -5.499999999999999),
(-5.5, 1e+300, -5.499999999999999),
(-5.5, -1e+300, -5.500000000000001),
(-5.5, 5e-324, -5.499999999999999),
(-5.5, -5e-324, -5.499999999999999),
(-5.5, 1e-10, -5.499999999999999),
(-5.5, 3.0, -5.499999999999999),
(-5.5, -3.0, -5.499999999999999),
(0.3, f64::NAN, f64::NAN),
(0.3, f64::INFINITY, 0.30000000000000004),
(0.3, f64::NEG_INFINITY, 0.29999999999999993),
(0.3, 0.0, 0.29999999999999993),
(0.3, -0.0, 0.29999999999999993),
(0.3, 1.0, 0.30000000000000004),
(0.3, -1.0, 0.29999999999999993),
(0.3, 2.0, 0.30000000000000004),
(0.3, -2.0, 0.29999999999999993),
(0.3, 5.0, 0.30000000000000004),
(0.3, -5.0, 0.29999999999999993),
(0.3, 5.5, 0.30000000000000004),
(0.3, -5.5, 0.29999999999999993),
(0.3, 0.3, 0.3),
(0.3, -0.3, 0.29999999999999993),
(0.3, 7.0, 0.30000000000000004),
(0.3, 1e+300, 0.30000000000000004),
(0.3, -1e+300, 0.29999999999999993),
(0.3, 5e-324, 0.29999999999999993),
(0.3, -5e-324, 0.29999999999999993),
(0.3, 1e-10, 0.29999999999999993),
(0.3, 3.0, 0.30000000000000004),
(0.3, -3.0, 0.29999999999999993),
(-0.3, f64::NAN, f64::NAN),
(-0.3, f64::INFINITY, -0.29999999999999993),
(-0.3, f64::NEG_INFINITY, -0.30000000000000004),
(-0.3, 0.0, -0.29999999999999993),
(-0.3, -0.0, -0.29999999999999993),
(-0.3, 1.0, -0.29999999999999993),
(-0.3, -1.0, -0.30000000000000004),
(-0.3, 2.0, -0.29999999999999993),
(-0.3, -2.0, -0.30000000000000004),
(-0.3, 5.0, -0.29999999999999993),
(-0.3, -5.0, -0.30000000000000004),
(-0.3, 5.5, -0.29999999999999993),
(-0.3, -5.5, -0.30000000000000004),
(-0.3, 0.3, -0.29999999999999993),
(-0.3, -0.3, -0.3),
(-0.3, 7.0, -0.29999999999999993),
(-0.3, 1e+300, -0.29999999999999993),
(-0.3, -1e+300, -0.30000000000000004),
(-0.3, 5e-324, -0.29999999999999993),
(-0.3, -5e-324, -0.29999999999999993),
(-0.3, 1e-10, -0.29999999999999993),
(-0.3, 3.0, -0.29999999999999993),
(-0.3, -3.0, -0.30000000000000004),
(7.0, f64::NAN, f64::NAN),
(7.0, f64::INFINITY, 7.000000000000001),
(7.0, f64::NEG_INFINITY, 6.999999999999999),
(7.0, 0.0, 6.999999999999999),
(7.0, -0.0, 6.999999999999999),
(7.0, 1.0, 6.999999999999999),
(7.0, -1.0, 6.999999999999999),
(7.0, 2.0, 6.999999999999999),
(7.0, -2.0, 6.999999999999999),
(7.0, 5.0, 6.999999999999999),
(7.0, -5.0, 6.999999999999999),
(7.0, 5.5, 6.999999999999999),
(7.0, -5.5, 6.999999999999999),
(7.0, 0.3, 6.999999999999999),
(7.0, -0.3, 6.999999999999999),
(7.0, 7.0, 7.0),
(7.0, 1e+300, 7.000000000000001),
(7.0, -1e+300, 6.999999999999999),
(7.0, 5e-324, 6.999999999999999),
(7.0, -5e-324, 6.999999999999999),
(7.0, 1e-10, 6.999999999999999),
(7.0, 3.0, 6.999999999999999),
(7.0, -3.0, 6.999999999999999),
(1e+300, f64::NAN, f64::NAN),
(1e+300, f64::INFINITY, 1.0000000000000002e+300),
(1e+300, f64::NEG_INFINITY, 9.999999999999999e+299),
(1e+300, 0.0, 9.999999999999999e+299),
(1e+300, -0.0, 9.999999999999999e+299),
(1e+300, 1.0, 9.999999999999999e+299),
(1e+300, -1.0, 9.999999999999999e+299),
(1e+300, 2.0, 9.999999999999999e+299),
(1e+300, -2.0, 9.999999999999999e+299),
(1e+300, 5.0, 9.999999999999999e+299),
(1e+300, -5.0, 9.999999999999999e+299),
(1e+300, 5.5, 9.999999999999999e+299),
(1e+300, -5.5, 9.999999999999999e+299),
(1e+300, 0.3, 9.999999999999999e+299),
(1e+300, -0.3, 9.999999999999999e+299),
(1e+300, 7.0, 9.999999999999999e+299),
(1e+300, 1e+300, 1e+300),
(1e+300, -1e+300, 9.999999999999999e+299),
(1e+300, 5e-324, 9.999999999999999e+299),
(1e+300, -5e-324, 9.999999999999999e+299),
(1e+300, 1e-10, 9.999999999999999e+299),
(1e+300, 3.0, 9.999999999999999e+299),
(1e+300, -3.0, 9.999999999999999e+299),
(-1e+300, f64::NAN, f64::NAN),
(-1e+300, f64::INFINITY, -9.999999999999999e+299),
(-1e+300, f64::NEG_INFINITY, -1.0000000000000002e+300),
(-1e+300, 0.0, -9.999999999999999e+299),
(-1e+300, -0.0, -9.999999999999999e+299),
(-1e+300, 1.0, -9.999999999999999e+299),
(-1e+300, -1.0, -9.999999999999999e+299),
(-1e+300, 2.0, -9.999999999999999e+299),
(-1e+300, -2.0, -9.999999999999999e+299),
(-1e+300, 5.0, -9.999999999999999e+299),
(-1e+300, -5.0, -9.999999999999999e+299),
(-1e+300, 5.5, -9.999999999999999e+299),
(-1e+300, -5.5, -9.999999999999999e+299),
(-1e+300, 0.3, -9.999999999999999e+299),
(-1e+300, -0.3, -9.999999999999999e+299),
(-1e+300, 7.0, -9.999999999999999e+299),
(-1e+300, 1e+300, -9.999999999999999e+299),
(-1e+300, -1e+300, -1e+300),
(-1e+300, 5e-324, -9.999999999999999e+299),
(-1e+300, -5e-324, -9.999999999999999e+299),
(-1e+300, 1e-10, -9.999999999999999e+299),
(-1e+300, 3.0, -9.999999999999999e+299),
(-1e+300, -3.0, -9.999999999999999e+299),
(5e-324, f64::NAN, f64::NAN),
(5e-324, f64::INFINITY, 1e-323),
(5e-324, f64::NEG_INFINITY, 0.0),
(5e-324, 0.0, 0.0),
(5e-324, -0.0, 0.0),
(5e-324, 1.0, 1e-323),
(5e-324, -1.0, 0.0),
(5e-324, 2.0, 1e-323),
(5e-324, -2.0, 0.0),
(5e-324, 5.0, 1e-323),
(5e-324, -5.0, 0.0),
(5e-324, 5.5, 1e-323),
(5e-324, -5.5, 0.0),
(5e-324, 0.3, 1e-323),
(5e-324, -0.3, 0.0),
(5e-324, 7.0, 1e-323),
(5e-324, 1e+300, 1e-323),
(5e-324, -1e+300, 0.0),
(5e-324, 5e-324, 5e-324),
(5e-324, -5e-324, 0.0),
(5e-324, 1e-10, 1e-323),
(5e-324, 3.0, 1e-323),
(5e-324, -3.0, 0.0),
(-5e-324, f64::NAN, f64::NAN),
(-5e-324, f64::INFINITY, -0.0),
(-5e-324, f64::NEG_INFINITY, -1e-323),
(-5e-324, 0.0, -0.0),
(-5e-324, -0.0, -0.0),
(-5e-324, 1.0, -0.0),
(-5e-324, -1.0, -1e-323),
(-5e-324, 2.0, -0.0),
(-5e-324, -2.0, -1e-323),
(-5e-324, 5.0, -0.0),
(-5e-324, -5.0, -1e-323),
(-5e-324, 5.5, -0.0),
(-5e-324, -5.5, -1e-323),
(-5e-324, 0.3, -0.0),
(-5e-324, -0.3, -1e-323),
(-5e-324, 7.0, -0.0),
(-5e-324, 1e+300, -0.0),
(-5e-324, -1e+300, -1e-323),
(-5e-324, 5e-324, -0.0),
(-5e-324, -5e-324, -5e-324),
(-5e-324, 1e-10, -0.0),
(-5e-324, 3.0, -0.0),
(-5e-324, -3.0, -1e-323),
(1e-10, f64::NAN, f64::NAN),
(1e-10, f64::INFINITY, 1.0000000000000002e-10),
(1e-10, f64::NEG_INFINITY, 9.999999999999999e-11),
(1e-10, 0.0, 9.999999999999999e-11),
(1e-10, -0.0, 9.999999999999999e-11),
(1e-10, 1.0, 1.0000000000000002e-10),
(1e-10, -1.0, 9.999999999999999e-11),
(1e-10, 2.0, 1.0000000000000002e-10),
(1e-10, -2.0, 9.999999999999999e-11),
(1e-10, 5.0, 1.0000000000000002e-10),
(1e-10, -5.0, 9.999999999999999e-11),
(1e-10, 5.5, 1.0000000000000002e-10),
(1e-10, -5.5, 9.999999999999999e-11),
(1e-10, 0.3, 1.0000000000000002e-10),
(1e-10, -0.3, 9.999999999999999e-11),
(1e-10, 7.0, 1.0000000000000002e-10),
(1e-10, 1e+300, 1.0000000000000002e-10),
(1e-10, -1e+300, 9.999999999999999e-11),
(1e-10, 5e-324, 9.999999999999999e-11),
(1e-10, -5e-324, 9.999999999999999e-11),
(1e-10, 1e-10, 1e-10),
(1e-10, 3.0, 1.0000000000000002e-10),
(1e-10, -3.0, 9.999999999999999e-11),
(3.0, f64::NAN, f64::NAN),
(3.0, f64::INFINITY, 3.0000000000000004),
(3.0, f64::NEG_INFINITY, 2.9999999999999996),
(3.0, 0.0, 2.9999999999999996),
(3.0, -0.0, 2.9999999999999996),
(3.0, 1.0, 2.9999999999999996),
(3.0, -1.0, 2.9999999999999996),
(3.0, 2.0, 2.9999999999999996),
(3.0, -2.0, 2.9999999999999996),
(3.0, 5.0, 3.0000000000000004),
(3.0, -5.0, 2.9999999999999996),
(3.0, 5.5, 3.0000000000000004),
(3.0, -5.5, 2.9999999999999996),
(3.0, 0.3, 2.9999999999999996),
(3.0, -0.3, 2.9999999999999996),
(3.0, 7.0, 3.0000000000000004),
(3.0, 1e+300, 3.0000000000000004),
(3.0, -1e+300, 2.9999999999999996),
(3.0, 5e-324, 2.9999999999999996),
(3.0, -5e-324, 2.9999999999999996),
(3.0, 1e-10, 2.9999999999999996),
(3.0, 3.0, 3.0),
(3.0, -3.0, 2.9999999999999996),
(-3.0, f64::NAN, f64::NAN),
(-3.0, f64::INFINITY, -2.9999999999999996),
(-3.0, f64::NEG_INFINITY, -3.0000000000000004),
(-3.0, 0.0, -2.9999999999999996),
(-3.0, -0.0, -2.9999999999999996),
(-3.0, 1.0, -2.9999999999999996),
(-3.0, -1.0, -2.9999999999999996),
(-3.0, 2.0, -2.9999999999999996),
(-3.0, -2.0, -2.9999999999999996),
(-3.0, 5.0, -2.9999999999999996),
(-3.0, -5.0, -3.0000000000000004),
(-3.0, 5.5, -2.9999999999999996),
(-3.0, -5.5, -3.0000000000000004),
(-3.0, 0.3, -2.9999999999999996),
(-3.0, -0.3, -2.9999999999999996),
(-3.0, 7.0, -2.9999999999999996),
(-3.0, 1e+300, -2.9999999999999996),
(-3.0, -1e+300, -3.0000000000000004),
(-3.0, 5e-324, -2.9999999999999996),
(-3.0, -5e-324, -2.9999999999999996),
(-3.0, 1e-10, -2.9999999999999996),
(-3.0, 3.0, -2.9999999999999996),
(-3.0, -3.0, -3.0),
];
for &(x, y, want) in CASES {
check(
"nextafter",
&format!("{x:?}, {y:?}"),
nextafter(x, y),
want,
0.0,
0.0,
);
}
}
#[test]
fn heaviside_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN),
(f64::NAN, 0.0, f64::NAN),
(f64::NAN, -0.0, f64::NAN),
(f64::NAN, 1.0, f64::NAN),
(f64::NAN, -1.0, f64::NAN),
(f64::NAN, 2.0, f64::NAN),
(f64::NAN, -2.0, f64::NAN),
(f64::NAN, 5.0, f64::NAN),
(f64::NAN, -5.0, f64::NAN),
(f64::NAN, 5.5, f64::NAN),
(f64::NAN, -5.5, f64::NAN),
(f64::NAN, 0.3, f64::NAN),
(f64::NAN, -0.3, f64::NAN),
(f64::NAN, 7.0, f64::NAN),
(f64::NAN, 1e+300, f64::NAN),
(f64::NAN, -1e+300, f64::NAN),
(f64::NAN, 5e-324, f64::NAN),
(f64::NAN, -5e-324, f64::NAN),
(f64::NAN, 1e-10, f64::NAN),
(f64::NAN, 3.0, f64::NAN),
(f64::NAN, -3.0, f64::NAN),
(f64::INFINITY, f64::NAN, 1.0),
(f64::INFINITY, f64::INFINITY, 1.0),
(f64::INFINITY, f64::NEG_INFINITY, 1.0),
(f64::INFINITY, 0.0, 1.0),
(f64::INFINITY, -0.0, 1.0),
(f64::INFINITY, 1.0, 1.0),
(f64::INFINITY, -1.0, 1.0),
(f64::INFINITY, 2.0, 1.0),
(f64::INFINITY, -2.0, 1.0),
(f64::INFINITY, 5.0, 1.0),
(f64::INFINITY, -5.0, 1.0),
(f64::INFINITY, 5.5, 1.0),
(f64::INFINITY, -5.5, 1.0),
(f64::INFINITY, 0.3, 1.0),
(f64::INFINITY, -0.3, 1.0),
(f64::INFINITY, 7.0, 1.0),
(f64::INFINITY, 1e+300, 1.0),
(f64::INFINITY, -1e+300, 1.0),
(f64::INFINITY, 5e-324, 1.0),
(f64::INFINITY, -5e-324, 1.0),
(f64::INFINITY, 1e-10, 1.0),
(f64::INFINITY, 3.0, 1.0),
(f64::INFINITY, -3.0, 1.0),
(f64::NEG_INFINITY, f64::NAN, 0.0),
(f64::NEG_INFINITY, f64::INFINITY, 0.0),
(f64::NEG_INFINITY, f64::NEG_INFINITY, 0.0),
(f64::NEG_INFINITY, 0.0, 0.0),
(f64::NEG_INFINITY, -0.0, 0.0),
(f64::NEG_INFINITY, 1.0, 0.0),
(f64::NEG_INFINITY, -1.0, 0.0),
(f64::NEG_INFINITY, 2.0, 0.0),
(f64::NEG_INFINITY, -2.0, 0.0),
(f64::NEG_INFINITY, 5.0, 0.0),
(f64::NEG_INFINITY, -5.0, 0.0),
(f64::NEG_INFINITY, 5.5, 0.0),
(f64::NEG_INFINITY, -5.5, 0.0),
(f64::NEG_INFINITY, 0.3, 0.0),
(f64::NEG_INFINITY, -0.3, 0.0),
(f64::NEG_INFINITY, 7.0, 0.0),
(f64::NEG_INFINITY, 1e+300, 0.0),
(f64::NEG_INFINITY, -1e+300, 0.0),
(f64::NEG_INFINITY, 5e-324, 0.0),
(f64::NEG_INFINITY, -5e-324, 0.0),
(f64::NEG_INFINITY, 1e-10, 0.0),
(f64::NEG_INFINITY, 3.0, 0.0),
(f64::NEG_INFINITY, -3.0, 0.0),
(0.0, f64::NAN, f64::NAN),
(0.0, f64::INFINITY, f64::INFINITY),
(0.0, f64::NEG_INFINITY, f64::NEG_INFINITY),
(0.0, 0.0, 0.0),
(0.0, -0.0, -0.0),
(0.0, 1.0, 1.0),
(0.0, -1.0, -1.0),
(0.0, 2.0, 2.0),
(0.0, -2.0, -2.0),
(0.0, 5.0, 5.0),
(0.0, -5.0, -5.0),
(0.0, 5.5, 5.5),
(0.0, -5.5, -5.5),
(0.0, 0.3, 0.3),
(0.0, -0.3, -0.3),
(0.0, 7.0, 7.0),
(0.0, 1e+300, 1e+300),
(0.0, -1e+300, -1e+300),
(0.0, 5e-324, 5e-324),
(0.0, -5e-324, -5e-324),
(0.0, 1e-10, 1e-10),
(0.0, 3.0, 3.0),
(0.0, -3.0, -3.0),
(-0.0, f64::NAN, f64::NAN),
(-0.0, f64::INFINITY, f64::INFINITY),
(-0.0, f64::NEG_INFINITY, f64::NEG_INFINITY),
(-0.0, 0.0, 0.0),
(-0.0, -0.0, -0.0),
(-0.0, 1.0, 1.0),
(-0.0, -1.0, -1.0),
(-0.0, 2.0, 2.0),
(-0.0, -2.0, -2.0),
(-0.0, 5.0, 5.0),
(-0.0, -5.0, -5.0),
(-0.0, 5.5, 5.5),
(-0.0, -5.5, -5.5),
(-0.0, 0.3, 0.3),
(-0.0, -0.3, -0.3),
(-0.0, 7.0, 7.0),
(-0.0, 1e+300, 1e+300),
(-0.0, -1e+300, -1e+300),
(-0.0, 5e-324, 5e-324),
(-0.0, -5e-324, -5e-324),
(-0.0, 1e-10, 1e-10),
(-0.0, 3.0, 3.0),
(-0.0, -3.0, -3.0),
(1.0, f64::NAN, 1.0),
(1.0, f64::INFINITY, 1.0),
(1.0, f64::NEG_INFINITY, 1.0),
(1.0, 0.0, 1.0),
(1.0, -0.0, 1.0),
(1.0, 1.0, 1.0),
(1.0, -1.0, 1.0),
(1.0, 2.0, 1.0),
(1.0, -2.0, 1.0),
(1.0, 5.0, 1.0),
(1.0, -5.0, 1.0),
(1.0, 5.5, 1.0),
(1.0, -5.5, 1.0),
(1.0, 0.3, 1.0),
(1.0, -0.3, 1.0),
(1.0, 7.0, 1.0),
(1.0, 1e+300, 1.0),
(1.0, -1e+300, 1.0),
(1.0, 5e-324, 1.0),
(1.0, -5e-324, 1.0),
(1.0, 1e-10, 1.0),
(1.0, 3.0, 1.0),
(1.0, -3.0, 1.0),
(-1.0, f64::NAN, 0.0),
(-1.0, f64::INFINITY, 0.0),
(-1.0, f64::NEG_INFINITY, 0.0),
(-1.0, 0.0, 0.0),
(-1.0, -0.0, 0.0),
(-1.0, 1.0, 0.0),
(-1.0, -1.0, 0.0),
(-1.0, 2.0, 0.0),
(-1.0, -2.0, 0.0),
(-1.0, 5.0, 0.0),
(-1.0, -5.0, 0.0),
(-1.0, 5.5, 0.0),
(-1.0, -5.5, 0.0),
(-1.0, 0.3, 0.0),
(-1.0, -0.3, 0.0),
(-1.0, 7.0, 0.0),
(-1.0, 1e+300, 0.0),
(-1.0, -1e+300, 0.0),
(-1.0, 5e-324, 0.0),
(-1.0, -5e-324, 0.0),
(-1.0, 1e-10, 0.0),
(-1.0, 3.0, 0.0),
(-1.0, -3.0, 0.0),
(2.0, f64::NAN, 1.0),
(2.0, f64::INFINITY, 1.0),
(2.0, f64::NEG_INFINITY, 1.0),
(2.0, 0.0, 1.0),
(2.0, -0.0, 1.0),
(2.0, 1.0, 1.0),
(2.0, -1.0, 1.0),
(2.0, 2.0, 1.0),
(2.0, -2.0, 1.0),
(2.0, 5.0, 1.0),
(2.0, -5.0, 1.0),
(2.0, 5.5, 1.0),
(2.0, -5.5, 1.0),
(2.0, 0.3, 1.0),
(2.0, -0.3, 1.0),
(2.0, 7.0, 1.0),
(2.0, 1e+300, 1.0),
(2.0, -1e+300, 1.0),
(2.0, 5e-324, 1.0),
(2.0, -5e-324, 1.0),
(2.0, 1e-10, 1.0),
(2.0, 3.0, 1.0),
(2.0, -3.0, 1.0),
(-2.0, f64::NAN, 0.0),
(-2.0, f64::INFINITY, 0.0),
(-2.0, f64::NEG_INFINITY, 0.0),
(-2.0, 0.0, 0.0),
(-2.0, -0.0, 0.0),
(-2.0, 1.0, 0.0),
(-2.0, -1.0, 0.0),
(-2.0, 2.0, 0.0),
(-2.0, -2.0, 0.0),
(-2.0, 5.0, 0.0),
(-2.0, -5.0, 0.0),
(-2.0, 5.5, 0.0),
(-2.0, -5.5, 0.0),
(-2.0, 0.3, 0.0),
(-2.0, -0.3, 0.0),
(-2.0, 7.0, 0.0),
(-2.0, 1e+300, 0.0),
(-2.0, -1e+300, 0.0),
(-2.0, 5e-324, 0.0),
(-2.0, -5e-324, 0.0),
(-2.0, 1e-10, 0.0),
(-2.0, 3.0, 0.0),
(-2.0, -3.0, 0.0),
(5.0, f64::NAN, 1.0),
(5.0, f64::INFINITY, 1.0),
(5.0, f64::NEG_INFINITY, 1.0),
(5.0, 0.0, 1.0),
(5.0, -0.0, 1.0),
(5.0, 1.0, 1.0),
(5.0, -1.0, 1.0),
(5.0, 2.0, 1.0),
(5.0, -2.0, 1.0),
(5.0, 5.0, 1.0),
(5.0, -5.0, 1.0),
(5.0, 5.5, 1.0),
(5.0, -5.5, 1.0),
(5.0, 0.3, 1.0),
(5.0, -0.3, 1.0),
(5.0, 7.0, 1.0),
(5.0, 1e+300, 1.0),
(5.0, -1e+300, 1.0),
(5.0, 5e-324, 1.0),
(5.0, -5e-324, 1.0),
(5.0, 1e-10, 1.0),
(5.0, 3.0, 1.0),
(5.0, -3.0, 1.0),
(-5.0, f64::NAN, 0.0),
(-5.0, f64::INFINITY, 0.0),
(-5.0, f64::NEG_INFINITY, 0.0),
(-5.0, 0.0, 0.0),
(-5.0, -0.0, 0.0),
(-5.0, 1.0, 0.0),
(-5.0, -1.0, 0.0),
(-5.0, 2.0, 0.0),
(-5.0, -2.0, 0.0),
(-5.0, 5.0, 0.0),
(-5.0, -5.0, 0.0),
(-5.0, 5.5, 0.0),
(-5.0, -5.5, 0.0),
(-5.0, 0.3, 0.0),
(-5.0, -0.3, 0.0),
(-5.0, 7.0, 0.0),
(-5.0, 1e+300, 0.0),
(-5.0, -1e+300, 0.0),
(-5.0, 5e-324, 0.0),
(-5.0, -5e-324, 0.0),
(-5.0, 1e-10, 0.0),
(-5.0, 3.0, 0.0),
(-5.0, -3.0, 0.0),
(5.5, f64::NAN, 1.0),
(5.5, f64::INFINITY, 1.0),
(5.5, f64::NEG_INFINITY, 1.0),
(5.5, 0.0, 1.0),
(5.5, -0.0, 1.0),
(5.5, 1.0, 1.0),
(5.5, -1.0, 1.0),
(5.5, 2.0, 1.0),
(5.5, -2.0, 1.0),
(5.5, 5.0, 1.0),
(5.5, -5.0, 1.0),
(5.5, 5.5, 1.0),
(5.5, -5.5, 1.0),
(5.5, 0.3, 1.0),
(5.5, -0.3, 1.0),
(5.5, 7.0, 1.0),
(5.5, 1e+300, 1.0),
(5.5, -1e+300, 1.0),
(5.5, 5e-324, 1.0),
(5.5, -5e-324, 1.0),
(5.5, 1e-10, 1.0),
(5.5, 3.0, 1.0),
(5.5, -3.0, 1.0),
(-5.5, f64::NAN, 0.0),
(-5.5, f64::INFINITY, 0.0),
(-5.5, f64::NEG_INFINITY, 0.0),
(-5.5, 0.0, 0.0),
(-5.5, -0.0, 0.0),
(-5.5, 1.0, 0.0),
(-5.5, -1.0, 0.0),
(-5.5, 2.0, 0.0),
(-5.5, -2.0, 0.0),
(-5.5, 5.0, 0.0),
(-5.5, -5.0, 0.0),
(-5.5, 5.5, 0.0),
(-5.5, -5.5, 0.0),
(-5.5, 0.3, 0.0),
(-5.5, -0.3, 0.0),
(-5.5, 7.0, 0.0),
(-5.5, 1e+300, 0.0),
(-5.5, -1e+300, 0.0),
(-5.5, 5e-324, 0.0),
(-5.5, -5e-324, 0.0),
(-5.5, 1e-10, 0.0),
(-5.5, 3.0, 0.0),
(-5.5, -3.0, 0.0),
(0.3, f64::NAN, 1.0),
(0.3, f64::INFINITY, 1.0),
(0.3, f64::NEG_INFINITY, 1.0),
(0.3, 0.0, 1.0),
(0.3, -0.0, 1.0),
(0.3, 1.0, 1.0),
(0.3, -1.0, 1.0),
(0.3, 2.0, 1.0),
(0.3, -2.0, 1.0),
(0.3, 5.0, 1.0),
(0.3, -5.0, 1.0),
(0.3, 5.5, 1.0),
(0.3, -5.5, 1.0),
(0.3, 0.3, 1.0),
(0.3, -0.3, 1.0),
(0.3, 7.0, 1.0),
(0.3, 1e+300, 1.0),
(0.3, -1e+300, 1.0),
(0.3, 5e-324, 1.0),
(0.3, -5e-324, 1.0),
(0.3, 1e-10, 1.0),
(0.3, 3.0, 1.0),
(0.3, -3.0, 1.0),
(-0.3, f64::NAN, 0.0),
(-0.3, f64::INFINITY, 0.0),
(-0.3, f64::NEG_INFINITY, 0.0),
(-0.3, 0.0, 0.0),
(-0.3, -0.0, 0.0),
(-0.3, 1.0, 0.0),
(-0.3, -1.0, 0.0),
(-0.3, 2.0, 0.0),
(-0.3, -2.0, 0.0),
(-0.3, 5.0, 0.0),
(-0.3, -5.0, 0.0),
(-0.3, 5.5, 0.0),
(-0.3, -5.5, 0.0),
(-0.3, 0.3, 0.0),
(-0.3, -0.3, 0.0),
(-0.3, 7.0, 0.0),
(-0.3, 1e+300, 0.0),
(-0.3, -1e+300, 0.0),
(-0.3, 5e-324, 0.0),
(-0.3, -5e-324, 0.0),
(-0.3, 1e-10, 0.0),
(-0.3, 3.0, 0.0),
(-0.3, -3.0, 0.0),
(7.0, f64::NAN, 1.0),
(7.0, f64::INFINITY, 1.0),
(7.0, f64::NEG_INFINITY, 1.0),
(7.0, 0.0, 1.0),
(7.0, -0.0, 1.0),
(7.0, 1.0, 1.0),
(7.0, -1.0, 1.0),
(7.0, 2.0, 1.0),
(7.0, -2.0, 1.0),
(7.0, 5.0, 1.0),
(7.0, -5.0, 1.0),
(7.0, 5.5, 1.0),
(7.0, -5.5, 1.0),
(7.0, 0.3, 1.0),
(7.0, -0.3, 1.0),
(7.0, 7.0, 1.0),
(7.0, 1e+300, 1.0),
(7.0, -1e+300, 1.0),
(7.0, 5e-324, 1.0),
(7.0, -5e-324, 1.0),
(7.0, 1e-10, 1.0),
(7.0, 3.0, 1.0),
(7.0, -3.0, 1.0),
(1e+300, f64::NAN, 1.0),
(1e+300, f64::INFINITY, 1.0),
(1e+300, f64::NEG_INFINITY, 1.0),
(1e+300, 0.0, 1.0),
(1e+300, -0.0, 1.0),
(1e+300, 1.0, 1.0),
(1e+300, -1.0, 1.0),
(1e+300, 2.0, 1.0),
(1e+300, -2.0, 1.0),
(1e+300, 5.0, 1.0),
(1e+300, -5.0, 1.0),
(1e+300, 5.5, 1.0),
(1e+300, -5.5, 1.0),
(1e+300, 0.3, 1.0),
(1e+300, -0.3, 1.0),
(1e+300, 7.0, 1.0),
(1e+300, 1e+300, 1.0),
(1e+300, -1e+300, 1.0),
(1e+300, 5e-324, 1.0),
(1e+300, -5e-324, 1.0),
(1e+300, 1e-10, 1.0),
(1e+300, 3.0, 1.0),
(1e+300, -3.0, 1.0),
(-1e+300, f64::NAN, 0.0),
(-1e+300, f64::INFINITY, 0.0),
(-1e+300, f64::NEG_INFINITY, 0.0),
(-1e+300, 0.0, 0.0),
(-1e+300, -0.0, 0.0),
(-1e+300, 1.0, 0.0),
(-1e+300, -1.0, 0.0),
(-1e+300, 2.0, 0.0),
(-1e+300, -2.0, 0.0),
(-1e+300, 5.0, 0.0),
(-1e+300, -5.0, 0.0),
(-1e+300, 5.5, 0.0),
(-1e+300, -5.5, 0.0),
(-1e+300, 0.3, 0.0),
(-1e+300, -0.3, 0.0),
(-1e+300, 7.0, 0.0),
(-1e+300, 1e+300, 0.0),
(-1e+300, -1e+300, 0.0),
(-1e+300, 5e-324, 0.0),
(-1e+300, -5e-324, 0.0),
(-1e+300, 1e-10, 0.0),
(-1e+300, 3.0, 0.0),
(-1e+300, -3.0, 0.0),
(5e-324, f64::NAN, 1.0),
(5e-324, f64::INFINITY, 1.0),
(5e-324, f64::NEG_INFINITY, 1.0),
(5e-324, 0.0, 1.0),
(5e-324, -0.0, 1.0),
(5e-324, 1.0, 1.0),
(5e-324, -1.0, 1.0),
(5e-324, 2.0, 1.0),
(5e-324, -2.0, 1.0),
(5e-324, 5.0, 1.0),
(5e-324, -5.0, 1.0),
(5e-324, 5.5, 1.0),
(5e-324, -5.5, 1.0),
(5e-324, 0.3, 1.0),
(5e-324, -0.3, 1.0),
(5e-324, 7.0, 1.0),
(5e-324, 1e+300, 1.0),
(5e-324, -1e+300, 1.0),
(5e-324, 5e-324, 1.0),
(5e-324, -5e-324, 1.0),
(5e-324, 1e-10, 1.0),
(5e-324, 3.0, 1.0),
(5e-324, -3.0, 1.0),
(-5e-324, f64::NAN, 0.0),
(-5e-324, f64::INFINITY, 0.0),
(-5e-324, f64::NEG_INFINITY, 0.0),
(-5e-324, 0.0, 0.0),
(-5e-324, -0.0, 0.0),
(-5e-324, 1.0, 0.0),
(-5e-324, -1.0, 0.0),
(-5e-324, 2.0, 0.0),
(-5e-324, -2.0, 0.0),
(-5e-324, 5.0, 0.0),
(-5e-324, -5.0, 0.0),
(-5e-324, 5.5, 0.0),
(-5e-324, -5.5, 0.0),
(-5e-324, 0.3, 0.0),
(-5e-324, -0.3, 0.0),
(-5e-324, 7.0, 0.0),
(-5e-324, 1e+300, 0.0),
(-5e-324, -1e+300, 0.0),
(-5e-324, 5e-324, 0.0),
(-5e-324, -5e-324, 0.0),
(-5e-324, 1e-10, 0.0),
(-5e-324, 3.0, 0.0),
(-5e-324, -3.0, 0.0),
(1e-10, f64::NAN, 1.0),
(1e-10, f64::INFINITY, 1.0),
(1e-10, f64::NEG_INFINITY, 1.0),
(1e-10, 0.0, 1.0),
(1e-10, -0.0, 1.0),
(1e-10, 1.0, 1.0),
(1e-10, -1.0, 1.0),
(1e-10, 2.0, 1.0),
(1e-10, -2.0, 1.0),
(1e-10, 5.0, 1.0),
(1e-10, -5.0, 1.0),
(1e-10, 5.5, 1.0),
(1e-10, -5.5, 1.0),
(1e-10, 0.3, 1.0),
(1e-10, -0.3, 1.0),
(1e-10, 7.0, 1.0),
(1e-10, 1e+300, 1.0),
(1e-10, -1e+300, 1.0),
(1e-10, 5e-324, 1.0),
(1e-10, -5e-324, 1.0),
(1e-10, 1e-10, 1.0),
(1e-10, 3.0, 1.0),
(1e-10, -3.0, 1.0),
(3.0, f64::NAN, 1.0),
(3.0, f64::INFINITY, 1.0),
(3.0, f64::NEG_INFINITY, 1.0),
(3.0, 0.0, 1.0),
(3.0, -0.0, 1.0),
(3.0, 1.0, 1.0),
(3.0, -1.0, 1.0),
(3.0, 2.0, 1.0),
(3.0, -2.0, 1.0),
(3.0, 5.0, 1.0),
(3.0, -5.0, 1.0),
(3.0, 5.5, 1.0),
(3.0, -5.5, 1.0),
(3.0, 0.3, 1.0),
(3.0, -0.3, 1.0),
(3.0, 7.0, 1.0),
(3.0, 1e+300, 1.0),
(3.0, -1e+300, 1.0),
(3.0, 5e-324, 1.0),
(3.0, -5e-324, 1.0),
(3.0, 1e-10, 1.0),
(3.0, 3.0, 1.0),
(3.0, -3.0, 1.0),
(-3.0, f64::NAN, 0.0),
(-3.0, f64::INFINITY, 0.0),
(-3.0, f64::NEG_INFINITY, 0.0),
(-3.0, 0.0, 0.0),
(-3.0, -0.0, 0.0),
(-3.0, 1.0, 0.0),
(-3.0, -1.0, 0.0),
(-3.0, 2.0, 0.0),
(-3.0, -2.0, 0.0),
(-3.0, 5.0, 0.0),
(-3.0, -5.0, 0.0),
(-3.0, 5.5, 0.0),
(-3.0, -5.5, 0.0),
(-3.0, 0.3, 0.0),
(-3.0, -0.3, 0.0),
(-3.0, 7.0, 0.0),
(-3.0, 1e+300, 0.0),
(-3.0, -1e+300, 0.0),
(-3.0, 5e-324, 0.0),
(-3.0, -5e-324, 0.0),
(-3.0, 1e-10, 0.0),
(-3.0, 3.0, 0.0),
(-3.0, -3.0, 0.0),
];
for &(x, y, want) in CASES {
check(
"heaviside",
&format!("{x:?}, {y:?}"),
heaviside(x, y),
want,
0.0,
0.0,
);
}
}
#[test]
fn logaddexp_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN),
(f64::NAN, 0.0, f64::NAN),
(f64::NAN, -0.0, f64::NAN),
(f64::NAN, 1.0, f64::NAN),
(f64::NAN, -1.0, f64::NAN),
(f64::NAN, 2.0, f64::NAN),
(f64::NAN, -2.0, f64::NAN),
(f64::NAN, 5.0, f64::NAN),
(f64::NAN, -5.0, f64::NAN),
(f64::NAN, 5.5, f64::NAN),
(f64::NAN, -5.5, f64::NAN),
(f64::NAN, 0.3, f64::NAN),
(f64::NAN, -0.3, f64::NAN),
(f64::NAN, 7.0, f64::NAN),
(f64::NAN, 1e+300, f64::NAN),
(f64::NAN, -1e+300, f64::NAN),
(f64::NAN, 5e-324, f64::NAN),
(f64::NAN, -5e-324, f64::NAN),
(f64::NAN, 1e-10, f64::NAN),
(f64::NAN, 3.0, f64::NAN),
(f64::NAN, -3.0, f64::NAN),
(f64::INFINITY, f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY, f64::INFINITY),
(f64::INFINITY, f64::NEG_INFINITY, f64::INFINITY),
(f64::INFINITY, 0.0, f64::INFINITY),
(f64::INFINITY, -0.0, f64::INFINITY),
(f64::INFINITY, 1.0, f64::INFINITY),
(f64::INFINITY, -1.0, f64::INFINITY),
(f64::INFINITY, 2.0, f64::INFINITY),
(f64::INFINITY, -2.0, f64::INFINITY),
(f64::INFINITY, 5.0, f64::INFINITY),
(f64::INFINITY, -5.0, f64::INFINITY),
(f64::INFINITY, 5.5, f64::INFINITY),
(f64::INFINITY, -5.5, f64::INFINITY),
(f64::INFINITY, 0.3, f64::INFINITY),
(f64::INFINITY, -0.3, f64::INFINITY),
(f64::INFINITY, 7.0, f64::INFINITY),
(f64::INFINITY, 1e+300, f64::INFINITY),
(f64::INFINITY, -1e+300, f64::INFINITY),
(f64::INFINITY, 5e-324, f64::INFINITY),
(f64::INFINITY, -5e-324, f64::INFINITY),
(f64::INFINITY, 1e-10, f64::INFINITY),
(f64::INFINITY, 3.0, f64::INFINITY),
(f64::INFINITY, -3.0, f64::INFINITY),
(f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::INFINITY, f64::INFINITY),
(f64::NEG_INFINITY, f64::NEG_INFINITY, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 0.0, 0.0),
(f64::NEG_INFINITY, -0.0, 0.0),
(f64::NEG_INFINITY, 1.0, 1.0),
(f64::NEG_INFINITY, -1.0, -1.0),
(f64::NEG_INFINITY, 2.0, 2.0),
(f64::NEG_INFINITY, -2.0, -2.0),
(f64::NEG_INFINITY, 5.0, 5.0),
(f64::NEG_INFINITY, -5.0, -5.0),
(f64::NEG_INFINITY, 5.5, 5.5),
(f64::NEG_INFINITY, -5.5, -5.5),
(f64::NEG_INFINITY, 0.3, 0.3),
(f64::NEG_INFINITY, -0.3, -0.3),
(f64::NEG_INFINITY, 7.0, 7.0),
(f64::NEG_INFINITY, 1e+300, 1e+300),
(f64::NEG_INFINITY, -1e+300, -1e+300),
(f64::NEG_INFINITY, 5e-324, 5e-324),
(f64::NEG_INFINITY, -5e-324, -5e-324),
(f64::NEG_INFINITY, 1e-10, 1e-10),
(f64::NEG_INFINITY, 3.0, 3.0),
(f64::NEG_INFINITY, -3.0, -3.0),
(0.0, f64::NAN, f64::NAN),
(0.0, f64::INFINITY, f64::INFINITY),
(0.0, f64::NEG_INFINITY, 0.0),
(0.0, 0.0, 0.6931471805599453),
(0.0, -0.0, 0.6931471805599453),
(0.0, 1.0, 1.3132616875182228),
(0.0, -1.0, 0.31326168751822286),
(0.0, 2.0, 2.1269280110429727),
(0.0, -2.0, 0.1269280110429725),
(0.0, 5.0, 5.006715348489118),
(0.0, -5.0, 0.006715348489118068),
(0.0, 5.5, 5.504078443270571),
(0.0, -5.5, 0.0040784432705707205),
(0.0, 0.3, 0.8543552444685272),
(0.0, -0.3, 0.5543552444685271),
(0.0, 7.0, 7.000911466453775),
(0.0, 1e+300, 1e+300),
(0.0, -1e+300, 0.0),
(0.0, 5e-324, 0.6931471805599453),
(0.0, -5e-324, 0.6931471805599453),
(0.0, 1e-10, 0.6931471806099453),
(0.0, 3.0, 3.048587351573742),
(0.0, -3.0, 0.048587351573742055),
(-0.0, f64::NAN, f64::NAN),
(-0.0, f64::INFINITY, f64::INFINITY),
(-0.0, f64::NEG_INFINITY, 0.0),
(-0.0, 0.0, 0.6931471805599453),
(-0.0, -0.0, 0.6931471805599453),
(-0.0, 1.0, 1.3132616875182228),
(-0.0, -1.0, 0.31326168751822286),
(-0.0, 2.0, 2.1269280110429727),
(-0.0, -2.0, 0.1269280110429725),
(-0.0, 5.0, 5.006715348489118),
(-0.0, -5.0, 0.006715348489118068),
(-0.0, 5.5, 5.504078443270571),
(-0.0, -5.5, 0.0040784432705707205),
(-0.0, 0.3, 0.8543552444685272),
(-0.0, -0.3, 0.5543552444685271),
(-0.0, 7.0, 7.000911466453775),
(-0.0, 1e+300, 1e+300),
(-0.0, -1e+300, 0.0),
(-0.0, 5e-324, 0.6931471805599453),
(-0.0, -5e-324, 0.6931471805599453),
(-0.0, 1e-10, 0.6931471806099453),
(-0.0, 3.0, 3.048587351573742),
(-0.0, -3.0, 0.048587351573742055),
(1.0, f64::NAN, f64::NAN),
(1.0, f64::INFINITY, f64::INFINITY),
(1.0, f64::NEG_INFINITY, 1.0),
(1.0, 0.0, 1.3132616875182228),
(1.0, -0.0, 1.3132616875182228),
(1.0, 1.0, 1.6931471805599454),
(1.0, -1.0, 1.1269280110429725),
(1.0, 2.0, 2.313261687518223),
(1.0, -2.0, 1.048587351573742),
(1.0, 5.0, 5.0181499279178094),
(1.0, -5.0, 1.0024756851377306),
(1.0, 5.5, 5.511047744848594),
(1.0, -5.5, 1.0015023101597542),
(1.0, 0.3, 1.403186048885458),
(1.0, -0.3, 1.2410084538329922),
(1.0, 7.0, 7.00247568513773),
(1.0, 1e+300, 1e+300),
(1.0, -1e+300, 1.0),
(1.0, 5e-324, 1.3132616875182228),
(1.0, -5e-324, 1.3132616875182228),
(1.0, 1e-10, 1.313261687545117),
(1.0, 3.0, 3.1269280110429727),
(1.0, -3.0, 1.0181499279178097),
(-1.0, f64::NAN, f64::NAN),
(-1.0, f64::INFINITY, f64::INFINITY),
(-1.0, f64::NEG_INFINITY, -1.0),
(-1.0, 0.0, 0.31326168751822286),
(-1.0, -0.0, 0.31326168751822286),
(-1.0, 1.0, 1.1269280110429725),
(-1.0, -1.0, -0.3068528194400547),
(-1.0, 2.0, 2.048587351573742),
(-1.0, -2.0, -0.6867383124817772),
(-1.0, 5.0, 5.00247568513773),
(-1.0, -5.0, -0.9818500720821902),
(-1.0, 5.5, 5.501502310159754),
(-1.0, -5.5, -0.9889522551514062),
(-1.0, 0.3, 0.5410084538329922),
(-1.0, -0.3, 0.1031860488854579),
(-1.0, 7.0, 7.000335406372896),
(-1.0, 1e+300, 1e+300),
(-1.0, -1e+300, -1.0),
(-1.0, 5e-324, 0.31326168751822286),
(-1.0, -5e-324, 0.31326168751822286),
(-1.0, 1e-10, 0.31326168759132866),
(-1.0, 3.0, 3.01814992791781),
(-1.0, -3.0, -0.8730719889570275),
(2.0, f64::NAN, f64::NAN),
(2.0, f64::INFINITY, f64::INFINITY),
(2.0, f64::NEG_INFINITY, 2.0),
(2.0, 0.0, 2.1269280110429727),
(2.0, -0.0, 2.1269280110429727),
(2.0, 1.0, 2.313261687518223),
(2.0, -1.0, 2.048587351573742),
(2.0, 2.0, 2.6931471805599454),
(2.0, -2.0, 2.01814992791781),
(2.0, 5.0, 5.048587351573742),
(2.0, -5.0, 2.000911466453774),
(2.0, 5.5, 5.529750418272621),
(2.0, -5.5, 2.0005529314753607),
(2.0, 0.3, 2.167786029386266),
(2.0, -0.3, 2.0955454645979628),
(2.0, 7.0, 7.006715348489118),
(2.0, 1e+300, 1e+300),
(2.0, -1e+300, 2.0),
(2.0, 5e-324, 2.1269280110429727),
(2.0, -5e-324, 2.1269280110429727),
(2.0, 1e-10, 2.126928011054893),
(2.0, 3.0, 3.313261687518223),
(2.0, -3.0, 2.0067153484891183),
(-2.0, f64::NAN, f64::NAN),
(-2.0, f64::INFINITY, f64::INFINITY),
(-2.0, f64::NEG_INFINITY, -2.0),
(-2.0, 0.0, 0.1269280110429725),
(-2.0, -0.0, 0.1269280110429725),
(-2.0, 1.0, 1.048587351573742),
(-2.0, -1.0, -0.6867383124817772),
(-2.0, 2.0, 2.01814992791781),
(-2.0, -2.0, -1.3068528194400546),
(-2.0, 5.0, 5.000911466453775),
(-2.0, -5.0, -1.951412648426258),
(-2.0, 5.5, 5.500552931475361),
(-2.0, -5.5, -1.9702495817273795),
(-2.0, 0.3, 0.3955454645979629),
(-2.0, -0.3, -0.13221397061373408),
(-2.0, 7.0, 7.000123402189724),
(-2.0, 1e+300, 1e+300),
(-2.0, -1e+300, -2.0),
(-2.0, 5e-324, 0.1269280110429725),
(-2.0, -5e-324, 0.1269280110429725),
(-2.0, 1e-10, 0.1269280111310522),
(-2.0, 3.0, 3.0067153484891183),
(-2.0, -3.0, -1.6867383124817772),
(5.0, f64::NAN, f64::NAN),
(5.0, f64::INFINITY, f64::INFINITY),
(5.0, f64::NEG_INFINITY, 5.0),
(5.0, 0.0, 5.006715348489118),
(5.0, -0.0, 5.006715348489118),
(5.0, 1.0, 5.0181499279178094),
(5.0, -1.0, 5.00247568513773),
(5.0, 2.0, 5.048587351573742),
(5.0, -2.0, 5.000911466453775),
(5.0, 5.0, 5.693147180559945),
(5.0, -5.0, 5.000045398899217),
(5.0, 5.5, 5.9740769841801065),
(5.0, -5.5, 5.000027536070228),
(5.0, 0.3, 5.009054164169887),
(5.0, -0.3, 5.004979177204327),
(5.0, 7.0, 7.126928011042972),
(5.0, 1e+300, 1e+300),
(5.0, -1e+300, 5.0),
(5.0, 5e-324, 5.006715348489118),
(5.0, -5e-324, 5.006715348489118),
(5.0, 1e-10, 5.006715348489787),
(5.0, 3.0, 5.126928011042972),
(5.0, -3.0, 5.000335406372896),
(-5.0, f64::NAN, f64::NAN),
(-5.0, f64::INFINITY, f64::INFINITY),
(-5.0, f64::NEG_INFINITY, -5.0),
(-5.0, 0.0, 0.006715348489118068),
(-5.0, -0.0, 0.006715348489118068),
(-5.0, 1.0, 1.0024756851377306),
(-5.0, -1.0, -0.9818500720821902),
(-5.0, 2.0, 2.000911466453774),
(-5.0, -2.0, -1.951412648426258),
(-5.0, 5.0, 5.000045398899217),
(-5.0, -5.0, -4.306852819440055),
(-5.0, 5.5, 5.500027536070228),
(-5.0, -5.5, -4.5259230158198935),
(-5.0, 0.3, 0.3049791772043272),
(-5.0, -0.3, -0.2909458358301125),
(-5.0, 7.0, 7.0000061441934776),
(-5.0, 1e+300, 1e+300),
(-5.0, -1e+300, -5.0),
(-5.0, 5e-324, 0.006715348489118068),
(-5.0, -5e-324, 0.006715348489118068),
(-5.0, 1e-10, 0.006715348588448783),
(-5.0, 3.0, 3.000335406372896),
(-5.0, -3.0, -2.8730719889570273),
(5.5, f64::NAN, f64::NAN),
(5.5, f64::INFINITY, f64::INFINITY),
(5.5, f64::NEG_INFINITY, 5.5),
(5.5, 0.0, 5.504078443270571),
(5.5, -0.0, 5.504078443270571),
(5.5, 1.0, 5.511047744848594),
(5.5, -1.0, 5.501502310159754),
(5.5, 2.0, 5.529750418272621),
(5.5, -2.0, 5.500552931475361),
(5.5, 5.0, 5.9740769841801065),
(5.5, -5.0, 5.500027536070228),
(5.5, 5.5, 6.193147180559945),
(5.5, -5.5, 5.500016701561319),
(5.5, 0.3, 5.5055014039096575),
(5.5, -0.3, 5.503022980930831),
(5.5, 7.0, 7.201413277982752),
(5.5, 1e+300, 1e+300),
(5.5, -1e+300, 5.5),
(5.5, 5e-324, 5.504078443270571),
(5.5, -5e-324, 5.504078443270571),
(5.5, 1e-10, 5.504078443270978),
(5.5, 3.0, 5.57888973429255),
(5.5, -3.0, 5.5002034476721295),
(-5.5, f64::NAN, f64::NAN),
(-5.5, f64::INFINITY, f64::INFINITY),
(-5.5, f64::NEG_INFINITY, -5.5),
(-5.5, 0.0, 0.0040784432705707205),
(-5.5, -0.0, 0.0040784432705707205),
(-5.5, 1.0, 1.0015023101597542),
(-5.5, -1.0, -0.9889522551514062),
(-5.5, 2.0, 2.0005529314753607),
(-5.5, -2.0, -1.9702495817273795),
(-5.5, 5.0, 5.000027536070228),
(-5.5, -5.0, -4.5259230158198935),
(-5.5, 5.5, 5.500016701561319),
(-5.5, -5.5, -4.806852819440055),
(-5.5, 0.3, 0.30302298093083163),
(-5.5, -0.3, -0.2944985960903426),
(-5.5, 7.0, 7.000003726646228),
(-5.5, 1e+300, 1e+300),
(-5.5, -1e+300, -5.5),
(-5.5, 5e-324, 0.0040784432705707205),
(-5.5, -5e-324, 0.0040784432705707205),
(-5.5, 1e-10, 0.004078443370163706),
(-5.5, 3.0, 3.0002034476721295),
(-5.5, -3.0, -2.9211102657074504),
(0.3, f64::NAN, f64::NAN),
(0.3, f64::INFINITY, f64::INFINITY),
(0.3, f64::NEG_INFINITY, 0.3),
(0.3, 0.0, 0.8543552444685272),
(0.3, -0.0, 0.8543552444685272),
(0.3, 1.0, 1.403186048885458),
(0.3, -1.0, 0.5410084538329922),
(0.3, 2.0, 2.167786029386266),
(0.3, -2.0, 0.3955454645979629),
(0.3, 5.0, 5.009054164169887),
(0.3, -5.0, 0.3049791772043272),
(0.3, 5.5, 5.5055014039096575),
(0.3, -5.5, 0.30302298093083163),
(0.3, 0.3, 0.9931471805599452),
(0.3, -0.3, 0.7374879504858857),
(0.3, 7.0, 7.001230154951713),
(0.3, 1e+300, 1e+300),
(0.3, -1e+300, 0.3),
(0.3, 5e-324, 0.8543552444685272),
(0.3, -5e-324, 0.8543552444685272),
(0.3, 1e-10, 0.8543552445110829),
(0.3, 3.0, 3.0650435617765908),
(0.3, -3.0, 0.3362192588706593),
(-0.3, f64::NAN, f64::NAN),
(-0.3, f64::INFINITY, f64::INFINITY),
(-0.3, f64::NEG_INFINITY, -0.3),
(-0.3, 0.0, 0.5543552444685271),
(-0.3, -0.0, 0.5543552444685271),
(-0.3, 1.0, 1.2410084538329922),
(-0.3, -1.0, 0.1031860488854579),
(-0.3, 2.0, 2.0955454645979628),
(-0.3, -2.0, -0.13221397061373408),
(-0.3, 5.0, 5.004979177204327),
(-0.3, -5.0, -0.2909458358301125),
(-0.3, 5.5, 5.503022980930831),
(-0.3, -5.5, -0.2944985960903426),
(-0.3, 0.3, 0.7374879504858857),
(-0.3, -0.3, 0.3931471805599453),
(-0.3, 7.0, 7.000675310701585),
(-0.3, 1e+300, 1e+300),
(-0.3, -1e+300, -0.3),
(-0.3, 5e-324, 0.5543552444685271),
(-0.3, -5e-324, 0.5543552444685271),
(-0.3, 1e-10, 0.5543552445259713),
(-0.3, 3.0, 3.036219258870659),
(-0.3, -3.0, -0.23495643822340945),
(7.0, f64::NAN, f64::NAN),
(7.0, f64::INFINITY, f64::INFINITY),
(7.0, f64::NEG_INFINITY, 7.0),
(7.0, 0.0, 7.000911466453775),
(7.0, -0.0, 7.000911466453775),
(7.0, 1.0, 7.00247568513773),
(7.0, -1.0, 7.000335406372896),
(7.0, 2.0, 7.006715348489118),
(7.0, -2.0, 7.000123402189724),
(7.0, 5.0, 7.126928011042972),
(7.0, -5.0, 7.0000061441934776),
(7.0, 5.5, 7.201413277982752),
(7.0, -5.5, 7.000003726646228),
(7.0, 0.3, 7.001230154951713),
(7.0, -0.3, 7.000675310701585),
(7.0, 7.0, 7.693147180559945),
(7.0, 1e+300, 1e+300),
(7.0, -1e+300, 7.0),
(7.0, 5e-324, 7.000911466453775),
(7.0, -5e-324, 7.000911466453775),
(7.0, 1e-10, 7.000911466453865),
(7.0, 3.0, 7.0181499279178094),
(7.0, -3.0, 7.000045398899217),
(1e+300, f64::NAN, f64::NAN),
(1e+300, f64::INFINITY, f64::INFINITY),
(1e+300, f64::NEG_INFINITY, 1e+300),
(1e+300, 0.0, 1e+300),
(1e+300, -0.0, 1e+300),
(1e+300, 1.0, 1e+300),
(1e+300, -1.0, 1e+300),
(1e+300, 2.0, 1e+300),
(1e+300, -2.0, 1e+300),
(1e+300, 5.0, 1e+300),
(1e+300, -5.0, 1e+300),
(1e+300, 5.5, 1e+300),
(1e+300, -5.5, 1e+300),
(1e+300, 0.3, 1e+300),
(1e+300, -0.3, 1e+300),
(1e+300, 7.0, 1e+300),
(1e+300, 1e+300, 1e+300),
(1e+300, -1e+300, 1e+300),
(1e+300, 5e-324, 1e+300),
(1e+300, -5e-324, 1e+300),
(1e+300, 1e-10, 1e+300),
(1e+300, 3.0, 1e+300),
(1e+300, -3.0, 1e+300),
(-1e+300, f64::NAN, f64::NAN),
(-1e+300, f64::INFINITY, f64::INFINITY),
(-1e+300, f64::NEG_INFINITY, -1e+300),
(-1e+300, 0.0, 0.0),
(-1e+300, -0.0, 0.0),
(-1e+300, 1.0, 1.0),
(-1e+300, -1.0, -1.0),
(-1e+300, 2.0, 2.0),
(-1e+300, -2.0, -2.0),
(-1e+300, 5.0, 5.0),
(-1e+300, -5.0, -5.0),
(-1e+300, 5.5, 5.5),
(-1e+300, -5.5, -5.5),
(-1e+300, 0.3, 0.3),
(-1e+300, -0.3, -0.3),
(-1e+300, 7.0, 7.0),
(-1e+300, 1e+300, 1e+300),
(-1e+300, -1e+300, -1e+300),
(-1e+300, 5e-324, 5e-324),
(-1e+300, -5e-324, -5e-324),
(-1e+300, 1e-10, 1e-10),
(-1e+300, 3.0, 3.0),
(-1e+300, -3.0, -3.0),
(5e-324, f64::NAN, f64::NAN),
(5e-324, f64::INFINITY, f64::INFINITY),
(5e-324, f64::NEG_INFINITY, 5e-324),
(5e-324, 0.0, 0.6931471805599453),
(5e-324, -0.0, 0.6931471805599453),
(5e-324, 1.0, 1.3132616875182228),
(5e-324, -1.0, 0.31326168751822286),
(5e-324, 2.0, 2.1269280110429727),
(5e-324, -2.0, 0.1269280110429725),
(5e-324, 5.0, 5.006715348489118),
(5e-324, -5.0, 0.006715348489118068),
(5e-324, 5.5, 5.504078443270571),
(5e-324, -5.5, 0.0040784432705707205),
(5e-324, 0.3, 0.8543552444685272),
(5e-324, -0.3, 0.5543552444685271),
(5e-324, 7.0, 7.000911466453775),
(5e-324, 1e+300, 1e+300),
(5e-324, -1e+300, 5e-324),
(5e-324, 5e-324, 0.6931471805599453),
(5e-324, -5e-324, 0.6931471805599453),
(5e-324, 1e-10, 0.6931471806099453),
(5e-324, 3.0, 3.048587351573742),
(5e-324, -3.0, 0.048587351573742055),
(-5e-324, f64::NAN, f64::NAN),
(-5e-324, f64::INFINITY, f64::INFINITY),
(-5e-324, f64::NEG_INFINITY, -5e-324),
(-5e-324, 0.0, 0.6931471805599453),
(-5e-324, -0.0, 0.6931471805599453),
(-5e-324, 1.0, 1.3132616875182228),
(-5e-324, -1.0, 0.31326168751822286),
(-5e-324, 2.0, 2.1269280110429727),
(-5e-324, -2.0, 0.1269280110429725),
(-5e-324, 5.0, 5.006715348489118),
(-5e-324, -5.0, 0.006715348489118068),
(-5e-324, 5.5, 5.504078443270571),
(-5e-324, -5.5, 0.0040784432705707205),
(-5e-324, 0.3, 0.8543552444685272),
(-5e-324, -0.3, 0.5543552444685271),
(-5e-324, 7.0, 7.000911466453775),
(-5e-324, 1e+300, 1e+300),
(-5e-324, -1e+300, -5e-324),
(-5e-324, 5e-324, 0.6931471805599453),
(-5e-324, -5e-324, 0.6931471805599453),
(-5e-324, 1e-10, 0.6931471806099453),
(-5e-324, 3.0, 3.048587351573742),
(-5e-324, -3.0, 0.048587351573742055),
(1e-10, f64::NAN, f64::NAN),
(1e-10, f64::INFINITY, f64::INFINITY),
(1e-10, f64::NEG_INFINITY, 1e-10),
(1e-10, 0.0, 0.6931471806099453),
(1e-10, -0.0, 0.6931471806099453),
(1e-10, 1.0, 1.313261687545117),
(1e-10, -1.0, 0.31326168759132866),
(1e-10, 2.0, 2.126928011054893),
(1e-10, -2.0, 0.1269280111310522),
(1e-10, 5.0, 5.006715348489787),
(1e-10, -5.0, 0.006715348588448783),
(1e-10, 5.5, 5.504078443270978),
(1e-10, -5.5, 0.004078443370163706),
(1e-10, 0.3, 0.8543552445110829),
(1e-10, -0.3, 0.5543552445259713),
(1e-10, 7.0, 7.000911466453865),
(1e-10, 1e+300, 1e+300),
(1e-10, -1e+300, 1e-10),
(1e-10, 5e-324, 0.6931471806099453),
(1e-10, -5e-324, 0.6931471806099453),
(1e-10, 1e-10, 0.6931471806599453),
(1e-10, 3.0, 3.0485873515784845),
(1e-10, -3.0, 0.04858735166899947),
(3.0, f64::NAN, f64::NAN),
(3.0, f64::INFINITY, f64::INFINITY),
(3.0, f64::NEG_INFINITY, 3.0),
(3.0, 0.0, 3.048587351573742),
(3.0, -0.0, 3.048587351573742),
(3.0, 1.0, 3.1269280110429727),
(3.0, -1.0, 3.01814992791781),
(3.0, 2.0, 3.313261687518223),
(3.0, -2.0, 3.0067153484891183),
(3.0, 5.0, 5.126928011042972),
(3.0, -5.0, 3.000335406372896),
(3.0, 5.5, 5.57888973429255),
(3.0, -5.5, 3.0002034476721295),
(3.0, 0.3, 3.0650435617765908),
(3.0, -0.3, 3.036219258870659),
(3.0, 7.0, 7.0181499279178094),
(3.0, 1e+300, 1e+300),
(3.0, -1e+300, 3.0),
(3.0, 5e-324, 3.048587351573742),
(3.0, -5e-324, 3.048587351573742),
(3.0, 1e-10, 3.0485873515784845),
(3.0, 3.0, 3.6931471805599454),
(3.0, -3.0, 3.0024756851377306),
(-3.0, f64::NAN, f64::NAN),
(-3.0, f64::INFINITY, f64::INFINITY),
(-3.0, f64::NEG_INFINITY, -3.0),
(-3.0, 0.0, 0.048587351573742055),
(-3.0, -0.0, 0.048587351573742055),
(-3.0, 1.0, 1.0181499279178097),
(-3.0, -1.0, -0.8730719889570275),
(-3.0, 2.0, 2.0067153484891183),
(-3.0, -2.0, -1.6867383124817772),
(-3.0, 5.0, 5.000335406372896),
(-3.0, -5.0, -2.8730719889570273),
(-3.0, 5.5, 5.5002034476721295),
(-3.0, -5.5, -2.9211102657074504),
(-3.0, 0.3, 0.3362192588706593),
(-3.0, -0.3, -0.23495643822340945),
(-3.0, 7.0, 7.000045398899217),
(-3.0, 1e+300, 1e+300),
(-3.0, -1e+300, -3.0),
(-3.0, 5e-324, 0.048587351573742055),
(-3.0, -5e-324, 0.048587351573742055),
(-3.0, 1e-10, 0.04858735166899947),
(-3.0, 3.0, 3.0024756851377306),
(-3.0, -3.0, -2.3068528194400546),
];
for &(x, y, want) in CASES {
check(
"logaddexp",
&format!("{x:?}, {y:?}"),
logaddexp(x, y),
want,
1e-13,
0.0,
);
}
}
#[test]
fn logaddexp2_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN),
(f64::NAN, 0.0, f64::NAN),
(f64::NAN, -0.0, f64::NAN),
(f64::NAN, 1.0, f64::NAN),
(f64::NAN, -1.0, f64::NAN),
(f64::NAN, 2.0, f64::NAN),
(f64::NAN, -2.0, f64::NAN),
(f64::NAN, 5.0, f64::NAN),
(f64::NAN, -5.0, f64::NAN),
(f64::NAN, 5.5, f64::NAN),
(f64::NAN, -5.5, f64::NAN),
(f64::NAN, 0.3, f64::NAN),
(f64::NAN, -0.3, f64::NAN),
(f64::NAN, 7.0, f64::NAN),
(f64::NAN, 1e+300, f64::NAN),
(f64::NAN, -1e+300, f64::NAN),
(f64::NAN, 5e-324, f64::NAN),
(f64::NAN, -5e-324, f64::NAN),
(f64::NAN, 1e-10, f64::NAN),
(f64::NAN, 3.0, f64::NAN),
(f64::NAN, -3.0, f64::NAN),
(f64::INFINITY, f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY, f64::INFINITY),
(f64::INFINITY, f64::NEG_INFINITY, f64::INFINITY),
(f64::INFINITY, 0.0, f64::INFINITY),
(f64::INFINITY, -0.0, f64::INFINITY),
(f64::INFINITY, 1.0, f64::INFINITY),
(f64::INFINITY, -1.0, f64::INFINITY),
(f64::INFINITY, 2.0, f64::INFINITY),
(f64::INFINITY, -2.0, f64::INFINITY),
(f64::INFINITY, 5.0, f64::INFINITY),
(f64::INFINITY, -5.0, f64::INFINITY),
(f64::INFINITY, 5.5, f64::INFINITY),
(f64::INFINITY, -5.5, f64::INFINITY),
(f64::INFINITY, 0.3, f64::INFINITY),
(f64::INFINITY, -0.3, f64::INFINITY),
(f64::INFINITY, 7.0, f64::INFINITY),
(f64::INFINITY, 1e+300, f64::INFINITY),
(f64::INFINITY, -1e+300, f64::INFINITY),
(f64::INFINITY, 5e-324, f64::INFINITY),
(f64::INFINITY, -5e-324, f64::INFINITY),
(f64::INFINITY, 1e-10, f64::INFINITY),
(f64::INFINITY, 3.0, f64::INFINITY),
(f64::INFINITY, -3.0, f64::INFINITY),
(f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::INFINITY, f64::INFINITY),
(f64::NEG_INFINITY, f64::NEG_INFINITY, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 0.0, 0.0),
(f64::NEG_INFINITY, -0.0, 0.0),
(f64::NEG_INFINITY, 1.0, 1.0),
(f64::NEG_INFINITY, -1.0, -1.0),
(f64::NEG_INFINITY, 2.0, 2.0),
(f64::NEG_INFINITY, -2.0, -2.0),
(f64::NEG_INFINITY, 5.0, 5.0),
(f64::NEG_INFINITY, -5.0, -5.0),
(f64::NEG_INFINITY, 5.5, 5.5),
(f64::NEG_INFINITY, -5.5, -5.5),
(f64::NEG_INFINITY, 0.3, 0.3),
(f64::NEG_INFINITY, -0.3, -0.3),
(f64::NEG_INFINITY, 7.0, 7.0),
(f64::NEG_INFINITY, 1e+300, 1e+300),
(f64::NEG_INFINITY, -1e+300, -1e+300),
(f64::NEG_INFINITY, 5e-324, 5e-324),
(f64::NEG_INFINITY, -5e-324, -5e-324),
(f64::NEG_INFINITY, 1e-10, 1e-10),
(f64::NEG_INFINITY, 3.0, 3.0),
(f64::NEG_INFINITY, -3.0, -3.0),
(0.0, f64::NAN, f64::NAN),
(0.0, f64::INFINITY, f64::INFINITY),
(0.0, f64::NEG_INFINITY, 0.0),
(0.0, 0.0, 1.0),
(0.0, -0.0, 1.0),
(0.0, 1.0, 1.584962500721156),
(0.0, -1.0, 0.5849625007211562),
(0.0, 2.0, 2.321928094887362),
(0.0, -2.0, 0.32192809488736235),
(0.0, 5.0, 5.044394119358453),
(0.0, -5.0, 0.044394119358453436),
(0.0, 5.5, 5.531532241436055),
(0.0, -5.5, 0.03153224143605492),
(0.0, 0.3, 1.1577838966720309),
(0.0, -0.3, 0.8577838966720309),
(0.0, 7.0, 7.011227255423254),
(0.0, 1e+300, 1e+300),
(0.0, -1e+300, 0.0),
(0.0, 5e-324, 1.0),
(0.0, -5e-324, 1.0),
(0.0, 1e-10, 1.00000000005),
(0.0, 3.0, 3.169925001442312),
(0.0, -3.0, 0.16992500144231237),
(-0.0, f64::NAN, f64::NAN),
(-0.0, f64::INFINITY, f64::INFINITY),
(-0.0, f64::NEG_INFINITY, 0.0),
(-0.0, 0.0, 1.0),
(-0.0, -0.0, 1.0),
(-0.0, 1.0, 1.584962500721156),
(-0.0, -1.0, 0.5849625007211562),
(-0.0, 2.0, 2.321928094887362),
(-0.0, -2.0, 0.32192809488736235),
(-0.0, 5.0, 5.044394119358453),
(-0.0, -5.0, 0.044394119358453436),
(-0.0, 5.5, 5.531532241436055),
(-0.0, -5.5, 0.03153224143605492),
(-0.0, 0.3, 1.1577838966720309),
(-0.0, -0.3, 0.8577838966720309),
(-0.0, 7.0, 7.011227255423254),
(-0.0, 1e+300, 1e+300),
(-0.0, -1e+300, 0.0),
(-0.0, 5e-324, 1.0),
(-0.0, -5e-324, 1.0),
(-0.0, 1e-10, 1.00000000005),
(-0.0, 3.0, 3.169925001442312),
(-0.0, -3.0, 0.16992500144231237),
(1.0, f64::NAN, f64::NAN),
(1.0, f64::INFINITY, f64::INFINITY),
(1.0, f64::NEG_INFINITY, 1.0),
(1.0, 0.0, 1.584962500721156),
(1.0, -0.0, 1.584962500721156),
(1.0, 1.0, 2.0),
(1.0, -1.0, 1.3219280948873624),
(1.0, 2.0, 2.584962500721156),
(1.0, -2.0, 1.1699250014423124),
(1.0, 5.0, 5.087462841250339),
(1.0, -5.0, 1.0223678130284546),
(1.0, 5.5, 5.562390014173462),
(1.0, -5.5, 1.015852266995639),
(1.0, 0.3, 1.692045232113827),
(1.0, -0.3, 1.491726080410031),
(1.0, 7.0, 7.022367813028454),
(1.0, 1e+300, 1e+300),
(1.0, -1e+300, 1.0),
(1.0, 5e-324, 1.584962500721156),
(1.0, -5e-324, 1.584962500721156),
(1.0, 1e-10, 1.5849625007544894),
(1.0, 3.0, 3.321928094887362),
(1.0, -3.0, 1.0874628412503393),
(-1.0, f64::NAN, f64::NAN),
(-1.0, f64::INFINITY, f64::INFINITY),
(-1.0, f64::NEG_INFINITY, -1.0),
(-1.0, 0.0, 0.5849625007211562),
(-1.0, -0.0, 0.5849625007211562),
(-1.0, 1.0, 1.3219280948873624),
(-1.0, -1.0, 0.0),
(-1.0, 2.0, 2.169925001442312),
(-1.0, -2.0, -0.4150374992788438),
(-1.0, 5.0, 5.022367813028454),
(-1.0, -5.0, -0.9125371587496606),
(-1.0, 5.5, 5.515852266995639),
(-1.0, -5.5, -0.937609985826538),
(-1.0, 0.3, 0.7917260804100309),
(-1.0, -0.3, 0.3920452321138271),
(-1.0, 7.0, 7.005624549193878),
(-1.0, 1e+300, 1e+300),
(-1.0, -1e+300, -1.0),
(-1.0, 5e-324, 0.5849625007211562),
(-1.0, -5e-324, 0.5849625007211562),
(-1.0, 1e-10, 0.5849625007878229),
(-1.0, 3.0, 3.0874628412503395),
(-1.0, -3.0, -0.6780719051126376),
(2.0, f64::NAN, f64::NAN),
(2.0, f64::INFINITY, f64::INFINITY),
(2.0, f64::NEG_INFINITY, 2.0),
(2.0, 0.0, 2.321928094887362),
(2.0, -0.0, 2.321928094887362),
(2.0, 1.0, 2.584962500721156),
(2.0, -1.0, 2.169925001442312),
(2.0, 2.0, 3.0),
(2.0, -2.0, 2.0874628412503395),
(2.0, 5.0, 5.169925001442312),
(2.0, -5.0, 2.011227255423254),
(2.0, 5.5, 5.622193416202275),
(2.0, -5.5, 2.0079479063862),
(2.0, 0.3, 2.3871265982592083),
(2.0, -0.3, 2.266712311969978),
(2.0, 7.0, 7.044394119358453),
(2.0, 1e+300, 1e+300),
(2.0, -1e+300, 2.0),
(2.0, 5e-324, 2.321928094887362),
(2.0, -5e-324, 2.321928094887362),
(2.0, 1e-10, 2.321928094907362),
(2.0, 3.0, 3.584962500721156),
(2.0, -3.0, 2.0443941193584534),
(-2.0, f64::NAN, f64::NAN),
(-2.0, f64::INFINITY, f64::INFINITY),
(-2.0, f64::NEG_INFINITY, -2.0),
(-2.0, 0.0, 0.32192809488736235),
(-2.0, -0.0, 0.32192809488736235),
(-2.0, 1.0, 1.1699250014423124),
(-2.0, -1.0, -0.4150374992788438),
(-2.0, 2.0, 2.0874628412503395),
(-2.0, -2.0, -1.0),
(-2.0, 5.0, 5.011227255423254),
(-2.0, -5.0, -1.8300749985576876),
(-2.0, 5.5, 5.5079479063862005),
(-2.0, -5.5, -1.8778065837977256),
(-2.0, 0.3, 0.5667123119699777),
(-2.0, -0.3, 0.08712659825920821),
(-2.0, 7.0, 7.002815015607054),
(-2.0, 1e+300, 1e+300),
(-2.0, -1e+300, -2.0),
(-2.0, 5e-324, 0.32192809488736235),
(-2.0, -5e-324, 0.32192809488736235),
(-2.0, 1e-10, 0.32192809496736235),
(-2.0, 3.0, 3.0443941193584534),
(-2.0, -3.0, -1.415037499278844),
(5.0, f64::NAN, f64::NAN),
(5.0, f64::INFINITY, f64::INFINITY),
(5.0, f64::NEG_INFINITY, 5.0),
(5.0, 0.0, 5.044394119358453),
(5.0, -0.0, 5.044394119358453),
(5.0, 1.0, 5.087462841250339),
(5.0, -1.0, 5.022367813028454),
(5.0, 2.0, 5.169925001442312),
(5.0, -2.0, 5.011227255423254),
(5.0, 5.0, 6.0),
(5.0, -5.0, 5.001408194392808),
(5.0, 5.5, 6.271553303163612),
(5.0, -5.5, 5.00099588612128),
(5.0, 0.3, 5.054464072269636),
(5.0, -0.3, 5.036162725912822),
(5.0, 7.0, 7.321928094887363),
(5.0, 1e+300, 1e+300),
(5.0, -1e+300, 5.0),
(5.0, 5e-324, 5.044394119358453),
(5.0, -5e-324, 5.044394119358453),
(5.0, 1e-10, 5.044394119361484),
(5.0, 3.0, 5.321928094887363),
(5.0, -3.0, 5.005624549193878),
(-5.0, f64::NAN, f64::NAN),
(-5.0, f64::INFINITY, f64::INFINITY),
(-5.0, f64::NEG_INFINITY, -5.0),
(-5.0, 0.0, 0.044394119358453436),
(-5.0, -0.0, 0.044394119358453436),
(-5.0, 1.0, 1.0223678130284546),
(-5.0, -1.0, -0.9125371587496606),
(-5.0, 2.0, 2.011227255423254),
(-5.0, -2.0, -1.8300749985576876),
(-5.0, 5.0, 5.001408194392808),
(-5.0, -5.0, -4.0),
(-5.0, 5.5, 5.50099588612128),
(-5.0, -5.5, -4.228446696836388),
(-5.0, 0.3, 0.33616272591282204),
(-5.0, -0.3, -0.24553592773036448),
(-5.0, 7.0, 7.000352177480301),
(-5.0, 1e+300, 1e+300),
(-5.0, -1e+300, -5.0),
(-5.0, 5e-324, 0.044394119358453436),
(-5.0, -5e-324, 0.044394119358453436),
(-5.0, 1e-10, 0.04439411945542313),
(-5.0, 3.0, 3.005624549193878),
(-5.0, -3.0, -2.678071905112638),
(5.5, f64::NAN, f64::NAN),
(5.5, f64::INFINITY, f64::INFINITY),
(5.5, f64::NEG_INFINITY, 5.5),
(5.5, 0.0, 5.531532241436055),
(5.5, -0.0, 5.531532241436055),
(5.5, 1.0, 5.562390014173462),
(5.5, -1.0, 5.515852266995639),
(5.5, 2.0, 5.622193416202275),
(5.5, -2.0, 5.5079479063862005),
(5.5, 5.0, 6.271553303163612),
(5.5, -5.0, 5.50099588612128),
(5.5, 5.5, 6.5),
(5.5, -5.5, 5.500704269011247),
(5.5, 0.3, 5.538723715841179),
(5.5, -0.3, 5.525664449497345),
(5.5, 7.0, 7.436751795439824),
(5.5, 1e+300, 1e+300),
(5.5, -1e+300, 5.5),
(5.5, 5e-324, 5.531532241436055),
(5.5, -5e-324, 5.531532241436055),
(5.5, 1e-10, 5.531532241438216),
(5.5, 3.0, 5.734840581079202),
(5.5, -3.0, 5.503979426381668),
(-5.5, f64::NAN, f64::NAN),
(-5.5, f64::INFINITY, f64::INFINITY),
(-5.5, f64::NEG_INFINITY, -5.5),
(-5.5, 0.0, 0.03153224143605492),
(-5.5, -0.0, 0.03153224143605492),
(-5.5, 1.0, 1.015852266995639),
(-5.5, -1.0, -0.937609985826538),
(-5.5, 2.0, 2.0079479063862),
(-5.5, -2.0, -1.8778065837977256),
(-5.5, 5.0, 5.00099588612128),
(-5.5, -5.0, -4.228446696836388),
(-5.5, 5.5, 5.500704269011247),
(-5.5, -5.5, -4.5),
(-5.5, 0.3, 0.3256644494973452),
(-5.5, -0.3, -0.2612762841588204),
(-5.5, 7.0, 7.000249035986722),
(-5.5, 1e+300, 1e+300),
(-5.5, -1e+300, -5.5),
(-5.5, 5e-324, 0.03153224143605492),
(-5.5, -5e-324, 0.03153224143605492),
(-5.5, 1e-10, 0.03153224153389299),
(-5.5, 3.0, 3.0039794263816684),
(-5.5, -3.0, -2.765159418920798),
(0.3, f64::NAN, f64::NAN),
(0.3, f64::INFINITY, f64::INFINITY),
(0.3, f64::NEG_INFINITY, 0.3),
(0.3, 0.0, 1.1577838966720309),
(0.3, -0.0, 1.1577838966720309),
(0.3, 1.0, 1.692045232113827),
(0.3, -1.0, 0.7917260804100309),
(0.3, 2.0, 2.3871265982592083),
(0.3, -2.0, 0.5667123119699777),
(0.3, 5.0, 5.054464072269636),
(0.3, -5.0, 0.33616272591282204),
(0.3, 5.5, 5.538723715841179),
(0.3, -5.5, 0.3256644494973452),
(0.3, 0.3, 1.3),
(0.3, -0.3, 1.030969389974021),
(0.3, 7.0, 7.013809987949033),
(0.3, 1e+300, 1e+300),
(0.3, -1e+300, 0.3),
(0.3, 5e-324, 1.1577838966720309),
(0.3, -5e-324, 1.1577838966720309),
(0.3, 1e-10, 1.1577838967168508),
(0.3, 3.0, 3.2065095142969424),
(0.3, -3.0, 0.43951081661809654),
(-0.3, f64::NAN, f64::NAN),
(-0.3, f64::INFINITY, f64::INFINITY),
(-0.3, f64::NEG_INFINITY, -0.3),
(-0.3, 0.0, 0.8577838966720309),
(-0.3, -0.0, 0.8577838966720309),
(-0.3, 1.0, 1.491726080410031),
(-0.3, -1.0, 0.3920452321138271),
(-0.3, 2.0, 2.266712311969978),
(-0.3, -2.0, 0.08712659825920821),
(-0.3, 5.0, 5.036162725912822),
(-0.3, -5.0, -0.24553592773036448),
(-0.3, 5.5, 5.525664449497345),
(-0.3, -5.5, -0.2612762841588204),
(-0.3, 0.3, 1.030969389974021),
(-0.3, -0.3, 0.7),
(-0.3, 7.0, 7.009126016385313),
(-0.3, 1e+300, 1e+300),
(-0.3, -1e+300, -0.3),
(-0.3, 5e-324, 0.8577838966720309),
(-0.3, -5e-324, 0.8577838966720309),
(-0.3, 1e-10, 0.8577838967272108),
(-0.3, 3.0, 3.1395108166180967),
(-0.3, -3.0, -0.09349048570305774),
(7.0, f64::NAN, f64::NAN),
(7.0, f64::INFINITY, f64::INFINITY),
(7.0, f64::NEG_INFINITY, 7.0),
(7.0, 0.0, 7.011227255423254),
(7.0, -0.0, 7.011227255423254),
(7.0, 1.0, 7.022367813028454),
(7.0, -1.0, 7.005624549193878),
(7.0, 2.0, 7.044394119358453),
(7.0, -2.0, 7.002815015607054),
(7.0, 5.0, 7.321928094887363),
(7.0, -5.0, 7.000352177480301),
(7.0, 5.5, 7.436751795439824),
(7.0, -5.5, 7.000249035986722),
(7.0, 0.3, 7.013809987949033),
(7.0, -0.3, 7.009126016385313),
(7.0, 7.0, 8.0),
(7.0, 1e+300, 1e+300),
(7.0, -1e+300, 7.0),
(7.0, 5e-324, 7.011227255423254),
(7.0, -5e-324, 7.011227255423254),
(7.0, 1e-10, 7.011227255424029),
(7.0, 3.0, 7.087462841250339),
(7.0, -3.0, 7.001408194392808),
(1e+300, f64::NAN, f64::NAN),
(1e+300, f64::INFINITY, f64::INFINITY),
(1e+300, f64::NEG_INFINITY, 1e+300),
(1e+300, 0.0, 1e+300),
(1e+300, -0.0, 1e+300),
(1e+300, 1.0, 1e+300),
(1e+300, -1.0, 1e+300),
(1e+300, 2.0, 1e+300),
(1e+300, -2.0, 1e+300),
(1e+300, 5.0, 1e+300),
(1e+300, -5.0, 1e+300),
(1e+300, 5.5, 1e+300),
(1e+300, -5.5, 1e+300),
(1e+300, 0.3, 1e+300),
(1e+300, -0.3, 1e+300),
(1e+300, 7.0, 1e+300),
(1e+300, 1e+300, 1e+300),
(1e+300, -1e+300, 1e+300),
(1e+300, 5e-324, 1e+300),
(1e+300, -5e-324, 1e+300),
(1e+300, 1e-10, 1e+300),
(1e+300, 3.0, 1e+300),
(1e+300, -3.0, 1e+300),
(-1e+300, f64::NAN, f64::NAN),
(-1e+300, f64::INFINITY, f64::INFINITY),
(-1e+300, f64::NEG_INFINITY, -1e+300),
(-1e+300, 0.0, 0.0),
(-1e+300, -0.0, 0.0),
(-1e+300, 1.0, 1.0),
(-1e+300, -1.0, -1.0),
(-1e+300, 2.0, 2.0),
(-1e+300, -2.0, -2.0),
(-1e+300, 5.0, 5.0),
(-1e+300, -5.0, -5.0),
(-1e+300, 5.5, 5.5),
(-1e+300, -5.5, -5.5),
(-1e+300, 0.3, 0.3),
(-1e+300, -0.3, -0.3),
(-1e+300, 7.0, 7.0),
(-1e+300, 1e+300, 1e+300),
(-1e+300, -1e+300, -1e+300),
(-1e+300, 5e-324, 5e-324),
(-1e+300, -5e-324, -5e-324),
(-1e+300, 1e-10, 1e-10),
(-1e+300, 3.0, 3.0),
(-1e+300, -3.0, -3.0),
(5e-324, f64::NAN, f64::NAN),
(5e-324, f64::INFINITY, f64::INFINITY),
(5e-324, f64::NEG_INFINITY, 5e-324),
(5e-324, 0.0, 1.0),
(5e-324, -0.0, 1.0),
(5e-324, 1.0, 1.584962500721156),
(5e-324, -1.0, 0.5849625007211562),
(5e-324, 2.0, 2.321928094887362),
(5e-324, -2.0, 0.32192809488736235),
(5e-324, 5.0, 5.044394119358453),
(5e-324, -5.0, 0.044394119358453436),
(5e-324, 5.5, 5.531532241436055),
(5e-324, -5.5, 0.03153224143605492),
(5e-324, 0.3, 1.1577838966720309),
(5e-324, -0.3, 0.8577838966720309),
(5e-324, 7.0, 7.011227255423254),
(5e-324, 1e+300, 1e+300),
(5e-324, -1e+300, 5e-324),
(5e-324, 5e-324, 1.0),
(5e-324, -5e-324, 1.0),
(5e-324, 1e-10, 1.00000000005),
(5e-324, 3.0, 3.169925001442312),
(5e-324, -3.0, 0.16992500144231237),
(-5e-324, f64::NAN, f64::NAN),
(-5e-324, f64::INFINITY, f64::INFINITY),
(-5e-324, f64::NEG_INFINITY, -5e-324),
(-5e-324, 0.0, 1.0),
(-5e-324, -0.0, 1.0),
(-5e-324, 1.0, 1.584962500721156),
(-5e-324, -1.0, 0.5849625007211562),
(-5e-324, 2.0, 2.321928094887362),
(-5e-324, -2.0, 0.32192809488736235),
(-5e-324, 5.0, 5.044394119358453),
(-5e-324, -5.0, 0.044394119358453436),
(-5e-324, 5.5, 5.531532241436055),
(-5e-324, -5.5, 0.03153224143605492),
(-5e-324, 0.3, 1.1577838966720309),
(-5e-324, -0.3, 0.8577838966720309),
(-5e-324, 7.0, 7.011227255423254),
(-5e-324, 1e+300, 1e+300),
(-5e-324, -1e+300, -5e-324),
(-5e-324, 5e-324, 1.0),
(-5e-324, -5e-324, 1.0),
(-5e-324, 1e-10, 1.00000000005),
(-5e-324, 3.0, 3.169925001442312),
(-5e-324, -3.0, 0.16992500144231237),
(1e-10, f64::NAN, f64::NAN),
(1e-10, f64::INFINITY, f64::INFINITY),
(1e-10, f64::NEG_INFINITY, 1e-10),
(1e-10, 0.0, 1.00000000005),
(1e-10, -0.0, 1.00000000005),
(1e-10, 1.0, 1.5849625007544894),
(1e-10, -1.0, 0.5849625007878229),
(1e-10, 2.0, 2.321928094907362),
(1e-10, -2.0, 0.32192809496736235),
(1e-10, 5.0, 5.044394119361484),
(1e-10, -5.0, 0.04439411945542313),
(1e-10, 5.5, 5.531532241438216),
(1e-10, -5.5, 0.03153224153389299),
(1e-10, 0.3, 1.1577838967168508),
(1e-10, -0.3, 0.8577838967272108),
(1e-10, 7.0, 7.011227255424029),
(1e-10, 1e+300, 1e+300),
(1e-10, -1e+300, 1e-10),
(1e-10, 5e-324, 1.00000000005),
(1e-10, -5e-324, 1.00000000005),
(1e-10, 1e-10, 1.0000000001),
(1e-10, 3.0, 3.1699250014534233),
(1e-10, -3.0, 0.16992500153120127),
(3.0, f64::NAN, f64::NAN),
(3.0, f64::INFINITY, f64::INFINITY),
(3.0, f64::NEG_INFINITY, 3.0),
(3.0, 0.0, 3.169925001442312),
(3.0, -0.0, 3.169925001442312),
(3.0, 1.0, 3.321928094887362),
(3.0, -1.0, 3.0874628412503395),
(3.0, 2.0, 3.584962500721156),
(3.0, -2.0, 3.0443941193584534),
(3.0, 5.0, 5.321928094887363),
(3.0, -5.0, 3.005624549193878),
(3.0, 5.5, 5.734840581079202),
(3.0, -5.5, 3.0039794263816684),
(3.0, 0.3, 3.2065095142969424),
(3.0, -0.3, 3.1395108166180967),
(3.0, 7.0, 7.087462841250339),
(3.0, 1e+300, 1e+300),
(3.0, -1e+300, 3.0),
(3.0, 5e-324, 3.169925001442312),
(3.0, -5e-324, 3.169925001442312),
(3.0, 1e-10, 3.1699250014534233),
(3.0, 3.0, 4.0),
(3.0, -3.0, 3.0223678130284544),
(-3.0, f64::NAN, f64::NAN),
(-3.0, f64::INFINITY, f64::INFINITY),
(-3.0, f64::NEG_INFINITY, -3.0),
(-3.0, 0.0, 0.16992500144231237),
(-3.0, -0.0, 0.16992500144231237),
(-3.0, 1.0, 1.0874628412503393),
(-3.0, -1.0, -0.6780719051126376),
(-3.0, 2.0, 2.0443941193584534),
(-3.0, -2.0, -1.415037499278844),
(-3.0, 5.0, 5.005624549193878),
(-3.0, -5.0, -2.678071905112638),
(-3.0, 5.5, 5.503979426381668),
(-3.0, -5.5, -2.765159418920798),
(-3.0, 0.3, 0.43951081661809654),
(-3.0, -0.3, -0.09349048570305774),
(-3.0, 7.0, 7.001408194392808),
(-3.0, 1e+300, 1e+300),
(-3.0, -1e+300, -3.0),
(-3.0, 5e-324, 0.16992500144231237),
(-3.0, -5e-324, 0.16992500144231237),
(-3.0, 1e-10, 0.16992500153120127),
(-3.0, 3.0, 3.0223678130284544),
(-3.0, -3.0, -2.0),
];
for &(x, y, want) in CASES {
check(
"logaddexp2",
&format!("{x:?}, {y:?}"),
logaddexp2(x, y),
want,
1e-13,
0.0,
);
}
}
#[test]
fn fmod_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32)] = &[
(0.0, 0.0, f32::NAN),
(0.0, -0.0, f32::NAN),
(0.0, 1.0, 0.0),
(0.0, -1.0, 0.0),
(0.0, 2.0, 0.0),
(0.0, -2.0, 0.0),
(0.0, 5.0, 0.0),
(0.0, -5.0, 0.0),
(0.0, 5.5, 0.0),
(0.0, -5.5, 0.0),
(0.0, 0.3, 0.0),
(0.0, -0.3, 0.0),
(0.0, 7.0, 0.0),
(0.0, 1e-10, 0.0),
(0.0, 3.0, 0.0),
(0.0, -3.0, 0.0),
(0.0, 1e+30, 0.0),
(0.0, -1e+30, 0.0),
(0.0, 1e-40, 0.0),
(0.0, 1.0000001, 0.0),
(-0.0, 0.0, f32::NAN),
(-0.0, -0.0, f32::NAN),
(-0.0, 1.0, -0.0),
(-0.0, -1.0, -0.0),
(-0.0, 2.0, -0.0),
(-0.0, -2.0, -0.0),
(-0.0, 5.0, -0.0),
(-0.0, -5.0, -0.0),
(-0.0, 5.5, -0.0),
(-0.0, -5.5, -0.0),
(-0.0, 0.3, -0.0),
(-0.0, -0.3, -0.0),
(-0.0, 7.0, -0.0),
(-0.0, 1e-10, -0.0),
(-0.0, 3.0, -0.0),
(-0.0, -3.0, -0.0),
(-0.0, 1e+30, -0.0),
(-0.0, -1e+30, -0.0),
(-0.0, 1e-40, -0.0),
(-0.0, 1.0000001, -0.0),
(1.0, 0.0, f32::NAN),
(1.0, -0.0, f32::NAN),
(1.0, 1.0, 0.0),
(1.0, -1.0, 0.0),
(1.0, 2.0, 1.0),
(1.0, -2.0, 1.0),
(1.0, 5.0, 1.0),
(1.0, -5.0, 1.0),
(1.0, 5.5, 1.0),
(1.0, -5.5, 1.0),
(1.0, 0.3, 0.099999964),
(1.0, -0.3, 0.099999964),
(1.0, 7.0, 1.0),
(1.0, 1e-10, 4.856822e-11),
(1.0, 3.0, 1.0),
(1.0, -3.0, 1.0),
(1.0, 1e+30, 1.0),
(1.0, -1e+30, 1.0),
(1.0, 1e-40, 8.45e-42),
(1.0, 1.0000001, 1.0),
(-1.0, 0.0, f32::NAN),
(-1.0, -0.0, f32::NAN),
(-1.0, 1.0, -0.0),
(-1.0, -1.0, -0.0),
(-1.0, 2.0, -1.0),
(-1.0, -2.0, -1.0),
(-1.0, 5.0, -1.0),
(-1.0, -5.0, -1.0),
(-1.0, 5.5, -1.0),
(-1.0, -5.5, -1.0),
(-1.0, 0.3, -0.099999964),
(-1.0, -0.3, -0.099999964),
(-1.0, 7.0, -1.0),
(-1.0, 1e-10, -4.856822e-11),
(-1.0, 3.0, -1.0),
(-1.0, -3.0, -1.0),
(-1.0, 1e+30, -1.0),
(-1.0, -1e+30, -1.0),
(-1.0, 1e-40, -8.45e-42),
(-1.0, 1.0000001, -1.0),
(2.0, 0.0, f32::NAN),
(2.0, -0.0, f32::NAN),
(2.0, 1.0, 0.0),
(2.0, -1.0, 0.0),
(2.0, 2.0, 0.0),
(2.0, -2.0, 0.0),
(2.0, 5.0, 2.0),
(2.0, -5.0, 2.0),
(2.0, 5.5, 2.0),
(2.0, -5.5, 2.0),
(2.0, 0.3, 0.19999993),
(2.0, -0.3, 0.19999993),
(2.0, 7.0, 2.0),
(2.0, 1e-10, 9.713644e-11),
(2.0, 3.0, 2.0),
(2.0, -3.0, 2.0),
(2.0, 1e+30, 2.0),
(2.0, -1e+30, 2.0),
(2.0, 1e-40, 1.69e-41),
(2.0, 1.0000001, 0.9999999),
(-2.0, 0.0, f32::NAN),
(-2.0, -0.0, f32::NAN),
(-2.0, 1.0, -0.0),
(-2.0, -1.0, -0.0),
(-2.0, 2.0, -0.0),
(-2.0, -2.0, -0.0),
(-2.0, 5.0, -2.0),
(-2.0, -5.0, -2.0),
(-2.0, 5.5, -2.0),
(-2.0, -5.5, -2.0),
(-2.0, 0.3, -0.19999993),
(-2.0, -0.3, -0.19999993),
(-2.0, 7.0, -2.0),
(-2.0, 1e-10, -9.713644e-11),
(-2.0, 3.0, -2.0),
(-2.0, -3.0, -2.0),
(-2.0, 1e+30, -2.0),
(-2.0, -1e+30, -2.0),
(-2.0, 1e-40, -1.69e-41),
(-2.0, 1.0000001, -0.9999999),
(5.0, 0.0, f32::NAN),
(5.0, -0.0, f32::NAN),
(5.0, 1.0, 0.0),
(5.0, -1.0, 0.0),
(5.0, 2.0, 1.0),
(5.0, -2.0, 1.0),
(5.0, 5.0, 0.0),
(5.0, -5.0, 0.0),
(5.0, 5.5, 5.0),
(5.0, -5.5, 5.0),
(5.0, 0.3, 0.19999981),
(5.0, -0.3, 0.19999981),
(5.0, 7.0, 5.0),
(5.0, 1e-10, 4.2841092e-11),
(5.0, 3.0, 2.0),
(5.0, -3.0, 2.0),
(5.0, 1e+30, 5.0),
(5.0, -1e+30, 5.0),
(5.0, 1e-40, 4.2249e-41),
(5.0, 1.0000001, 0.9999995),
(-5.0, 0.0, f32::NAN),
(-5.0, -0.0, f32::NAN),
(-5.0, 1.0, -0.0),
(-5.0, -1.0, -0.0),
(-5.0, 2.0, -1.0),
(-5.0, -2.0, -1.0),
(-5.0, 5.0, -0.0),
(-5.0, -5.0, -0.0),
(-5.0, 5.5, -5.0),
(-5.0, -5.5, -5.0),
(-5.0, 0.3, -0.19999981),
(-5.0, -0.3, -0.19999981),
(-5.0, 7.0, -5.0),
(-5.0, 1e-10, -4.2841092e-11),
(-5.0, 3.0, -2.0),
(-5.0, -3.0, -2.0),
(-5.0, 1e+30, -5.0),
(-5.0, -1e+30, -5.0),
(-5.0, 1e-40, -4.2249e-41),
(-5.0, 1.0000001, -0.9999995),
(5.5, 0.0, f32::NAN),
(5.5, -0.0, f32::NAN),
(5.5, 1.0, 0.5),
(5.5, -1.0, 0.5),
(5.5, 2.0, 1.5),
(5.5, -2.0, 1.5),
(5.5, 5.0, 0.5),
(5.5, -5.0, 0.5),
(5.5, 5.5, 0.0),
(5.5, -5.5, 0.0),
(5.5, 0.3, 0.099999785),
(5.5, -0.3, 0.099999785),
(5.5, 7.0, 5.5),
(5.5, 1e-10, 6.71252e-11),
(5.5, 3.0, 2.5),
(5.5, -3.0, 2.5),
(5.5, 1e+30, 5.5),
(5.5, -1e+30, 5.5),
(5.5, 1e-40, 9.6474e-41),
(5.5, 1.0000001, 0.4999994),
(-5.5, 0.0, f32::NAN),
(-5.5, -0.0, f32::NAN),
(-5.5, 1.0, -0.5),
(-5.5, -1.0, -0.5),
(-5.5, 2.0, -1.5),
(-5.5, -2.0, -1.5),
(-5.5, 5.0, -0.5),
(-5.5, -5.0, -0.5),
(-5.5, 5.5, -0.0),
(-5.5, -5.5, -0.0),
(-5.5, 0.3, -0.099999785),
(-5.5, -0.3, -0.099999785),
(-5.5, 7.0, -5.5),
(-5.5, 1e-10, -6.71252e-11),
(-5.5, 3.0, -2.5),
(-5.5, -3.0, -2.5),
(-5.5, 1e+30, -5.5),
(-5.5, -1e+30, -5.5),
(-5.5, 1e-40, -9.6474e-41),
(-5.5, 1.0000001, -0.4999994),
(0.3, 0.0, f32::NAN),
(0.3, -0.0, f32::NAN),
(0.3, 1.0, 0.3),
(0.3, -1.0, 0.3),
(0.3, 2.0, 0.3),
(0.3, -2.0, 0.3),
(0.3, 5.0, 0.3),
(0.3, -5.0, 0.3),
(0.3, 5.5, 0.3),
(0.3, -5.5, 0.3),
(0.3, 0.3, 0.0),
(0.3, -0.3, 0.0),
(0.3, 7.0, 0.3),
(0.3, 1e-10, 1.5499262e-11),
(0.3, 3.0, 0.3),
(0.3, -3.0, 0.3),
(0.3, 1e+30, 0.3),
(0.3, -1e+30, 0.3),
(0.3, 1e-40, 6.9034e-41),
(0.3, 1.0000001, 0.3),
(-0.3, 0.0, f32::NAN),
(-0.3, -0.0, f32::NAN),
(-0.3, 1.0, -0.3),
(-0.3, -1.0, -0.3),
(-0.3, 2.0, -0.3),
(-0.3, -2.0, -0.3),
(-0.3, 5.0, -0.3),
(-0.3, -5.0, -0.3),
(-0.3, 5.5, -0.3),
(-0.3, -5.5, -0.3),
(-0.3, 0.3, -0.0),
(-0.3, -0.3, -0.0),
(-0.3, 7.0, -0.3),
(-0.3, 1e-10, -1.5499262e-11),
(-0.3, 3.0, -0.3),
(-0.3, -3.0, -0.3),
(-0.3, 1e+30, -0.3),
(-0.3, -1e+30, -0.3),
(-0.3, 1e-40, -6.9034e-41),
(-0.3, 1.0000001, -0.3),
(7.0, 0.0, f32::NAN),
(7.0, -0.0, f32::NAN),
(7.0, 1.0, 0.0),
(7.0, -1.0, 0.0),
(7.0, 2.0, 1.0),
(7.0, -2.0, 1.0),
(7.0, 5.0, 2.0),
(7.0, -5.0, 2.0),
(7.0, 5.5, 1.5),
(7.0, -5.5, 1.5),
(7.0, 0.3, 0.099999726),
(7.0, -0.3, 0.099999726),
(7.0, 7.0, 0.0),
(7.0, 1e-10, 3.9977528e-11),
(7.0, 3.0, 1.0),
(7.0, -3.0, 1.0),
(7.0, 1e+30, 7.0),
(7.0, -1e+30, 7.0),
(7.0, 1e-40, 5.9149e-41),
(7.0, 1.0000001, 0.9999993),
(1e-10, 0.0, f32::NAN),
(1e-10, -0.0, f32::NAN),
(1e-10, 1.0, 1e-10),
(1e-10, -1.0, 1e-10),
(1e-10, 2.0, 1e-10),
(1e-10, -2.0, 1e-10),
(1e-10, 5.0, 1e-10),
(1e-10, -5.0, 1e-10),
(1e-10, 5.5, 1e-10),
(1e-10, -5.5, 1e-10),
(1e-10, 0.3, 1e-10),
(1e-10, -0.3, 1e-10),
(1e-10, 7.0, 1e-10),
(1e-10, 1e-10, 0.0),
(1e-10, 3.0, 1e-10),
(1e-10, -3.0, 1e-10),
(1e-10, 1e+30, 1e-10),
(1e-10, -1e+30, 1e-10),
(1e-10, 1e-40, 5.3815e-41),
(1e-10, 1.0000001, 1e-10),
(3.0, 0.0, f32::NAN),
(3.0, -0.0, f32::NAN),
(3.0, 1.0, 0.0),
(3.0, -1.0, 0.0),
(3.0, 2.0, 1.0),
(3.0, -2.0, 1.0),
(3.0, 5.0, 3.0),
(3.0, -5.0, 3.0),
(3.0, 5.5, 3.0),
(3.0, -5.5, 3.0),
(3.0, 0.3, 0.2999999),
(3.0, -0.3, 0.2999999),
(3.0, 7.0, 3.0),
(3.0, 1e-10, 4.5704655e-11),
(3.0, 3.0, 0.0),
(3.0, -3.0, 0.0),
(3.0, 1e+30, 3.0),
(3.0, -1e+30, 3.0),
(3.0, 1e-40, 2.535e-41),
(3.0, 1.0000001, 0.99999976),
(-3.0, 0.0, f32::NAN),
(-3.0, -0.0, f32::NAN),
(-3.0, 1.0, -0.0),
(-3.0, -1.0, -0.0),
(-3.0, 2.0, -1.0),
(-3.0, -2.0, -1.0),
(-3.0, 5.0, -3.0),
(-3.0, -5.0, -3.0),
(-3.0, 5.5, -3.0),
(-3.0, -5.5, -3.0),
(-3.0, 0.3, -0.2999999),
(-3.0, -0.3, -0.2999999),
(-3.0, 7.0, -3.0),
(-3.0, 1e-10, -4.5704655e-11),
(-3.0, 3.0, -0.0),
(-3.0, -3.0, -0.0),
(-3.0, 1e+30, -3.0),
(-3.0, -1e+30, -3.0),
(-3.0, 1e-40, -2.535e-41),
(-3.0, 1.0000001, -0.99999976),
(1e+30, 0.0, f32::NAN),
(1e+30, -0.0, f32::NAN),
(1e+30, 1.0, 0.0),
(1e+30, -1.0, 0.0),
(1e+30, 2.0, 0.0),
(1e+30, -2.0, 0.0),
(1e+30, 5.0, 0.0),
(1e+30, -5.0, 0.0),
(1e+30, 5.5, 4.0),
(1e+30, -5.5, 4.0),
(1e+30, 0.3, 0.004301071),
(1e+30, -0.3, 0.004301071),
(1e+30, 7.0, 1.0),
(1e+30, 1e-10, 3.899825e-12),
(1e+30, 3.0, 0.0),
(1e+30, -3.0, 0.0),
(1e+30, 1e+30, 0.0),
(1e+30, -1e+30, 0.0),
(1e+30, 1e-40, 7.121e-42),
(1e+30, 1.0000001, 0.9483708),
(-1e+30, 0.0, f32::NAN),
(-1e+30, -0.0, f32::NAN),
(-1e+30, 1.0, -0.0),
(-1e+30, -1.0, -0.0),
(-1e+30, 2.0, -0.0),
(-1e+30, -2.0, -0.0),
(-1e+30, 5.0, -0.0),
(-1e+30, -5.0, -0.0),
(-1e+30, 5.5, -4.0),
(-1e+30, -5.5, -4.0),
(-1e+30, 0.3, -0.004301071),
(-1e+30, -0.3, -0.004301071),
(-1e+30, 7.0, -1.0),
(-1e+30, 1e-10, -3.899825e-12),
(-1e+30, 3.0, -0.0),
(-1e+30, -3.0, -0.0),
(-1e+30, 1e+30, -0.0),
(-1e+30, -1e+30, -0.0),
(-1e+30, 1e-40, -7.121e-42),
(-1e+30, 1.0000001, -0.9483708),
(1e-40, 0.0, f32::NAN),
(1e-40, -0.0, f32::NAN),
(1e-40, 1.0, 1e-40),
(1e-40, -1.0, 1e-40),
(1e-40, 2.0, 1e-40),
(1e-40, -2.0, 1e-40),
(1e-40, 5.0, 1e-40),
(1e-40, -5.0, 1e-40),
(1e-40, 5.5, 1e-40),
(1e-40, -5.5, 1e-40),
(1e-40, 0.3, 1e-40),
(1e-40, -0.3, 1e-40),
(1e-40, 7.0, 1e-40),
(1e-40, 1e-10, 1e-40),
(1e-40, 3.0, 1e-40),
(1e-40, -3.0, 1e-40),
(1e-40, 1e+30, 1e-40),
(1e-40, -1e+30, 1e-40),
(1e-40, 1e-40, 0.0),
(1e-40, 1.0000001, 1e-40),
(1.0000001, 0.0, f32::NAN),
(1.0000001, -0.0, f32::NAN),
(1.0000001, 1.0, 1.1920929e-07),
(1.0000001, -1.0, 1.1920929e-07),
(1.0000001, 2.0, 1.0000001),
(1.0000001, -2.0, 1.0000001),
(1.0000001, 5.0, 1.0000001),
(1.0000001, -5.0, 1.0000001),
(1.0000001, 5.5, 1.0000001),
(1.0000001, -5.5, 1.0000001),
(1.0000001, 0.3, 0.10000008),
(1.0000001, -0.3, 0.10000008),
(1.0000001, 7.0, 1.0000001),
(1.0000001, 1e-10, 5.7856178e-11),
(1.0000001, 3.0, 1.0000001),
(1.0000001, -3.0, 1.0000001),
(1.0000001, 1e+30, 1.0000001),
(1.0000001, -1e+30, 1.0000001),
(1.0000001, 1e-40, 7.3439e-41),
(1.0000001, 1.0000001, 0.0),
];
for &(x, y, want) in CASES {
check("fmod", &format!("{x:?}, {y:?}"), fmod(x, y), want, 0.0, 0.0);
}
}
#[test]
fn remainder_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32)] = &[
(0.0, 0.0, f32::NAN),
(0.0, -0.0, f32::NAN),
(0.0, 1.0, 0.0),
(0.0, -1.0, -0.0),
(0.0, 2.0, 0.0),
(0.0, -2.0, -0.0),
(0.0, 5.0, 0.0),
(0.0, -5.0, -0.0),
(0.0, 5.5, 0.0),
(0.0, -5.5, -0.0),
(0.0, 0.3, 0.0),
(0.0, -0.3, -0.0),
(0.0, 7.0, 0.0),
(0.0, 1e-10, 0.0),
(0.0, 3.0, 0.0),
(0.0, -3.0, -0.0),
(0.0, 1e+30, 0.0),
(0.0, -1e+30, -0.0),
(0.0, 1e-40, 0.0),
(0.0, 1.0000001, 0.0),
(-0.0, 0.0, f32::NAN),
(-0.0, -0.0, f32::NAN),
(-0.0, 1.0, 0.0),
(-0.0, -1.0, -0.0),
(-0.0, 2.0, 0.0),
(-0.0, -2.0, -0.0),
(-0.0, 5.0, 0.0),
(-0.0, -5.0, -0.0),
(-0.0, 5.5, 0.0),
(-0.0, -5.5, -0.0),
(-0.0, 0.3, 0.0),
(-0.0, -0.3, -0.0),
(-0.0, 7.0, 0.0),
(-0.0, 1e-10, 0.0),
(-0.0, 3.0, 0.0),
(-0.0, -3.0, -0.0),
(-0.0, 1e+30, 0.0),
(-0.0, -1e+30, -0.0),
(-0.0, 1e-40, 0.0),
(-0.0, 1.0000001, 0.0),
(1.0, 0.0, f32::NAN),
(1.0, -0.0, f32::NAN),
(1.0, 1.0, 0.0),
(1.0, -1.0, -0.0),
(1.0, 2.0, 1.0),
(1.0, -2.0, -1.0),
(1.0, 5.0, 1.0),
(1.0, -5.0, -4.0),
(1.0, 5.5, 1.0),
(1.0, -5.5, -4.5),
(1.0, 0.3, 0.099999964),
(1.0, -0.3, -0.20000005),
(1.0, 7.0, 1.0),
(1.0, 1e-10, 4.856822e-11),
(1.0, 3.0, 1.0),
(1.0, -3.0, -2.0),
(1.0, 1e+30, 1.0),
(1.0, -1e+30, -1e+30),
(1.0, 1e-40, 8.45e-42),
(1.0, 1.0000001, 1.0),
(-1.0, 0.0, f32::NAN),
(-1.0, -0.0, f32::NAN),
(-1.0, 1.0, 0.0),
(-1.0, -1.0, -0.0),
(-1.0, 2.0, 1.0),
(-1.0, -2.0, -1.0),
(-1.0, 5.0, 4.0),
(-1.0, -5.0, -1.0),
(-1.0, 5.5, 4.5),
(-1.0, -5.5, -1.0),
(-1.0, 0.3, 0.20000005),
(-1.0, -0.3, -0.099999964),
(-1.0, 7.0, 6.0),
(-1.0, 1e-10, 5.1431782e-11),
(-1.0, 3.0, 2.0),
(-1.0, -3.0, -1.0),
(-1.0, 1e+30, 1e+30),
(-1.0, -1e+30, -1.0),
(-1.0, 1e-40, 9.155e-41),
(-1.0, 1.0000001, 1.1920929e-07),
(2.0, 0.0, f32::NAN),
(2.0, -0.0, f32::NAN),
(2.0, 1.0, 0.0),
(2.0, -1.0, -0.0),
(2.0, 2.0, 0.0),
(2.0, -2.0, -0.0),
(2.0, 5.0, 2.0),
(2.0, -5.0, -3.0),
(2.0, 5.5, 2.0),
(2.0, -5.5, -3.5),
(2.0, 0.3, 0.19999993),
(2.0, -0.3, -0.10000008),
(2.0, 7.0, 2.0),
(2.0, 1e-10, 9.713644e-11),
(2.0, 3.0, 2.0),
(2.0, -3.0, -1.0),
(2.0, 1e+30, 2.0),
(2.0, -1e+30, -1e+30),
(2.0, 1e-40, 1.69e-41),
(2.0, 1.0000001, 0.9999999),
(-2.0, 0.0, f32::NAN),
(-2.0, -0.0, f32::NAN),
(-2.0, 1.0, 0.0),
(-2.0, -1.0, -0.0),
(-2.0, 2.0, 0.0),
(-2.0, -2.0, -0.0),
(-2.0, 5.0, 3.0),
(-2.0, -5.0, -2.0),
(-2.0, 5.5, 3.5),
(-2.0, -5.5, -2.0),
(-2.0, 0.3, 0.10000008),
(-2.0, -0.3, -0.19999993),
(-2.0, 7.0, 5.0),
(-2.0, 1e-10, 2.8635636e-12),
(-2.0, 3.0, 1.0),
(-2.0, -3.0, -2.0),
(-2.0, 1e+30, 1e+30),
(-2.0, -1e+30, -2.0),
(-2.0, 1e-40, 8.31e-41),
(-2.0, 1.0000001, 2.3841858e-07),
(5.0, 0.0, f32::NAN),
(5.0, -0.0, f32::NAN),
(5.0, 1.0, 0.0),
(5.0, -1.0, -0.0),
(5.0, 2.0, 1.0),
(5.0, -2.0, -1.0),
(5.0, 5.0, 0.0),
(5.0, -5.0, -0.0),
(5.0, 5.5, 5.0),
(5.0, -5.5, -0.5),
(5.0, 0.3, 0.19999981),
(5.0, -0.3, -0.1000002),
(5.0, 7.0, 5.0),
(5.0, 1e-10, 4.2841092e-11),
(5.0, 3.0, 2.0),
(5.0, -3.0, -1.0),
(5.0, 1e+30, 5.0),
(5.0, -1e+30, -1e+30),
(5.0, 1e-40, 4.2249e-41),
(5.0, 1.0000001, 0.9999995),
(-5.0, 0.0, f32::NAN),
(-5.0, -0.0, f32::NAN),
(-5.0, 1.0, 0.0),
(-5.0, -1.0, -0.0),
(-5.0, 2.0, 1.0),
(-5.0, -2.0, -1.0),
(-5.0, 5.0, 0.0),
(-5.0, -5.0, -0.0),
(-5.0, 5.5, 0.5),
(-5.0, -5.5, -5.0),
(-5.0, 0.3, 0.1000002),
(-5.0, -0.3, -0.19999981),
(-5.0, 7.0, 2.0),
(-5.0, 1e-10, 5.715891e-11),
(-5.0, 3.0, 1.0),
(-5.0, -3.0, -2.0),
(-5.0, 1e+30, 1e+30),
(-5.0, -1e+30, -5.0),
(-5.0, 1e-40, 5.775e-41),
(-5.0, 1.0000001, 5.9604645e-07),
(5.5, 0.0, f32::NAN),
(5.5, -0.0, f32::NAN),
(5.5, 1.0, 0.5),
(5.5, -1.0, -0.5),
(5.5, 2.0, 1.5),
(5.5, -2.0, -0.5),
(5.5, 5.0, 0.5),
(5.5, -5.0, -4.5),
(5.5, 5.5, 0.0),
(5.5, -5.5, -0.0),
(5.5, 0.3, 0.099999785),
(5.5, -0.3, -0.20000023),
(5.5, 7.0, 5.5),
(5.5, 1e-10, 6.71252e-11),
(5.5, 3.0, 2.5),
(5.5, -3.0, -0.5),
(5.5, 1e+30, 5.5),
(5.5, -1e+30, -1e+30),
(5.5, 1e-40, 9.6474e-41),
(5.5, 1.0000001, 0.4999994),
(-5.5, 0.0, f32::NAN),
(-5.5, -0.0, f32::NAN),
(-5.5, 1.0, 0.5),
(-5.5, -1.0, -0.5),
(-5.5, 2.0, 0.5),
(-5.5, -2.0, -1.5),
(-5.5, 5.0, 4.5),
(-5.5, -5.0, -0.5),
(-5.5, 5.5, 0.0),
(-5.5, -5.5, -0.0),
(-5.5, 0.3, 0.20000023),
(-5.5, -0.3, -0.099999785),
(-5.5, 7.0, 1.5),
(-5.5, 1e-10, 3.28748e-11),
(-5.5, 3.0, 0.5),
(-5.5, -3.0, -2.5),
(-5.5, 1e+30, 1e+30),
(-5.5, -1e+30, -5.5),
(-5.5, 1e-40, 3.526e-42),
(-5.5, 1.0000001, 0.5000007),
(0.3, 0.0, f32::NAN),
(0.3, -0.0, f32::NAN),
(0.3, 1.0, 0.3),
(0.3, -1.0, -0.7),
(0.3, 2.0, 0.3),
(0.3, -2.0, -1.7),
(0.3, 5.0, 0.3),
(0.3, -5.0, -4.7),
(0.3, 5.5, 0.3),
(0.3, -5.5, -5.2),
(0.3, 0.3, 0.0),
(0.3, -0.3, -0.0),
(0.3, 7.0, 0.3),
(0.3, 1e-10, 1.5499262e-11),
(0.3, 3.0, 0.3),
(0.3, -3.0, -2.7),
(0.3, 1e+30, 0.3),
(0.3, -1e+30, -1e+30),
(0.3, 1e-40, 6.9034e-41),
(0.3, 1.0000001, 0.3),
(-0.3, 0.0, f32::NAN),
(-0.3, -0.0, f32::NAN),
(-0.3, 1.0, 0.7),
(-0.3, -1.0, -0.3),
(-0.3, 2.0, 1.7),
(-0.3, -2.0, -0.3),
(-0.3, 5.0, 4.7),
(-0.3, -5.0, -0.3),
(-0.3, 5.5, 5.2),
(-0.3, -5.5, -0.3),
(-0.3, 0.3, 0.0),
(-0.3, -0.3, -0.0),
(-0.3, 7.0, 6.7),
(-0.3, 1e-10, 8.450074e-11),
(-0.3, 3.0, 2.7),
(-0.3, -3.0, -0.3),
(-0.3, 1e+30, 1e+30),
(-0.3, -1e+30, -0.3),
(-0.3, 1e-40, 3.0966e-41),
(-0.3, 1.0000001, 0.7000001),
(7.0, 0.0, f32::NAN),
(7.0, -0.0, f32::NAN),
(7.0, 1.0, 0.0),
(7.0, -1.0, -0.0),
(7.0, 2.0, 1.0),
(7.0, -2.0, -1.0),
(7.0, 5.0, 2.0),
(7.0, -5.0, -3.0),
(7.0, 5.5, 1.5),
(7.0, -5.5, -4.0),
(7.0, 0.3, 0.099999726),
(7.0, -0.3, -0.20000029),
(7.0, 7.0, 0.0),
(7.0, 1e-10, 3.9977528e-11),
(7.0, 3.0, 1.0),
(7.0, -3.0, -2.0),
(7.0, 1e+30, 7.0),
(7.0, -1e+30, -1e+30),
(7.0, 1e-40, 5.9149e-41),
(7.0, 1.0000001, 0.9999993),
(1e-10, 0.0, f32::NAN),
(1e-10, -0.0, f32::NAN),
(1e-10, 1.0, 1e-10),
(1e-10, -1.0, -1.0),
(1e-10, 2.0, 1e-10),
(1e-10, -2.0, -2.0),
(1e-10, 5.0, 1e-10),
(1e-10, -5.0, -5.0),
(1e-10, 5.5, 1e-10),
(1e-10, -5.5, -5.5),
(1e-10, 0.3, 1e-10),
(1e-10, -0.3, -0.3),
(1e-10, 7.0, 1e-10),
(1e-10, 1e-10, 0.0),
(1e-10, 3.0, 1e-10),
(1e-10, -3.0, -3.0),
(1e-10, 1e+30, 1e-10),
(1e-10, -1e+30, -1e+30),
(1e-10, 1e-40, 5.3815e-41),
(1e-10, 1.0000001, 1e-10),
(3.0, 0.0, f32::NAN),
(3.0, -0.0, f32::NAN),
(3.0, 1.0, 0.0),
(3.0, -1.0, -0.0),
(3.0, 2.0, 1.0),
(3.0, -2.0, -1.0),
(3.0, 5.0, 3.0),
(3.0, -5.0, -2.0),
(3.0, 5.5, 3.0),
(3.0, -5.5, -2.5),
(3.0, 0.3, 0.2999999),
(3.0, -0.3, -1.1920929e-07),
(3.0, 7.0, 3.0),
(3.0, 1e-10, 4.5704655e-11),
(3.0, 3.0, 0.0),
(3.0, -3.0, -0.0),
(3.0, 1e+30, 3.0),
(3.0, -1e+30, -1e+30),
(3.0, 1e-40, 2.535e-41),
(3.0, 1.0000001, 0.99999976),
(-3.0, 0.0, f32::NAN),
(-3.0, -0.0, f32::NAN),
(-3.0, 1.0, 0.0),
(-3.0, -1.0, -0.0),
(-3.0, 2.0, 1.0),
(-3.0, -2.0, -1.0),
(-3.0, 5.0, 2.0),
(-3.0, -5.0, -3.0),
(-3.0, 5.5, 2.5),
(-3.0, -5.5, -3.0),
(-3.0, 0.3, 1.1920929e-07),
(-3.0, -0.3, -0.2999999),
(-3.0, 7.0, 4.0),
(-3.0, 1e-10, 5.4295346e-11),
(-3.0, 3.0, 0.0),
(-3.0, -3.0, -0.0),
(-3.0, 1e+30, 1e+30),
(-3.0, -1e+30, -3.0),
(-3.0, 1e-40, 7.465e-41),
(-3.0, 1.0000001, 3.5762787e-07),
(1e+30, 0.0, f32::NAN),
(1e+30, -0.0, f32::NAN),
(1e+30, 1.0, 0.0),
(1e+30, -1.0, -0.0),
(1e+30, 2.0, 0.0),
(1e+30, -2.0, -0.0),
(1e+30, 5.0, 0.0),
(1e+30, -5.0, -0.0),
(1e+30, 5.5, 4.0),
(1e+30, -5.5, -1.5),
(1e+30, 0.3, 0.004301071),
(1e+30, -0.3, -0.29569894),
(1e+30, 7.0, 1.0),
(1e+30, 1e-10, 3.899825e-12),
(1e+30, 3.0, 0.0),
(1e+30, -3.0, -0.0),
(1e+30, 1e+30, 0.0),
(1e+30, -1e+30, -0.0),
(1e+30, 1e-40, 7.121e-42),
(1e+30, 1.0000001, 0.9483708),
(-1e+30, 0.0, f32::NAN),
(-1e+30, -0.0, f32::NAN),
(-1e+30, 1.0, 0.0),
(-1e+30, -1.0, -0.0),
(-1e+30, 2.0, 0.0),
(-1e+30, -2.0, -0.0),
(-1e+30, 5.0, 0.0),
(-1e+30, -5.0, -0.0),
(-1e+30, 5.5, 1.5),
(-1e+30, -5.5, -4.0),
(-1e+30, 0.3, 0.29569894),
(-1e+30, -0.3, -0.004301071),
(-1e+30, 7.0, 6.0),
(-1e+30, 1e-10, 9.6100176e-11),
(-1e+30, 3.0, 0.0),
(-1e+30, -3.0, -0.0),
(-1e+30, 1e+30, 0.0),
(-1e+30, -1e+30, -0.0),
(-1e+30, 1e-40, 9.2878e-41),
(-1e+30, 1.0000001, 0.051629305),
(1e-40, 0.0, f32::NAN),
(1e-40, -0.0, f32::NAN),
(1e-40, 1.0, 1e-40),
(1e-40, -1.0, -1.0),
(1e-40, 2.0, 1e-40),
(1e-40, -2.0, -2.0),
(1e-40, 5.0, 1e-40),
(1e-40, -5.0, -5.0),
(1e-40, 5.5, 1e-40),
(1e-40, -5.5, -5.5),
(1e-40, 0.3, 1e-40),
(1e-40, -0.3, -0.3),
(1e-40, 7.0, 1e-40),
(1e-40, 1e-10, 1e-40),
(1e-40, 3.0, 1e-40),
(1e-40, -3.0, -3.0),
(1e-40, 1e+30, 1e-40),
(1e-40, -1e+30, -1e+30),
(1e-40, 1e-40, 0.0),
(1e-40, 1.0000001, 1e-40),
(1.0000001, 0.0, f32::NAN),
(1.0000001, -0.0, f32::NAN),
(1.0000001, 1.0, 1.1920929e-07),
(1.0000001, -1.0, -0.9999999),
(1.0000001, 2.0, 1.0000001),
(1.0000001, -2.0, -0.9999999),
(1.0000001, 5.0, 1.0000001),
(1.0000001, -5.0, -4.0),
(1.0000001, 5.5, 1.0000001),
(1.0000001, -5.5, -4.5),
(1.0000001, 0.3, 0.10000008),
(1.0000001, -0.3, -0.19999993),
(1.0000001, 7.0, 1.0000001),
(1.0000001, 1e-10, 5.7856178e-11),
(1.0000001, 3.0, 1.0000001),
(1.0000001, -3.0, -1.9999999),
(1.0000001, 1e+30, 1.0000001),
(1.0000001, -1e+30, -1e+30),
(1.0000001, 1e-40, 7.3439e-41),
(1.0000001, 1.0000001, 0.0),
];
for &(x, y, want) in CASES {
check(
"remainder",
&format!("{x:?}, {y:?}"),
remainder(x, y),
want,
0.0,
0.0,
);
}
}
#[test]
fn floor_divide_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32)] = &[
(0.0, 0.0, f32::NAN),
(0.0, -0.0, f32::NAN),
(0.0, 1.0, 0.0),
(0.0, -1.0, -0.0),
(0.0, 2.0, 0.0),
(0.0, -2.0, -0.0),
(0.0, 5.0, 0.0),
(0.0, -5.0, -0.0),
(0.0, 5.5, 0.0),
(0.0, -5.5, -0.0),
(0.0, 0.3, 0.0),
(0.0, -0.3, -0.0),
(0.0, 7.0, 0.0),
(0.0, 1e-10, 0.0),
(0.0, 3.0, 0.0),
(0.0, -3.0, -0.0),
(0.0, 1e+30, 0.0),
(0.0, -1e+30, -0.0),
(0.0, 1e-40, 0.0),
(0.0, 1.0000001, 0.0),
(-0.0, 0.0, f32::NAN),
(-0.0, -0.0, f32::NAN),
(-0.0, 1.0, -0.0),
(-0.0, -1.0, 0.0),
(-0.0, 2.0, -0.0),
(-0.0, -2.0, 0.0),
(-0.0, 5.0, -0.0),
(-0.0, -5.0, 0.0),
(-0.0, 5.5, -0.0),
(-0.0, -5.5, 0.0),
(-0.0, 0.3, -0.0),
(-0.0, -0.3, 0.0),
(-0.0, 7.0, -0.0),
(-0.0, 1e-10, -0.0),
(-0.0, 3.0, -0.0),
(-0.0, -3.0, 0.0),
(-0.0, 1e+30, -0.0),
(-0.0, -1e+30, 0.0),
(-0.0, 1e-40, -0.0),
(-0.0, 1.0000001, -0.0),
(1.0, 0.0, f32::INFINITY),
(1.0, -0.0, f32::NEG_INFINITY),
(1.0, 1.0, 1.0),
(1.0, -1.0, -1.0),
(1.0, 2.0, 0.0),
(1.0, -2.0, -1.0),
(1.0, 5.0, 0.0),
(1.0, -5.0, -1.0),
(1.0, 5.5, 0.0),
(1.0, -5.5, -1.0),
(1.0, 0.3, 3.0),
(1.0, -0.3, -4.0),
(1.0, 7.0, 0.0),
(1.0, 1e-10, 1e+10),
(1.0, 3.0, 0.0),
(1.0, -3.0, -1.0),
(1.0, 1e+30, 0.0),
(1.0, -1e+30, -1.0),
(1.0, 1e-40, f32::INFINITY),
(1.0, 1.0000001, 0.0),
(-1.0, 0.0, f32::NEG_INFINITY),
(-1.0, -0.0, f32::INFINITY),
(-1.0, 1.0, -1.0),
(-1.0, -1.0, 1.0),
(-1.0, 2.0, -1.0),
(-1.0, -2.0, 0.0),
(-1.0, 5.0, -1.0),
(-1.0, -5.0, 0.0),
(-1.0, 5.5, -1.0),
(-1.0, -5.5, 0.0),
(-1.0, 0.3, -4.0),
(-1.0, -0.3, 3.0),
(-1.0, 7.0, -1.0),
(-1.0, 1e-10, -1e+10),
(-1.0, 3.0, -1.0),
(-1.0, -3.0, 0.0),
(-1.0, 1e+30, -1.0),
(-1.0, -1e+30, 0.0),
(-1.0, 1e-40, f32::NEG_INFINITY),
(-1.0, 1.0000001, -1.0),
(2.0, 0.0, f32::INFINITY),
(2.0, -0.0, f32::NEG_INFINITY),
(2.0, 1.0, 2.0),
(2.0, -1.0, -2.0),
(2.0, 2.0, 1.0),
(2.0, -2.0, -1.0),
(2.0, 5.0, 0.0),
(2.0, -5.0, -1.0),
(2.0, 5.5, 0.0),
(2.0, -5.5, -1.0),
(2.0, 0.3, 6.0),
(2.0, -0.3, -7.0),
(2.0, 7.0, 0.0),
(2.0, 1e-10, 2e+10),
(2.0, 3.0, 0.0),
(2.0, -3.0, -1.0),
(2.0, 1e+30, 0.0),
(2.0, -1e+30, -1.0),
(2.0, 1e-40, f32::INFINITY),
(2.0, 1.0000001, 1.0),
(-2.0, 0.0, f32::NEG_INFINITY),
(-2.0, -0.0, f32::INFINITY),
(-2.0, 1.0, -2.0),
(-2.0, -1.0, 2.0),
(-2.0, 2.0, -1.0),
(-2.0, -2.0, 1.0),
(-2.0, 5.0, -1.0),
(-2.0, -5.0, 0.0),
(-2.0, 5.5, -1.0),
(-2.0, -5.5, 0.0),
(-2.0, 0.3, -7.0),
(-2.0, -0.3, 6.0),
(-2.0, 7.0, -1.0),
(-2.0, 1e-10, -2e+10),
(-2.0, 3.0, -1.0),
(-2.0, -3.0, 0.0),
(-2.0, 1e+30, -1.0),
(-2.0, -1e+30, 0.0),
(-2.0, 1e-40, f32::NEG_INFINITY),
(-2.0, 1.0000001, -2.0),
(5.0, 0.0, f32::INFINITY),
(5.0, -0.0, f32::NEG_INFINITY),
(5.0, 1.0, 5.0),
(5.0, -1.0, -5.0),
(5.0, 2.0, 2.0),
(5.0, -2.0, -3.0),
(5.0, 5.0, 1.0),
(5.0, -5.0, -1.0),
(5.0, 5.5, 0.0),
(5.0, -5.5, -1.0),
(5.0, 0.3, 16.0),
(5.0, -0.3, -17.0),
(5.0, 7.0, 0.0),
(5.0, 1e-10, 5e+10),
(5.0, 3.0, 1.0),
(5.0, -3.0, -2.0),
(5.0, 1e+30, 0.0),
(5.0, -1e+30, -1.0),
(5.0, 1e-40, f32::INFINITY),
(5.0, 1.0000001, 4.0),
(-5.0, 0.0, f32::NEG_INFINITY),
(-5.0, -0.0, f32::INFINITY),
(-5.0, 1.0, -5.0),
(-5.0, -1.0, 5.0),
(-5.0, 2.0, -3.0),
(-5.0, -2.0, 2.0),
(-5.0, 5.0, -1.0),
(-5.0, -5.0, 1.0),
(-5.0, 5.5, -1.0),
(-5.0, -5.5, 0.0),
(-5.0, 0.3, -17.0),
(-5.0, -0.3, 16.0),
(-5.0, 7.0, -1.0),
(-5.0, 1e-10, -5e+10),
(-5.0, 3.0, -2.0),
(-5.0, -3.0, 1.0),
(-5.0, 1e+30, -1.0),
(-5.0, -1e+30, 0.0),
(-5.0, 1e-40, f32::NEG_INFINITY),
(-5.0, 1.0000001, -5.0),
(5.5, 0.0, f32::INFINITY),
(5.5, -0.0, f32::NEG_INFINITY),
(5.5, 1.0, 5.0),
(5.5, -1.0, -6.0),
(5.5, 2.0, 2.0),
(5.5, -2.0, -3.0),
(5.5, 5.0, 1.0),
(5.5, -5.0, -2.0),
(5.5, 5.5, 1.0),
(5.5, -5.5, -1.0),
(5.5, 0.3, 18.0),
(5.5, -0.3, -19.0),
(5.5, 7.0, 0.0),
(5.5, 1e-10, 5.5e+10),
(5.5, 3.0, 1.0),
(5.5, -3.0, -2.0),
(5.5, 1e+30, 0.0),
(5.5, -1e+30, -1.0),
(5.5, 1e-40, f32::INFINITY),
(5.5, 1.0000001, 5.0),
(-5.5, 0.0, f32::NEG_INFINITY),
(-5.5, -0.0, f32::INFINITY),
(-5.5, 1.0, -6.0),
(-5.5, -1.0, 5.0),
(-5.5, 2.0, -3.0),
(-5.5, -2.0, 2.0),
(-5.5, 5.0, -2.0),
(-5.5, -5.0, 1.0),
(-5.5, 5.5, -1.0),
(-5.5, -5.5, 1.0),
(-5.5, 0.3, -19.0),
(-5.5, -0.3, 18.0),
(-5.5, 7.0, -1.0),
(-5.5, 1e-10, -5.5e+10),
(-5.5, 3.0, -2.0),
(-5.5, -3.0, 1.0),
(-5.5, 1e+30, -1.0),
(-5.5, -1e+30, 0.0),
(-5.5, 1e-40, f32::NEG_INFINITY),
(-5.5, 1.0000001, -6.0),
(0.3, 0.0, f32::INFINITY),
(0.3, -0.0, f32::NEG_INFINITY),
(0.3, 1.0, 0.0),
(0.3, -1.0, -1.0),
(0.3, 2.0, 0.0),
(0.3, -2.0, -1.0),
(0.3, 5.0, 0.0),
(0.3, -5.0, -1.0),
(0.3, 5.5, 0.0),
(0.3, -5.5, -1.0),
(0.3, 0.3, 1.0),
(0.3, -0.3, -1.0),
(0.3, 7.0, 0.0),
(0.3, 1e-10, 3e+09),
(0.3, 3.0, 0.0),
(0.3, -3.0, -1.0),
(0.3, 1e+30, 0.0),
(0.3, -1e+30, -1.0),
(0.3, 1e-40, f32::INFINITY),
(0.3, 1.0000001, 0.0),
(-0.3, 0.0, f32::NEG_INFINITY),
(-0.3, -0.0, f32::INFINITY),
(-0.3, 1.0, -1.0),
(-0.3, -1.0, 0.0),
(-0.3, 2.0, -1.0),
(-0.3, -2.0, 0.0),
(-0.3, 5.0, -1.0),
(-0.3, -5.0, 0.0),
(-0.3, 5.5, -1.0),
(-0.3, -5.5, 0.0),
(-0.3, 0.3, -1.0),
(-0.3, -0.3, 1.0),
(-0.3, 7.0, -1.0),
(-0.3, 1e-10, -3e+09),
(-0.3, 3.0, -1.0),
(-0.3, -3.0, 0.0),
(-0.3, 1e+30, -1.0),
(-0.3, -1e+30, 0.0),
(-0.3, 1e-40, f32::NEG_INFINITY),
(-0.3, 1.0000001, -1.0),
(7.0, 0.0, f32::INFINITY),
(7.0, -0.0, f32::NEG_INFINITY),
(7.0, 1.0, 7.0),
(7.0, -1.0, -7.0),
(7.0, 2.0, 3.0),
(7.0, -2.0, -4.0),
(7.0, 5.0, 1.0),
(7.0, -5.0, -2.0),
(7.0, 5.5, 1.0),
(7.0, -5.5, -2.0),
(7.0, 0.3, 23.0),
(7.0, -0.3, -24.0),
(7.0, 7.0, 1.0),
(7.0, 1e-10, 7e+10),
(7.0, 3.0, 2.0),
(7.0, -3.0, -3.0),
(7.0, 1e+30, 0.0),
(7.0, -1e+30, -1.0),
(7.0, 1e-40, f32::INFINITY),
(7.0, 1.0000001, 6.0),
(1e-10, 0.0, f32::INFINITY),
(1e-10, -0.0, f32::NEG_INFINITY),
(1e-10, 1.0, 0.0),
(1e-10, -1.0, -1.0),
(1e-10, 2.0, 0.0),
(1e-10, -2.0, -1.0),
(1e-10, 5.0, 0.0),
(1e-10, -5.0, -1.0),
(1e-10, 5.5, 0.0),
(1e-10, -5.5, -1.0),
(1e-10, 0.3, 0.0),
(1e-10, -0.3, -1.0),
(1e-10, 7.0, 0.0),
(1e-10, 1e-10, 1.0),
(1e-10, 3.0, 0.0),
(1e-10, -3.0, -1.0),
(1e-10, 1e+30, 0.0),
(1e-10, -1e+30, -1.0),
(1e-10, 1e-40, 1.0000054e+30),
(1e-10, 1.0000001, 0.0),
(3.0, 0.0, f32::INFINITY),
(3.0, -0.0, f32::NEG_INFINITY),
(3.0, 1.0, 3.0),
(3.0, -1.0, -3.0),
(3.0, 2.0, 1.0),
(3.0, -2.0, -2.0),
(3.0, 5.0, 0.0),
(3.0, -5.0, -1.0),
(3.0, 5.5, 0.0),
(3.0, -5.5, -1.0),
(3.0, 0.3, 9.0),
(3.0, -0.3, -10.0),
(3.0, 7.0, 0.0),
(3.0, 1e-10, 2.9999999e+10),
(3.0, 3.0, 1.0),
(3.0, -3.0, -1.0),
(3.0, 1e+30, 0.0),
(3.0, -1e+30, -1.0),
(3.0, 1e-40, f32::INFINITY),
(3.0, 1.0000001, 2.0),
(-3.0, 0.0, f32::NEG_INFINITY),
(-3.0, -0.0, f32::INFINITY),
(-3.0, 1.0, -3.0),
(-3.0, -1.0, 3.0),
(-3.0, 2.0, -2.0),
(-3.0, -2.0, 1.0),
(-3.0, 5.0, -1.0),
(-3.0, -5.0, 0.0),
(-3.0, 5.5, -1.0),
(-3.0, -5.5, 0.0),
(-3.0, 0.3, -10.0),
(-3.0, -0.3, 9.0),
(-3.0, 7.0, -1.0),
(-3.0, 1e-10, -2.9999999e+10),
(-3.0, 3.0, -1.0),
(-3.0, -3.0, 1.0),
(-3.0, 1e+30, -1.0),
(-3.0, -1e+30, 0.0),
(-3.0, 1e-40, f32::NEG_INFINITY),
(-3.0, 1.0000001, -3.0),
(1e+30, 0.0, f32::INFINITY),
(1e+30, -0.0, f32::NEG_INFINITY),
(1e+30, 1.0, 1e+30),
(1e+30, -1.0, -1e+30),
(1e+30, 2.0, 5e+29),
(1e+30, -2.0, -5e+29),
(1e+30, 5.0, 2e+29),
(1e+30, -5.0, -2e+29),
(1e+30, 5.5, 1.818182e+29),
(1e+30, -5.5, -1.818182e+29),
(1e+30, 0.3, 3.3333334e+30),
(1e+30, -0.3, -3.3333334e+30),
(1e+30, 7.0, 1.4285715e+29),
(1e+30, 1e-10, f32::INFINITY),
(1e+30, 3.0, 3.3333334e+29),
(1e+30, -3.0, -3.3333334e+29),
(1e+30, 1e+30, 1.0),
(1e+30, -1e+30, -1.0),
(1e+30, 1e-40, f32::INFINITY),
(1e+30, 1.0000001, 9.999999e+29),
(-1e+30, 0.0, f32::NEG_INFINITY),
(-1e+30, -0.0, f32::INFINITY),
(-1e+30, 1.0, -1e+30),
(-1e+30, -1.0, 1e+30),
(-1e+30, 2.0, -5e+29),
(-1e+30, -2.0, 5e+29),
(-1e+30, 5.0, -2e+29),
(-1e+30, -5.0, 2e+29),
(-1e+30, 5.5, -1.818182e+29),
(-1e+30, -5.5, 1.818182e+29),
(-1e+30, 0.3, -3.3333334e+30),
(-1e+30, -0.3, 3.3333334e+30),
(-1e+30, 7.0, -1.4285715e+29),
(-1e+30, 1e-10, f32::NEG_INFINITY),
(-1e+30, 3.0, -3.3333334e+29),
(-1e+30, -3.0, 3.3333334e+29),
(-1e+30, 1e+30, -1.0),
(-1e+30, -1e+30, 1.0),
(-1e+30, 1e-40, f32::NEG_INFINITY),
(-1e+30, 1.0000001, -9.999999e+29),
(1e-40, 0.0, f32::INFINITY),
(1e-40, -0.0, f32::NEG_INFINITY),
(1e-40, 1.0, 0.0),
(1e-40, -1.0, -1.0),
(1e-40, 2.0, 0.0),
(1e-40, -2.0, -1.0),
(1e-40, 5.0, 0.0),
(1e-40, -5.0, -1.0),
(1e-40, 5.5, 0.0),
(1e-40, -5.5, -1.0),
(1e-40, 0.3, 0.0),
(1e-40, -0.3, -1.0),
(1e-40, 7.0, 0.0),
(1e-40, 1e-10, 0.0),
(1e-40, 3.0, 0.0),
(1e-40, -3.0, -1.0),
(1e-40, 1e+30, 0.0),
(1e-40, -1e+30, -1.0),
(1e-40, 1e-40, 1.0),
(1e-40, 1.0000001, 0.0),
(1.0000001, 0.0, f32::INFINITY),
(1.0000001, -0.0, f32::NEG_INFINITY),
(1.0000001, 1.0, 1.0),
(1.0000001, -1.0, -2.0),
(1.0000001, 2.0, 0.0),
(1.0000001, -2.0, -1.0),
(1.0000001, 5.0, 0.0),
(1.0000001, -5.0, -1.0),
(1.0000001, 5.5, 0.0),
(1.0000001, -5.5, -1.0),
(1.0000001, 0.3, 3.0),
(1.0000001, -0.3, -4.0),
(1.0000001, 7.0, 0.0),
(1.0000001, 1e-10, 1.0000001e+10),
(1.0000001, 3.0, 0.0),
(1.0000001, -3.0, -1.0),
(1.0000001, 1e+30, 0.0),
(1.0000001, -1e+30, -1.0),
(1.0000001, 1e-40, f32::INFINITY),
(1.0000001, 1.0000001, 1.0),
];
for &(x, y, want) in CASES {
check(
"floor_divide",
&format!("{x:?}, {y:?}"),
floor_divide(x, y),
want,
0.0,
0.0,
);
}
}
#[test]
fn copysign_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32)] = &[
(0.0, 0.0, 0.0),
(0.0, -0.0, -0.0),
(0.0, 1.0, 0.0),
(0.0, -1.0, -0.0),
(0.0, 2.0, 0.0),
(0.0, -2.0, -0.0),
(0.0, 5.0, 0.0),
(0.0, -5.0, -0.0),
(0.0, 5.5, 0.0),
(0.0, -5.5, -0.0),
(0.0, 0.3, 0.0),
(0.0, -0.3, -0.0),
(0.0, 7.0, 0.0),
(0.0, 1e-10, 0.0),
(0.0, 3.0, 0.0),
(0.0, -3.0, -0.0),
(0.0, 1e+30, 0.0),
(0.0, -1e+30, -0.0),
(0.0, 1e-40, 0.0),
(0.0, 1.0000001, 0.0),
(-0.0, 0.0, 0.0),
(-0.0, -0.0, -0.0),
(-0.0, 1.0, 0.0),
(-0.0, -1.0, -0.0),
(-0.0, 2.0, 0.0),
(-0.0, -2.0, -0.0),
(-0.0, 5.0, 0.0),
(-0.0, -5.0, -0.0),
(-0.0, 5.5, 0.0),
(-0.0, -5.5, -0.0),
(-0.0, 0.3, 0.0),
(-0.0, -0.3, -0.0),
(-0.0, 7.0, 0.0),
(-0.0, 1e-10, 0.0),
(-0.0, 3.0, 0.0),
(-0.0, -3.0, -0.0),
(-0.0, 1e+30, 0.0),
(-0.0, -1e+30, -0.0),
(-0.0, 1e-40, 0.0),
(-0.0, 1.0000001, 0.0),
(1.0, 0.0, 1.0),
(1.0, -0.0, -1.0),
(1.0, 1.0, 1.0),
(1.0, -1.0, -1.0),
(1.0, 2.0, 1.0),
(1.0, -2.0, -1.0),
(1.0, 5.0, 1.0),
(1.0, -5.0, -1.0),
(1.0, 5.5, 1.0),
(1.0, -5.5, -1.0),
(1.0, 0.3, 1.0),
(1.0, -0.3, -1.0),
(1.0, 7.0, 1.0),
(1.0, 1e-10, 1.0),
(1.0, 3.0, 1.0),
(1.0, -3.0, -1.0),
(1.0, 1e+30, 1.0),
(1.0, -1e+30, -1.0),
(1.0, 1e-40, 1.0),
(1.0, 1.0000001, 1.0),
(-1.0, 0.0, 1.0),
(-1.0, -0.0, -1.0),
(-1.0, 1.0, 1.0),
(-1.0, -1.0, -1.0),
(-1.0, 2.0, 1.0),
(-1.0, -2.0, -1.0),
(-1.0, 5.0, 1.0),
(-1.0, -5.0, -1.0),
(-1.0, 5.5, 1.0),
(-1.0, -5.5, -1.0),
(-1.0, 0.3, 1.0),
(-1.0, -0.3, -1.0),
(-1.0, 7.0, 1.0),
(-1.0, 1e-10, 1.0),
(-1.0, 3.0, 1.0),
(-1.0, -3.0, -1.0),
(-1.0, 1e+30, 1.0),
(-1.0, -1e+30, -1.0),
(-1.0, 1e-40, 1.0),
(-1.0, 1.0000001, 1.0),
(2.0, 0.0, 2.0),
(2.0, -0.0, -2.0),
(2.0, 1.0, 2.0),
(2.0, -1.0, -2.0),
(2.0, 2.0, 2.0),
(2.0, -2.0, -2.0),
(2.0, 5.0, 2.0),
(2.0, -5.0, -2.0),
(2.0, 5.5, 2.0),
(2.0, -5.5, -2.0),
(2.0, 0.3, 2.0),
(2.0, -0.3, -2.0),
(2.0, 7.0, 2.0),
(2.0, 1e-10, 2.0),
(2.0, 3.0, 2.0),
(2.0, -3.0, -2.0),
(2.0, 1e+30, 2.0),
(2.0, -1e+30, -2.0),
(2.0, 1e-40, 2.0),
(2.0, 1.0000001, 2.0),
(-2.0, 0.0, 2.0),
(-2.0, -0.0, -2.0),
(-2.0, 1.0, 2.0),
(-2.0, -1.0, -2.0),
(-2.0, 2.0, 2.0),
(-2.0, -2.0, -2.0),
(-2.0, 5.0, 2.0),
(-2.0, -5.0, -2.0),
(-2.0, 5.5, 2.0),
(-2.0, -5.5, -2.0),
(-2.0, 0.3, 2.0),
(-2.0, -0.3, -2.0),
(-2.0, 7.0, 2.0),
(-2.0, 1e-10, 2.0),
(-2.0, 3.0, 2.0),
(-2.0, -3.0, -2.0),
(-2.0, 1e+30, 2.0),
(-2.0, -1e+30, -2.0),
(-2.0, 1e-40, 2.0),
(-2.0, 1.0000001, 2.0),
(5.0, 0.0, 5.0),
(5.0, -0.0, -5.0),
(5.0, 1.0, 5.0),
(5.0, -1.0, -5.0),
(5.0, 2.0, 5.0),
(5.0, -2.0, -5.0),
(5.0, 5.0, 5.0),
(5.0, -5.0, -5.0),
(5.0, 5.5, 5.0),
(5.0, -5.5, -5.0),
(5.0, 0.3, 5.0),
(5.0, -0.3, -5.0),
(5.0, 7.0, 5.0),
(5.0, 1e-10, 5.0),
(5.0, 3.0, 5.0),
(5.0, -3.0, -5.0),
(5.0, 1e+30, 5.0),
(5.0, -1e+30, -5.0),
(5.0, 1e-40, 5.0),
(5.0, 1.0000001, 5.0),
(-5.0, 0.0, 5.0),
(-5.0, -0.0, -5.0),
(-5.0, 1.0, 5.0),
(-5.0, -1.0, -5.0),
(-5.0, 2.0, 5.0),
(-5.0, -2.0, -5.0),
(-5.0, 5.0, 5.0),
(-5.0, -5.0, -5.0),
(-5.0, 5.5, 5.0),
(-5.0, -5.5, -5.0),
(-5.0, 0.3, 5.0),
(-5.0, -0.3, -5.0),
(-5.0, 7.0, 5.0),
(-5.0, 1e-10, 5.0),
(-5.0, 3.0, 5.0),
(-5.0, -3.0, -5.0),
(-5.0, 1e+30, 5.0),
(-5.0, -1e+30, -5.0),
(-5.0, 1e-40, 5.0),
(-5.0, 1.0000001, 5.0),
(5.5, 0.0, 5.5),
(5.5, -0.0, -5.5),
(5.5, 1.0, 5.5),
(5.5, -1.0, -5.5),
(5.5, 2.0, 5.5),
(5.5, -2.0, -5.5),
(5.5, 5.0, 5.5),
(5.5, -5.0, -5.5),
(5.5, 5.5, 5.5),
(5.5, -5.5, -5.5),
(5.5, 0.3, 5.5),
(5.5, -0.3, -5.5),
(5.5, 7.0, 5.5),
(5.5, 1e-10, 5.5),
(5.5, 3.0, 5.5),
(5.5, -3.0, -5.5),
(5.5, 1e+30, 5.5),
(5.5, -1e+30, -5.5),
(5.5, 1e-40, 5.5),
(5.5, 1.0000001, 5.5),
(-5.5, 0.0, 5.5),
(-5.5, -0.0, -5.5),
(-5.5, 1.0, 5.5),
(-5.5, -1.0, -5.5),
(-5.5, 2.0, 5.5),
(-5.5, -2.0, -5.5),
(-5.5, 5.0, 5.5),
(-5.5, -5.0, -5.5),
(-5.5, 5.5, 5.5),
(-5.5, -5.5, -5.5),
(-5.5, 0.3, 5.5),
(-5.5, -0.3, -5.5),
(-5.5, 7.0, 5.5),
(-5.5, 1e-10, 5.5),
(-5.5, 3.0, 5.5),
(-5.5, -3.0, -5.5),
(-5.5, 1e+30, 5.5),
(-5.5, -1e+30, -5.5),
(-5.5, 1e-40, 5.5),
(-5.5, 1.0000001, 5.5),
(0.3, 0.0, 0.3),
(0.3, -0.0, -0.3),
(0.3, 1.0, 0.3),
(0.3, -1.0, -0.3),
(0.3, 2.0, 0.3),
(0.3, -2.0, -0.3),
(0.3, 5.0, 0.3),
(0.3, -5.0, -0.3),
(0.3, 5.5, 0.3),
(0.3, -5.5, -0.3),
(0.3, 0.3, 0.3),
(0.3, -0.3, -0.3),
(0.3, 7.0, 0.3),
(0.3, 1e-10, 0.3),
(0.3, 3.0, 0.3),
(0.3, -3.0, -0.3),
(0.3, 1e+30, 0.3),
(0.3, -1e+30, -0.3),
(0.3, 1e-40, 0.3),
(0.3, 1.0000001, 0.3),
(-0.3, 0.0, 0.3),
(-0.3, -0.0, -0.3),
(-0.3, 1.0, 0.3),
(-0.3, -1.0, -0.3),
(-0.3, 2.0, 0.3),
(-0.3, -2.0, -0.3),
(-0.3, 5.0, 0.3),
(-0.3, -5.0, -0.3),
(-0.3, 5.5, 0.3),
(-0.3, -5.5, -0.3),
(-0.3, 0.3, 0.3),
(-0.3, -0.3, -0.3),
(-0.3, 7.0, 0.3),
(-0.3, 1e-10, 0.3),
(-0.3, 3.0, 0.3),
(-0.3, -3.0, -0.3),
(-0.3, 1e+30, 0.3),
(-0.3, -1e+30, -0.3),
(-0.3, 1e-40, 0.3),
(-0.3, 1.0000001, 0.3),
(7.0, 0.0, 7.0),
(7.0, -0.0, -7.0),
(7.0, 1.0, 7.0),
(7.0, -1.0, -7.0),
(7.0, 2.0, 7.0),
(7.0, -2.0, -7.0),
(7.0, 5.0, 7.0),
(7.0, -5.0, -7.0),
(7.0, 5.5, 7.0),
(7.0, -5.5, -7.0),
(7.0, 0.3, 7.0),
(7.0, -0.3, -7.0),
(7.0, 7.0, 7.0),
(7.0, 1e-10, 7.0),
(7.0, 3.0, 7.0),
(7.0, -3.0, -7.0),
(7.0, 1e+30, 7.0),
(7.0, -1e+30, -7.0),
(7.0, 1e-40, 7.0),
(7.0, 1.0000001, 7.0),
(1e-10, 0.0, 1e-10),
(1e-10, -0.0, -1e-10),
(1e-10, 1.0, 1e-10),
(1e-10, -1.0, -1e-10),
(1e-10, 2.0, 1e-10),
(1e-10, -2.0, -1e-10),
(1e-10, 5.0, 1e-10),
(1e-10, -5.0, -1e-10),
(1e-10, 5.5, 1e-10),
(1e-10, -5.5, -1e-10),
(1e-10, 0.3, 1e-10),
(1e-10, -0.3, -1e-10),
(1e-10, 7.0, 1e-10),
(1e-10, 1e-10, 1e-10),
(1e-10, 3.0, 1e-10),
(1e-10, -3.0, -1e-10),
(1e-10, 1e+30, 1e-10),
(1e-10, -1e+30, -1e-10),
(1e-10, 1e-40, 1e-10),
(1e-10, 1.0000001, 1e-10),
(3.0, 0.0, 3.0),
(3.0, -0.0, -3.0),
(3.0, 1.0, 3.0),
(3.0, -1.0, -3.0),
(3.0, 2.0, 3.0),
(3.0, -2.0, -3.0),
(3.0, 5.0, 3.0),
(3.0, -5.0, -3.0),
(3.0, 5.5, 3.0),
(3.0, -5.5, -3.0),
(3.0, 0.3, 3.0),
(3.0, -0.3, -3.0),
(3.0, 7.0, 3.0),
(3.0, 1e-10, 3.0),
(3.0, 3.0, 3.0),
(3.0, -3.0, -3.0),
(3.0, 1e+30, 3.0),
(3.0, -1e+30, -3.0),
(3.0, 1e-40, 3.0),
(3.0, 1.0000001, 3.0),
(-3.0, 0.0, 3.0),
(-3.0, -0.0, -3.0),
(-3.0, 1.0, 3.0),
(-3.0, -1.0, -3.0),
(-3.0, 2.0, 3.0),
(-3.0, -2.0, -3.0),
(-3.0, 5.0, 3.0),
(-3.0, -5.0, -3.0),
(-3.0, 5.5, 3.0),
(-3.0, -5.5, -3.0),
(-3.0, 0.3, 3.0),
(-3.0, -0.3, -3.0),
(-3.0, 7.0, 3.0),
(-3.0, 1e-10, 3.0),
(-3.0, 3.0, 3.0),
(-3.0, -3.0, -3.0),
(-3.0, 1e+30, 3.0),
(-3.0, -1e+30, -3.0),
(-3.0, 1e-40, 3.0),
(-3.0, 1.0000001, 3.0),
(1e+30, 0.0, 1e+30),
(1e+30, -0.0, -1e+30),
(1e+30, 1.0, 1e+30),
(1e+30, -1.0, -1e+30),
(1e+30, 2.0, 1e+30),
(1e+30, -2.0, -1e+30),
(1e+30, 5.0, 1e+30),
(1e+30, -5.0, -1e+30),
(1e+30, 5.5, 1e+30),
(1e+30, -5.5, -1e+30),
(1e+30, 0.3, 1e+30),
(1e+30, -0.3, -1e+30),
(1e+30, 7.0, 1e+30),
(1e+30, 1e-10, 1e+30),
(1e+30, 3.0, 1e+30),
(1e+30, -3.0, -1e+30),
(1e+30, 1e+30, 1e+30),
(1e+30, -1e+30, -1e+30),
(1e+30, 1e-40, 1e+30),
(1e+30, 1.0000001, 1e+30),
(-1e+30, 0.0, 1e+30),
(-1e+30, -0.0, -1e+30),
(-1e+30, 1.0, 1e+30),
(-1e+30, -1.0, -1e+30),
(-1e+30, 2.0, 1e+30),
(-1e+30, -2.0, -1e+30),
(-1e+30, 5.0, 1e+30),
(-1e+30, -5.0, -1e+30),
(-1e+30, 5.5, 1e+30),
(-1e+30, -5.5, -1e+30),
(-1e+30, 0.3, 1e+30),
(-1e+30, -0.3, -1e+30),
(-1e+30, 7.0, 1e+30),
(-1e+30, 1e-10, 1e+30),
(-1e+30, 3.0, 1e+30),
(-1e+30, -3.0, -1e+30),
(-1e+30, 1e+30, 1e+30),
(-1e+30, -1e+30, -1e+30),
(-1e+30, 1e-40, 1e+30),
(-1e+30, 1.0000001, 1e+30),
(1e-40, 0.0, 1e-40),
(1e-40, -0.0, -1e-40),
(1e-40, 1.0, 1e-40),
(1e-40, -1.0, -1e-40),
(1e-40, 2.0, 1e-40),
(1e-40, -2.0, -1e-40),
(1e-40, 5.0, 1e-40),
(1e-40, -5.0, -1e-40),
(1e-40, 5.5, 1e-40),
(1e-40, -5.5, -1e-40),
(1e-40, 0.3, 1e-40),
(1e-40, -0.3, -1e-40),
(1e-40, 7.0, 1e-40),
(1e-40, 1e-10, 1e-40),
(1e-40, 3.0, 1e-40),
(1e-40, -3.0, -1e-40),
(1e-40, 1e+30, 1e-40),
(1e-40, -1e+30, -1e-40),
(1e-40, 1e-40, 1e-40),
(1e-40, 1.0000001, 1e-40),
(1.0000001, 0.0, 1.0000001),
(1.0000001, -0.0, -1.0000001),
(1.0000001, 1.0, 1.0000001),
(1.0000001, -1.0, -1.0000001),
(1.0000001, 2.0, 1.0000001),
(1.0000001, -2.0, -1.0000001),
(1.0000001, 5.0, 1.0000001),
(1.0000001, -5.0, -1.0000001),
(1.0000001, 5.5, 1.0000001),
(1.0000001, -5.5, -1.0000001),
(1.0000001, 0.3, 1.0000001),
(1.0000001, -0.3, -1.0000001),
(1.0000001, 7.0, 1.0000001),
(1.0000001, 1e-10, 1.0000001),
(1.0000001, 3.0, 1.0000001),
(1.0000001, -3.0, -1.0000001),
(1.0000001, 1e+30, 1.0000001),
(1.0000001, -1e+30, -1.0000001),
(1.0000001, 1e-40, 1.0000001),
(1.0000001, 1.0000001, 1.0000001),
];
for &(x, y, want) in CASES {
check(
"copysign",
&format!("{x:?}, {y:?}"),
copysign(x, y),
want,
0.0,
0.0,
);
}
}
#[test]
fn nextafter_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32)] = &[
(0.0, 0.0, 0.0),
(0.0, -0.0, -0.0),
(0.0, 1.0, 1e-45),
(0.0, -1.0, -1e-45),
(0.0, 2.0, 1e-45),
(0.0, -2.0, -1e-45),
(0.0, 5.0, 1e-45),
(0.0, -5.0, -1e-45),
(0.0, 5.5, 1e-45),
(0.0, -5.5, -1e-45),
(0.0, 0.3, 1e-45),
(0.0, -0.3, -1e-45),
(0.0, 7.0, 1e-45),
(0.0, 1e-10, 1e-45),
(0.0, 3.0, 1e-45),
(0.0, -3.0, -1e-45),
(0.0, 1e+30, 1e-45),
(0.0, -1e+30, -1e-45),
(0.0, 1e-40, 1e-45),
(0.0, 1.0000001, 1e-45),
(-0.0, 0.0, 0.0),
(-0.0, -0.0, -0.0),
(-0.0, 1.0, 1e-45),
(-0.0, -1.0, -1e-45),
(-0.0, 2.0, 1e-45),
(-0.0, -2.0, -1e-45),
(-0.0, 5.0, 1e-45),
(-0.0, -5.0, -1e-45),
(-0.0, 5.5, 1e-45),
(-0.0, -5.5, -1e-45),
(-0.0, 0.3, 1e-45),
(-0.0, -0.3, -1e-45),
(-0.0, 7.0, 1e-45),
(-0.0, 1e-10, 1e-45),
(-0.0, 3.0, 1e-45),
(-0.0, -3.0, -1e-45),
(-0.0, 1e+30, 1e-45),
(-0.0, -1e+30, -1e-45),
(-0.0, 1e-40, 1e-45),
(-0.0, 1.0000001, 1e-45),
(1.0, 0.0, 0.99999994),
(1.0, -0.0, 0.99999994),
(1.0, 1.0, 1.0),
(1.0, -1.0, 0.99999994),
(1.0, 2.0, 1.0000001),
(1.0, -2.0, 0.99999994),
(1.0, 5.0, 1.0000001),
(1.0, -5.0, 0.99999994),
(1.0, 5.5, 1.0000001),
(1.0, -5.5, 0.99999994),
(1.0, 0.3, 0.99999994),
(1.0, -0.3, 0.99999994),
(1.0, 7.0, 1.0000001),
(1.0, 1e-10, 0.99999994),
(1.0, 3.0, 1.0000001),
(1.0, -3.0, 0.99999994),
(1.0, 1e+30, 1.0000001),
(1.0, -1e+30, 0.99999994),
(1.0, 1e-40, 0.99999994),
(1.0, 1.0000001, 1.0000001),
(-1.0, 0.0, -0.99999994),
(-1.0, -0.0, -0.99999994),
(-1.0, 1.0, -0.99999994),
(-1.0, -1.0, -1.0),
(-1.0, 2.0, -0.99999994),
(-1.0, -2.0, -1.0000001),
(-1.0, 5.0, -0.99999994),
(-1.0, -5.0, -1.0000001),
(-1.0, 5.5, -0.99999994),
(-1.0, -5.5, -1.0000001),
(-1.0, 0.3, -0.99999994),
(-1.0, -0.3, -0.99999994),
(-1.0, 7.0, -0.99999994),
(-1.0, 1e-10, -0.99999994),
(-1.0, 3.0, -0.99999994),
(-1.0, -3.0, -1.0000001),
(-1.0, 1e+30, -0.99999994),
(-1.0, -1e+30, -1.0000001),
(-1.0, 1e-40, -0.99999994),
(-1.0, 1.0000001, -0.99999994),
(2.0, 0.0, 1.9999999),
(2.0, -0.0, 1.9999999),
(2.0, 1.0, 1.9999999),
(2.0, -1.0, 1.9999999),
(2.0, 2.0, 2.0),
(2.0, -2.0, 1.9999999),
(2.0, 5.0, 2.0000002),
(2.0, -5.0, 1.9999999),
(2.0, 5.5, 2.0000002),
(2.0, -5.5, 1.9999999),
(2.0, 0.3, 1.9999999),
(2.0, -0.3, 1.9999999),
(2.0, 7.0, 2.0000002),
(2.0, 1e-10, 1.9999999),
(2.0, 3.0, 2.0000002),
(2.0, -3.0, 1.9999999),
(2.0, 1e+30, 2.0000002),
(2.0, -1e+30, 1.9999999),
(2.0, 1e-40, 1.9999999),
(2.0, 1.0000001, 1.9999999),
(-2.0, 0.0, -1.9999999),
(-2.0, -0.0, -1.9999999),
(-2.0, 1.0, -1.9999999),
(-2.0, -1.0, -1.9999999),
(-2.0, 2.0, -1.9999999),
(-2.0, -2.0, -2.0),
(-2.0, 5.0, -1.9999999),
(-2.0, -5.0, -2.0000002),
(-2.0, 5.5, -1.9999999),
(-2.0, -5.5, -2.0000002),
(-2.0, 0.3, -1.9999999),
(-2.0, -0.3, -1.9999999),
(-2.0, 7.0, -1.9999999),
(-2.0, 1e-10, -1.9999999),
(-2.0, 3.0, -1.9999999),
(-2.0, -3.0, -2.0000002),
(-2.0, 1e+30, -1.9999999),
(-2.0, -1e+30, -2.0000002),
(-2.0, 1e-40, -1.9999999),
(-2.0, 1.0000001, -1.9999999),
(5.0, 0.0, 4.9999995),
(5.0, -0.0, 4.9999995),
(5.0, 1.0, 4.9999995),
(5.0, -1.0, 4.9999995),
(5.0, 2.0, 4.9999995),
(5.0, -2.0, 4.9999995),
(5.0, 5.0, 5.0),
(5.0, -5.0, 4.9999995),
(5.0, 5.5, 5.0000005),
(5.0, -5.5, 4.9999995),
(5.0, 0.3, 4.9999995),
(5.0, -0.3, 4.9999995),
(5.0, 7.0, 5.0000005),
(5.0, 1e-10, 4.9999995),
(5.0, 3.0, 4.9999995),
(5.0, -3.0, 4.9999995),
(5.0, 1e+30, 5.0000005),
(5.0, -1e+30, 4.9999995),
(5.0, 1e-40, 4.9999995),
(5.0, 1.0000001, 4.9999995),
(-5.0, 0.0, -4.9999995),
(-5.0, -0.0, -4.9999995),
(-5.0, 1.0, -4.9999995),
(-5.0, -1.0, -4.9999995),
(-5.0, 2.0, -4.9999995),
(-5.0, -2.0, -4.9999995),
(-5.0, 5.0, -4.9999995),
(-5.0, -5.0, -5.0),
(-5.0, 5.5, -4.9999995),
(-5.0, -5.5, -5.0000005),
(-5.0, 0.3, -4.9999995),
(-5.0, -0.3, -4.9999995),
(-5.0, 7.0, -4.9999995),
(-5.0, 1e-10, -4.9999995),
(-5.0, 3.0, -4.9999995),
(-5.0, -3.0, -4.9999995),
(-5.0, 1e+30, -4.9999995),
(-5.0, -1e+30, -5.0000005),
(-5.0, 1e-40, -4.9999995),
(-5.0, 1.0000001, -4.9999995),
(5.5, 0.0, 5.4999995),
(5.5, -0.0, 5.4999995),
(5.5, 1.0, 5.4999995),
(5.5, -1.0, 5.4999995),
(5.5, 2.0, 5.4999995),
(5.5, -2.0, 5.4999995),
(5.5, 5.0, 5.4999995),
(5.5, -5.0, 5.4999995),
(5.5, 5.5, 5.5),
(5.5, -5.5, 5.4999995),
(5.5, 0.3, 5.4999995),
(5.5, -0.3, 5.4999995),
(5.5, 7.0, 5.5000005),
(5.5, 1e-10, 5.4999995),
(5.5, 3.0, 5.4999995),
(5.5, -3.0, 5.4999995),
(5.5, 1e+30, 5.5000005),
(5.5, -1e+30, 5.4999995),
(5.5, 1e-40, 5.4999995),
(5.5, 1.0000001, 5.4999995),
(-5.5, 0.0, -5.4999995),
(-5.5, -0.0, -5.4999995),
(-5.5, 1.0, -5.4999995),
(-5.5, -1.0, -5.4999995),
(-5.5, 2.0, -5.4999995),
(-5.5, -2.0, -5.4999995),
(-5.5, 5.0, -5.4999995),
(-5.5, -5.0, -5.4999995),
(-5.5, 5.5, -5.4999995),
(-5.5, -5.5, -5.5),
(-5.5, 0.3, -5.4999995),
(-5.5, -0.3, -5.4999995),
(-5.5, 7.0, -5.4999995),
(-5.5, 1e-10, -5.4999995),
(-5.5, 3.0, -5.4999995),
(-5.5, -3.0, -5.4999995),
(-5.5, 1e+30, -5.4999995),
(-5.5, -1e+30, -5.5000005),
(-5.5, 1e-40, -5.4999995),
(-5.5, 1.0000001, -5.4999995),
(0.3, 0.0, 0.29999998),
(0.3, -0.0, 0.29999998),
(0.3, 1.0, 0.30000004),
(0.3, -1.0, 0.29999998),
(0.3, 2.0, 0.30000004),
(0.3, -2.0, 0.29999998),
(0.3, 5.0, 0.30000004),
(0.3, -5.0, 0.29999998),
(0.3, 5.5, 0.30000004),
(0.3, -5.5, 0.29999998),
(0.3, 0.3, 0.3),
(0.3, -0.3, 0.29999998),
(0.3, 7.0, 0.30000004),
(0.3, 1e-10, 0.29999998),
(0.3, 3.0, 0.30000004),
(0.3, -3.0, 0.29999998),
(0.3, 1e+30, 0.30000004),
(0.3, -1e+30, 0.29999998),
(0.3, 1e-40, 0.29999998),
(0.3, 1.0000001, 0.30000004),
(-0.3, 0.0, -0.29999998),
(-0.3, -0.0, -0.29999998),
(-0.3, 1.0, -0.29999998),
(-0.3, -1.0, -0.30000004),
(-0.3, 2.0, -0.29999998),
(-0.3, -2.0, -0.30000004),
(-0.3, 5.0, -0.29999998),
(-0.3, -5.0, -0.30000004),
(-0.3, 5.5, -0.29999998),
(-0.3, -5.5, -0.30000004),
(-0.3, 0.3, -0.29999998),
(-0.3, -0.3, -0.3),
(-0.3, 7.0, -0.29999998),
(-0.3, 1e-10, -0.29999998),
(-0.3, 3.0, -0.29999998),
(-0.3, -3.0, -0.30000004),
(-0.3, 1e+30, -0.29999998),
(-0.3, -1e+30, -0.30000004),
(-0.3, 1e-40, -0.29999998),
(-0.3, 1.0000001, -0.29999998),
(7.0, 0.0, 6.9999995),
(7.0, -0.0, 6.9999995),
(7.0, 1.0, 6.9999995),
(7.0, -1.0, 6.9999995),
(7.0, 2.0, 6.9999995),
(7.0, -2.0, 6.9999995),
(7.0, 5.0, 6.9999995),
(7.0, -5.0, 6.9999995),
(7.0, 5.5, 6.9999995),
(7.0, -5.5, 6.9999995),
(7.0, 0.3, 6.9999995),
(7.0, -0.3, 6.9999995),
(7.0, 7.0, 7.0),
(7.0, 1e-10, 6.9999995),
(7.0, 3.0, 6.9999995),
(7.0, -3.0, 6.9999995),
(7.0, 1e+30, 7.0000005),
(7.0, -1e+30, 6.9999995),
(7.0, 1e-40, 6.9999995),
(7.0, 1.0000001, 6.9999995),
(1e-10, 0.0, 9.9999994e-11),
(1e-10, -0.0, 9.9999994e-11),
(1e-10, 1.0, 1.0000001e-10),
(1e-10, -1.0, 9.9999994e-11),
(1e-10, 2.0, 1.0000001e-10),
(1e-10, -2.0, 9.9999994e-11),
(1e-10, 5.0, 1.0000001e-10),
(1e-10, -5.0, 9.9999994e-11),
(1e-10, 5.5, 1.0000001e-10),
(1e-10, -5.5, 9.9999994e-11),
(1e-10, 0.3, 1.0000001e-10),
(1e-10, -0.3, 9.9999994e-11),
(1e-10, 7.0, 1.0000001e-10),
(1e-10, 1e-10, 1e-10),
(1e-10, 3.0, 1.0000001e-10),
(1e-10, -3.0, 9.9999994e-11),
(1e-10, 1e+30, 1.0000001e-10),
(1e-10, -1e+30, 9.9999994e-11),
(1e-10, 1e-40, 9.9999994e-11),
(1e-10, 1.0000001, 1.0000001e-10),
(3.0, 0.0, 2.9999998),
(3.0, -0.0, 2.9999998),
(3.0, 1.0, 2.9999998),
(3.0, -1.0, 2.9999998),
(3.0, 2.0, 2.9999998),
(3.0, -2.0, 2.9999998),
(3.0, 5.0, 3.0000002),
(3.0, -5.0, 2.9999998),
(3.0, 5.5, 3.0000002),
(3.0, -5.5, 2.9999998),
(3.0, 0.3, 2.9999998),
(3.0, -0.3, 2.9999998),
(3.0, 7.0, 3.0000002),
(3.0, 1e-10, 2.9999998),
(3.0, 3.0, 3.0),
(3.0, -3.0, 2.9999998),
(3.0, 1e+30, 3.0000002),
(3.0, -1e+30, 2.9999998),
(3.0, 1e-40, 2.9999998),
(3.0, 1.0000001, 2.9999998),
(-3.0, 0.0, -2.9999998),
(-3.0, -0.0, -2.9999998),
(-3.0, 1.0, -2.9999998),
(-3.0, -1.0, -2.9999998),
(-3.0, 2.0, -2.9999998),
(-3.0, -2.0, -2.9999998),
(-3.0, 5.0, -2.9999998),
(-3.0, -5.0, -3.0000002),
(-3.0, 5.5, -2.9999998),
(-3.0, -5.5, -3.0000002),
(-3.0, 0.3, -2.9999998),
(-3.0, -0.3, -2.9999998),
(-3.0, 7.0, -2.9999998),
(-3.0, 1e-10, -2.9999998),
(-3.0, 3.0, -2.9999998),
(-3.0, -3.0, -3.0),
(-3.0, 1e+30, -2.9999998),
(-3.0, -1e+30, -3.0000002),
(-3.0, 1e-40, -2.9999998),
(-3.0, 1.0000001, -2.9999998),
(1e+30, 0.0, 9.9999994e+29),
(1e+30, -0.0, 9.9999994e+29),
(1e+30, 1.0, 9.9999994e+29),
(1e+30, -1.0, 9.9999994e+29),
(1e+30, 2.0, 9.9999994e+29),
(1e+30, -2.0, 9.9999994e+29),
(1e+30, 5.0, 9.9999994e+29),
(1e+30, -5.0, 9.9999994e+29),
(1e+30, 5.5, 9.9999994e+29),
(1e+30, -5.5, 9.9999994e+29),
(1e+30, 0.3, 9.9999994e+29),
(1e+30, -0.3, 9.9999994e+29),
(1e+30, 7.0, 9.9999994e+29),
(1e+30, 1e-10, 9.9999994e+29),
(1e+30, 3.0, 9.9999994e+29),
(1e+30, -3.0, 9.9999994e+29),
(1e+30, 1e+30, 1e+30),
(1e+30, -1e+30, 9.9999994e+29),
(1e+30, 1e-40, 9.9999994e+29),
(1e+30, 1.0000001, 9.9999994e+29),
(-1e+30, 0.0, -9.9999994e+29),
(-1e+30, -0.0, -9.9999994e+29),
(-1e+30, 1.0, -9.9999994e+29),
(-1e+30, -1.0, -9.9999994e+29),
(-1e+30, 2.0, -9.9999994e+29),
(-1e+30, -2.0, -9.9999994e+29),
(-1e+30, 5.0, -9.9999994e+29),
(-1e+30, -5.0, -9.9999994e+29),
(-1e+30, 5.5, -9.9999994e+29),
(-1e+30, -5.5, -9.9999994e+29),
(-1e+30, 0.3, -9.9999994e+29),
(-1e+30, -0.3, -9.9999994e+29),
(-1e+30, 7.0, -9.9999994e+29),
(-1e+30, 1e-10, -9.9999994e+29),
(-1e+30, 3.0, -9.9999994e+29),
(-1e+30, -3.0, -9.9999994e+29),
(-1e+30, 1e+30, -9.9999994e+29),
(-1e+30, -1e+30, -1e+30),
(-1e+30, 1e-40, -9.9999994e+29),
(-1e+30, 1.0000001, -9.9999994e+29),
(1e-40, 0.0, 9.9998e-41),
(1e-40, -0.0, 9.9998e-41),
(1e-40, 1.0, 1.00001e-40),
(1e-40, -1.0, 9.9998e-41),
(1e-40, 2.0, 1.00001e-40),
(1e-40, -2.0, 9.9998e-41),
(1e-40, 5.0, 1.00001e-40),
(1e-40, -5.0, 9.9998e-41),
(1e-40, 5.5, 1.00001e-40),
(1e-40, -5.5, 9.9998e-41),
(1e-40, 0.3, 1.00001e-40),
(1e-40, -0.3, 9.9998e-41),
(1e-40, 7.0, 1.00001e-40),
(1e-40, 1e-10, 1.00001e-40),
(1e-40, 3.0, 1.00001e-40),
(1e-40, -3.0, 9.9998e-41),
(1e-40, 1e+30, 1.00001e-40),
(1e-40, -1e+30, 9.9998e-41),
(1e-40, 1e-40, 1e-40),
(1e-40, 1.0000001, 1.00001e-40),
(1.0000001, 0.0, 1.0),
(1.0000001, -0.0, 1.0),
(1.0000001, 1.0, 1.0),
(1.0000001, -1.0, 1.0),
(1.0000001, 2.0, 1.0000002),
(1.0000001, -2.0, 1.0),
(1.0000001, 5.0, 1.0000002),
(1.0000001, -5.0, 1.0),
(1.0000001, 5.5, 1.0000002),
(1.0000001, -5.5, 1.0),
(1.0000001, 0.3, 1.0),
(1.0000001, -0.3, 1.0),
(1.0000001, 7.0, 1.0000002),
(1.0000001, 1e-10, 1.0),
(1.0000001, 3.0, 1.0000002),
(1.0000001, -3.0, 1.0),
(1.0000001, 1e+30, 1.0000002),
(1.0000001, -1e+30, 1.0),
(1.0000001, 1e-40, 1.0),
(1.0000001, 1.0000001, 1.0000001),
];
for &(x, y, want) in CASES {
check(
"nextafter",
&format!("{x:?}, {y:?}"),
nextafter(x, y),
want,
0.0,
0.0,
);
}
}
#[test]
fn heaviside_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32)] = &[
(0.0, 0.0, 0.0),
(0.0, -0.0, -0.0),
(0.0, 1.0, 1.0),
(0.0, -1.0, -1.0),
(0.0, 2.0, 2.0),
(0.0, -2.0, -2.0),
(0.0, 5.0, 5.0),
(0.0, -5.0, -5.0),
(0.0, 5.5, 5.5),
(0.0, -5.5, -5.5),
(0.0, 0.3, 0.3),
(0.0, -0.3, -0.3),
(0.0, 7.0, 7.0),
(0.0, 1e-10, 1e-10),
(0.0, 3.0, 3.0),
(0.0, -3.0, -3.0),
(0.0, 1e+30, 1e+30),
(0.0, -1e+30, -1e+30),
(0.0, 1e-40, 1e-40),
(0.0, 1.0000001, 1.0000001),
(-0.0, 0.0, 0.0),
(-0.0, -0.0, -0.0),
(-0.0, 1.0, 1.0),
(-0.0, -1.0, -1.0),
(-0.0, 2.0, 2.0),
(-0.0, -2.0, -2.0),
(-0.0, 5.0, 5.0),
(-0.0, -5.0, -5.0),
(-0.0, 5.5, 5.5),
(-0.0, -5.5, -5.5),
(-0.0, 0.3, 0.3),
(-0.0, -0.3, -0.3),
(-0.0, 7.0, 7.0),
(-0.0, 1e-10, 1e-10),
(-0.0, 3.0, 3.0),
(-0.0, -3.0, -3.0),
(-0.0, 1e+30, 1e+30),
(-0.0, -1e+30, -1e+30),
(-0.0, 1e-40, 1e-40),
(-0.0, 1.0000001, 1.0000001),
(1.0, 0.0, 1.0),
(1.0, -0.0, 1.0),
(1.0, 1.0, 1.0),
(1.0, -1.0, 1.0),
(1.0, 2.0, 1.0),
(1.0, -2.0, 1.0),
(1.0, 5.0, 1.0),
(1.0, -5.0, 1.0),
(1.0, 5.5, 1.0),
(1.0, -5.5, 1.0),
(1.0, 0.3, 1.0),
(1.0, -0.3, 1.0),
(1.0, 7.0, 1.0),
(1.0, 1e-10, 1.0),
(1.0, 3.0, 1.0),
(1.0, -3.0, 1.0),
(1.0, 1e+30, 1.0),
(1.0, -1e+30, 1.0),
(1.0, 1e-40, 1.0),
(1.0, 1.0000001, 1.0),
(-1.0, 0.0, 0.0),
(-1.0, -0.0, 0.0),
(-1.0, 1.0, 0.0),
(-1.0, -1.0, 0.0),
(-1.0, 2.0, 0.0),
(-1.0, -2.0, 0.0),
(-1.0, 5.0, 0.0),
(-1.0, -5.0, 0.0),
(-1.0, 5.5, 0.0),
(-1.0, -5.5, 0.0),
(-1.0, 0.3, 0.0),
(-1.0, -0.3, 0.0),
(-1.0, 7.0, 0.0),
(-1.0, 1e-10, 0.0),
(-1.0, 3.0, 0.0),
(-1.0, -3.0, 0.0),
(-1.0, 1e+30, 0.0),
(-1.0, -1e+30, 0.0),
(-1.0, 1e-40, 0.0),
(-1.0, 1.0000001, 0.0),
(2.0, 0.0, 1.0),
(2.0, -0.0, 1.0),
(2.0, 1.0, 1.0),
(2.0, -1.0, 1.0),
(2.0, 2.0, 1.0),
(2.0, -2.0, 1.0),
(2.0, 5.0, 1.0),
(2.0, -5.0, 1.0),
(2.0, 5.5, 1.0),
(2.0, -5.5, 1.0),
(2.0, 0.3, 1.0),
(2.0, -0.3, 1.0),
(2.0, 7.0, 1.0),
(2.0, 1e-10, 1.0),
(2.0, 3.0, 1.0),
(2.0, -3.0, 1.0),
(2.0, 1e+30, 1.0),
(2.0, -1e+30, 1.0),
(2.0, 1e-40, 1.0),
(2.0, 1.0000001, 1.0),
(-2.0, 0.0, 0.0),
(-2.0, -0.0, 0.0),
(-2.0, 1.0, 0.0),
(-2.0, -1.0, 0.0),
(-2.0, 2.0, 0.0),
(-2.0, -2.0, 0.0),
(-2.0, 5.0, 0.0),
(-2.0, -5.0, 0.0),
(-2.0, 5.5, 0.0),
(-2.0, -5.5, 0.0),
(-2.0, 0.3, 0.0),
(-2.0, -0.3, 0.0),
(-2.0, 7.0, 0.0),
(-2.0, 1e-10, 0.0),
(-2.0, 3.0, 0.0),
(-2.0, -3.0, 0.0),
(-2.0, 1e+30, 0.0),
(-2.0, -1e+30, 0.0),
(-2.0, 1e-40, 0.0),
(-2.0, 1.0000001, 0.0),
(5.0, 0.0, 1.0),
(5.0, -0.0, 1.0),
(5.0, 1.0, 1.0),
(5.0, -1.0, 1.0),
(5.0, 2.0, 1.0),
(5.0, -2.0, 1.0),
(5.0, 5.0, 1.0),
(5.0, -5.0, 1.0),
(5.0, 5.5, 1.0),
(5.0, -5.5, 1.0),
(5.0, 0.3, 1.0),
(5.0, -0.3, 1.0),
(5.0, 7.0, 1.0),
(5.0, 1e-10, 1.0),
(5.0, 3.0, 1.0),
(5.0, -3.0, 1.0),
(5.0, 1e+30, 1.0),
(5.0, -1e+30, 1.0),
(5.0, 1e-40, 1.0),
(5.0, 1.0000001, 1.0),
(-5.0, 0.0, 0.0),
(-5.0, -0.0, 0.0),
(-5.0, 1.0, 0.0),
(-5.0, -1.0, 0.0),
(-5.0, 2.0, 0.0),
(-5.0, -2.0, 0.0),
(-5.0, 5.0, 0.0),
(-5.0, -5.0, 0.0),
(-5.0, 5.5, 0.0),
(-5.0, -5.5, 0.0),
(-5.0, 0.3, 0.0),
(-5.0, -0.3, 0.0),
(-5.0, 7.0, 0.0),
(-5.0, 1e-10, 0.0),
(-5.0, 3.0, 0.0),
(-5.0, -3.0, 0.0),
(-5.0, 1e+30, 0.0),
(-5.0, -1e+30, 0.0),
(-5.0, 1e-40, 0.0),
(-5.0, 1.0000001, 0.0),
(5.5, 0.0, 1.0),
(5.5, -0.0, 1.0),
(5.5, 1.0, 1.0),
(5.5, -1.0, 1.0),
(5.5, 2.0, 1.0),
(5.5, -2.0, 1.0),
(5.5, 5.0, 1.0),
(5.5, -5.0, 1.0),
(5.5, 5.5, 1.0),
(5.5, -5.5, 1.0),
(5.5, 0.3, 1.0),
(5.5, -0.3, 1.0),
(5.5, 7.0, 1.0),
(5.5, 1e-10, 1.0),
(5.5, 3.0, 1.0),
(5.5, -3.0, 1.0),
(5.5, 1e+30, 1.0),
(5.5, -1e+30, 1.0),
(5.5, 1e-40, 1.0),
(5.5, 1.0000001, 1.0),
(-5.5, 0.0, 0.0),
(-5.5, -0.0, 0.0),
(-5.5, 1.0, 0.0),
(-5.5, -1.0, 0.0),
(-5.5, 2.0, 0.0),
(-5.5, -2.0, 0.0),
(-5.5, 5.0, 0.0),
(-5.5, -5.0, 0.0),
(-5.5, 5.5, 0.0),
(-5.5, -5.5, 0.0),
(-5.5, 0.3, 0.0),
(-5.5, -0.3, 0.0),
(-5.5, 7.0, 0.0),
(-5.5, 1e-10, 0.0),
(-5.5, 3.0, 0.0),
(-5.5, -3.0, 0.0),
(-5.5, 1e+30, 0.0),
(-5.5, -1e+30, 0.0),
(-5.5, 1e-40, 0.0),
(-5.5, 1.0000001, 0.0),
(0.3, 0.0, 1.0),
(0.3, -0.0, 1.0),
(0.3, 1.0, 1.0),
(0.3, -1.0, 1.0),
(0.3, 2.0, 1.0),
(0.3, -2.0, 1.0),
(0.3, 5.0, 1.0),
(0.3, -5.0, 1.0),
(0.3, 5.5, 1.0),
(0.3, -5.5, 1.0),
(0.3, 0.3, 1.0),
(0.3, -0.3, 1.0),
(0.3, 7.0, 1.0),
(0.3, 1e-10, 1.0),
(0.3, 3.0, 1.0),
(0.3, -3.0, 1.0),
(0.3, 1e+30, 1.0),
(0.3, -1e+30, 1.0),
(0.3, 1e-40, 1.0),
(0.3, 1.0000001, 1.0),
(-0.3, 0.0, 0.0),
(-0.3, -0.0, 0.0),
(-0.3, 1.0, 0.0),
(-0.3, -1.0, 0.0),
(-0.3, 2.0, 0.0),
(-0.3, -2.0, 0.0),
(-0.3, 5.0, 0.0),
(-0.3, -5.0, 0.0),
(-0.3, 5.5, 0.0),
(-0.3, -5.5, 0.0),
(-0.3, 0.3, 0.0),
(-0.3, -0.3, 0.0),
(-0.3, 7.0, 0.0),
(-0.3, 1e-10, 0.0),
(-0.3, 3.0, 0.0),
(-0.3, -3.0, 0.0),
(-0.3, 1e+30, 0.0),
(-0.3, -1e+30, 0.0),
(-0.3, 1e-40, 0.0),
(-0.3, 1.0000001, 0.0),
(7.0, 0.0, 1.0),
(7.0, -0.0, 1.0),
(7.0, 1.0, 1.0),
(7.0, -1.0, 1.0),
(7.0, 2.0, 1.0),
(7.0, -2.0, 1.0),
(7.0, 5.0, 1.0),
(7.0, -5.0, 1.0),
(7.0, 5.5, 1.0),
(7.0, -5.5, 1.0),
(7.0, 0.3, 1.0),
(7.0, -0.3, 1.0),
(7.0, 7.0, 1.0),
(7.0, 1e-10, 1.0),
(7.0, 3.0, 1.0),
(7.0, -3.0, 1.0),
(7.0, 1e+30, 1.0),
(7.0, -1e+30, 1.0),
(7.0, 1e-40, 1.0),
(7.0, 1.0000001, 1.0),
(1e-10, 0.0, 1.0),
(1e-10, -0.0, 1.0),
(1e-10, 1.0, 1.0),
(1e-10, -1.0, 1.0),
(1e-10, 2.0, 1.0),
(1e-10, -2.0, 1.0),
(1e-10, 5.0, 1.0),
(1e-10, -5.0, 1.0),
(1e-10, 5.5, 1.0),
(1e-10, -5.5, 1.0),
(1e-10, 0.3, 1.0),
(1e-10, -0.3, 1.0),
(1e-10, 7.0, 1.0),
(1e-10, 1e-10, 1.0),
(1e-10, 3.0, 1.0),
(1e-10, -3.0, 1.0),
(1e-10, 1e+30, 1.0),
(1e-10, -1e+30, 1.0),
(1e-10, 1e-40, 1.0),
(1e-10, 1.0000001, 1.0),
(3.0, 0.0, 1.0),
(3.0, -0.0, 1.0),
(3.0, 1.0, 1.0),
(3.0, -1.0, 1.0),
(3.0, 2.0, 1.0),
(3.0, -2.0, 1.0),
(3.0, 5.0, 1.0),
(3.0, -5.0, 1.0),
(3.0, 5.5, 1.0),
(3.0, -5.5, 1.0),
(3.0, 0.3, 1.0),
(3.0, -0.3, 1.0),
(3.0, 7.0, 1.0),
(3.0, 1e-10, 1.0),
(3.0, 3.0, 1.0),
(3.0, -3.0, 1.0),
(3.0, 1e+30, 1.0),
(3.0, -1e+30, 1.0),
(3.0, 1e-40, 1.0),
(3.0, 1.0000001, 1.0),
(-3.0, 0.0, 0.0),
(-3.0, -0.0, 0.0),
(-3.0, 1.0, 0.0),
(-3.0, -1.0, 0.0),
(-3.0, 2.0, 0.0),
(-3.0, -2.0, 0.0),
(-3.0, 5.0, 0.0),
(-3.0, -5.0, 0.0),
(-3.0, 5.5, 0.0),
(-3.0, -5.5, 0.0),
(-3.0, 0.3, 0.0),
(-3.0, -0.3, 0.0),
(-3.0, 7.0, 0.0),
(-3.0, 1e-10, 0.0),
(-3.0, 3.0, 0.0),
(-3.0, -3.0, 0.0),
(-3.0, 1e+30, 0.0),
(-3.0, -1e+30, 0.0),
(-3.0, 1e-40, 0.0),
(-3.0, 1.0000001, 0.0),
(1e+30, 0.0, 1.0),
(1e+30, -0.0, 1.0),
(1e+30, 1.0, 1.0),
(1e+30, -1.0, 1.0),
(1e+30, 2.0, 1.0),
(1e+30, -2.0, 1.0),
(1e+30, 5.0, 1.0),
(1e+30, -5.0, 1.0),
(1e+30, 5.5, 1.0),
(1e+30, -5.5, 1.0),
(1e+30, 0.3, 1.0),
(1e+30, -0.3, 1.0),
(1e+30, 7.0, 1.0),
(1e+30, 1e-10, 1.0),
(1e+30, 3.0, 1.0),
(1e+30, -3.0, 1.0),
(1e+30, 1e+30, 1.0),
(1e+30, -1e+30, 1.0),
(1e+30, 1e-40, 1.0),
(1e+30, 1.0000001, 1.0),
(-1e+30, 0.0, 0.0),
(-1e+30, -0.0, 0.0),
(-1e+30, 1.0, 0.0),
(-1e+30, -1.0, 0.0),
(-1e+30, 2.0, 0.0),
(-1e+30, -2.0, 0.0),
(-1e+30, 5.0, 0.0),
(-1e+30, -5.0, 0.0),
(-1e+30, 5.5, 0.0),
(-1e+30, -5.5, 0.0),
(-1e+30, 0.3, 0.0),
(-1e+30, -0.3, 0.0),
(-1e+30, 7.0, 0.0),
(-1e+30, 1e-10, 0.0),
(-1e+30, 3.0, 0.0),
(-1e+30, -3.0, 0.0),
(-1e+30, 1e+30, 0.0),
(-1e+30, -1e+30, 0.0),
(-1e+30, 1e-40, 0.0),
(-1e+30, 1.0000001, 0.0),
(1e-40, 0.0, 1.0),
(1e-40, -0.0, 1.0),
(1e-40, 1.0, 1.0),
(1e-40, -1.0, 1.0),
(1e-40, 2.0, 1.0),
(1e-40, -2.0, 1.0),
(1e-40, 5.0, 1.0),
(1e-40, -5.0, 1.0),
(1e-40, 5.5, 1.0),
(1e-40, -5.5, 1.0),
(1e-40, 0.3, 1.0),
(1e-40, -0.3, 1.0),
(1e-40, 7.0, 1.0),
(1e-40, 1e-10, 1.0),
(1e-40, 3.0, 1.0),
(1e-40, -3.0, 1.0),
(1e-40, 1e+30, 1.0),
(1e-40, -1e+30, 1.0),
(1e-40, 1e-40, 1.0),
(1e-40, 1.0000001, 1.0),
(1.0000001, 0.0, 1.0),
(1.0000001, -0.0, 1.0),
(1.0000001, 1.0, 1.0),
(1.0000001, -1.0, 1.0),
(1.0000001, 2.0, 1.0),
(1.0000001, -2.0, 1.0),
(1.0000001, 5.0, 1.0),
(1.0000001, -5.0, 1.0),
(1.0000001, 5.5, 1.0),
(1.0000001, -5.5, 1.0),
(1.0000001, 0.3, 1.0),
(1.0000001, -0.3, 1.0),
(1.0000001, 7.0, 1.0),
(1.0000001, 1e-10, 1.0),
(1.0000001, 3.0, 1.0),
(1.0000001, -3.0, 1.0),
(1.0000001, 1e+30, 1.0),
(1.0000001, -1e+30, 1.0),
(1.0000001, 1e-40, 1.0),
(1.0000001, 1.0000001, 1.0),
];
for &(x, y, want) in CASES {
check(
"heaviside",
&format!("{x:?}, {y:?}"),
heaviside(x, y),
want,
0.0,
0.0,
);
}
}
#[test]
fn logaddexp_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32)] = &[
(0.0, 0.0, 0.6931472),
(0.0, -0.0, 0.6931472),
(0.0, 1.0, 1.3132617),
(0.0, -1.0, 0.3132617),
(0.0, 2.0, 2.126928),
(0.0, -2.0, 0.126928),
(0.0, 5.0, 5.0067153),
(0.0, -5.0, 0.0067153485),
(0.0, 5.5, 5.5040784),
(0.0, -5.5, 0.0040784436),
(0.0, 0.3, 0.8543552),
(0.0, -0.3, 0.5543552),
(0.0, 7.0, 7.000911),
(0.0, 1e-10, 0.6931472),
(0.0, 3.0, 3.0485873),
(0.0, -3.0, 0.048587352),
(0.0, 1e+30, 1e+30),
(0.0, -1e+30, 0.0),
(0.0, 1e-40, 0.6931472),
(0.0, 1.0000001, 1.3132617),
(-0.0, 0.0, 0.6931472),
(-0.0, -0.0, 0.6931472),
(-0.0, 1.0, 1.3132617),
(-0.0, -1.0, 0.3132617),
(-0.0, 2.0, 2.126928),
(-0.0, -2.0, 0.126928),
(-0.0, 5.0, 5.0067153),
(-0.0, -5.0, 0.0067153485),
(-0.0, 5.5, 5.5040784),
(-0.0, -5.5, 0.0040784436),
(-0.0, 0.3, 0.8543552),
(-0.0, -0.3, 0.5543552),
(-0.0, 7.0, 7.000911),
(-0.0, 1e-10, 0.6931472),
(-0.0, 3.0, 3.0485873),
(-0.0, -3.0, 0.048587352),
(-0.0, 1e+30, 1e+30),
(-0.0, -1e+30, 0.0),
(-0.0, 1e-40, 0.6931472),
(-0.0, 1.0000001, 1.3132617),
(1.0, 0.0, 1.3132617),
(1.0, -0.0, 1.3132617),
(1.0, 1.0, 1.6931472),
(1.0, -1.0, 1.126928),
(1.0, 2.0, 2.3132617),
(1.0, -2.0, 1.0485873),
(1.0, 5.0, 5.01815),
(1.0, -5.0, 1.0024757),
(1.0, 5.5, 5.511048),
(1.0, -5.5, 1.0015023),
(1.0, 0.3, 1.4031861),
(1.0, -0.3, 1.2410085),
(1.0, 7.0, 7.0024757),
(1.0, 1e-10, 1.3132617),
(1.0, 3.0, 3.126928),
(1.0, -3.0, 1.01815),
(1.0, 1e+30, 1e+30),
(1.0, -1e+30, 1.0),
(1.0, 1e-40, 1.3132617),
(1.0, 1.0000001, 1.6931472),
(-1.0, 0.0, 0.3132617),
(-1.0, -0.0, 0.3132617),
(-1.0, 1.0, 1.126928),
(-1.0, -1.0, -0.30685282),
(-1.0, 2.0, 2.0485873),
(-1.0, -2.0, -0.6867383),
(-1.0, 5.0, 5.0024757),
(-1.0, -5.0, -0.9818501),
(-1.0, 5.5, 5.5015025),
(-1.0, -5.5, -0.9889523),
(-1.0, 0.3, 0.5410085),
(-1.0, -0.3, 0.10318604),
(-1.0, 7.0, 7.000335),
(-1.0, 1e-10, 0.3132617),
(-1.0, 3.0, 3.0181499),
(-1.0, -3.0, -0.873072),
(-1.0, 1e+30, 1e+30),
(-1.0, -1e+30, -1.0),
(-1.0, 1e-40, 0.3132617),
(-1.0, 1.0000001, 1.1269281),
(2.0, 0.0, 2.126928),
(2.0, -0.0, 2.126928),
(2.0, 1.0, 2.3132617),
(2.0, -1.0, 2.0485873),
(2.0, 2.0, 2.6931472),
(2.0, -2.0, 2.0181499),
(2.0, 5.0, 5.0485873),
(2.0, -5.0, 2.0009115),
(2.0, 5.5, 5.5297503),
(2.0, -5.5, 2.000553),
(2.0, 0.3, 2.1677861),
(2.0, -0.3, 2.0955455),
(2.0, 7.0, 7.0067153),
(2.0, 1e-10, 2.126928),
(2.0, 3.0, 3.3132617),
(2.0, -3.0, 2.0067153),
(2.0, 1e+30, 1e+30),
(2.0, -1e+30, 2.0),
(2.0, 1e-40, 2.126928),
(2.0, 1.0000001, 2.3132617),
(-2.0, 0.0, 0.126928),
(-2.0, -0.0, 0.126928),
(-2.0, 1.0, 1.0485873),
(-2.0, -1.0, -0.6867383),
(-2.0, 2.0, 2.0181499),
(-2.0, -2.0, -1.3068528),
(-2.0, 5.0, 5.000911),
(-2.0, -5.0, -1.9514127),
(-2.0, 5.5, 5.500553),
(-2.0, -5.5, -1.9702495),
(-2.0, 0.3, 0.39554548),
(-2.0, -0.3, -0.13221398),
(-2.0, 7.0, 7.0001235),
(-2.0, 1e-10, 0.126928),
(-2.0, 3.0, 3.0067153),
(-2.0, -3.0, -1.6867383),
(-2.0, 1e+30, 1e+30),
(-2.0, -1e+30, -2.0),
(-2.0, 1e-40, 0.126928),
(-2.0, 1.0000001, 1.0485874),
(5.0, 0.0, 5.0067153),
(5.0, -0.0, 5.0067153),
(5.0, 1.0, 5.01815),
(5.0, -1.0, 5.0024757),
(5.0, 2.0, 5.0485873),
(5.0, -2.0, 5.000911),
(5.0, 5.0, 5.693147),
(5.0, -5.0, 5.0000453),
(5.0, 5.5, 5.974077),
(5.0, -5.5, 5.0000277),
(5.0, 0.3, 5.009054),
(5.0, -0.3, 5.004979),
(5.0, 7.0, 7.126928),
(5.0, 1e-10, 5.0067153),
(5.0, 3.0, 5.126928),
(5.0, -3.0, 5.000335),
(5.0, 1e+30, 1e+30),
(5.0, -1e+30, 5.0),
(5.0, 1e-40, 5.0067153),
(5.0, 1.0000001, 5.01815),
(-5.0, 0.0, 0.0067153485),
(-5.0, -0.0, 0.0067153485),
(-5.0, 1.0, 1.0024757),
(-5.0, -1.0, -0.9818501),
(-5.0, 2.0, 2.0009115),
(-5.0, -2.0, -1.9514127),
(-5.0, 5.0, 5.0000453),
(-5.0, -5.0, -4.306853),
(-5.0, 5.5, 5.5000277),
(-5.0, -5.5, -4.525923),
(-5.0, 0.3, 0.30497918),
(-5.0, -0.3, -0.29094586),
(-5.0, 7.0, 7.000006),
(-5.0, 1e-10, 0.0067153485),
(-5.0, 3.0, 3.0003355),
(-5.0, -3.0, -2.873072),
(-5.0, 1e+30, 1e+30),
(-5.0, -1e+30, -5.0),
(-5.0, 1e-40, 0.0067153485),
(-5.0, 1.0000001, 1.0024759),
(5.5, 0.0, 5.5040784),
(5.5, -0.0, 5.5040784),
(5.5, 1.0, 5.511048),
(5.5, -1.0, 5.5015025),
(5.5, 2.0, 5.5297503),
(5.5, -2.0, 5.500553),
(5.5, 5.0, 5.974077),
(5.5, -5.0, 5.5000277),
(5.5, 5.5, 6.193147),
(5.5, -5.5, 5.5000167),
(5.5, 0.3, 5.5055013),
(5.5, -0.3, 5.503023),
(5.5, 7.0, 7.201413),
(5.5, 1e-10, 5.5040784),
(5.5, 3.0, 5.57889),
(5.5, -3.0, 5.5002036),
(5.5, 1e+30, 1e+30),
(5.5, -1e+30, 5.5),
(5.5, 1e-40, 5.5040784),
(5.5, 1.0000001, 5.511048),
(-5.5, 0.0, 0.0040784436),
(-5.5, -0.0, 0.0040784436),
(-5.5, 1.0, 1.0015023),
(-5.5, -1.0, -0.9889523),
(-5.5, 2.0, 2.000553),
(-5.5, -2.0, -1.9702495),
(-5.5, 5.0, 5.0000277),
(-5.5, -5.0, -4.525923),
(-5.5, 5.5, 5.5000167),
(-5.5, -5.5, -4.806853),
(-5.5, 0.3, 0.30302298),
(-5.5, -0.3, -0.2944986),
(-5.5, 7.0, 7.000004),
(-5.5, 1e-10, 0.0040784436),
(-5.5, 3.0, 3.0002034),
(-5.5, -3.0, -2.9211102),
(-5.5, 1e+30, 1e+30),
(-5.5, -1e+30, -5.5),
(-5.5, 1e-40, 0.0040784436),
(-5.5, 1.0000001, 1.0015024),
(0.3, 0.0, 0.8543552),
(0.3, -0.0, 0.8543552),
(0.3, 1.0, 1.4031861),
(0.3, -1.0, 0.5410085),
(0.3, 2.0, 2.1677861),
(0.3, -2.0, 0.39554548),
(0.3, 5.0, 5.009054),
(0.3, -5.0, 0.30497918),
(0.3, 5.5, 5.5055013),
(0.3, -5.5, 0.30302298),
(0.3, 0.3, 0.9931472),
(0.3, -0.3, 0.737488),
(0.3, 7.0, 7.0012302),
(0.3, 1e-10, 0.8543552),
(0.3, 3.0, 3.0650434),
(0.3, -3.0, 0.33621928),
(0.3, 1e+30, 1e+30),
(0.3, -1e+30, 0.3),
(0.3, 1e-40, 0.8543552),
(0.3, 1.0000001, 1.4031861),
(-0.3, 0.0, 0.5543552),
(-0.3, -0.0, 0.5543552),
(-0.3, 1.0, 1.2410085),
(-0.3, -1.0, 0.10318604),
(-0.3, 2.0, 2.0955455),
(-0.3, -2.0, -0.13221398),
(-0.3, 5.0, 5.004979),
(-0.3, -5.0, -0.29094586),
(-0.3, 5.5, 5.503023),
(-0.3, -5.5, -0.2944986),
(-0.3, 0.3, 0.737488),
(-0.3, -0.3, 0.39314717),
(-0.3, 7.0, 7.000675),
(-0.3, 1e-10, 0.5543552),
(-0.3, 3.0, 3.0362194),
(-0.3, -3.0, -0.23495644),
(-0.3, 1e+30, 1e+30),
(-0.3, -1e+30, -0.3),
(-0.3, 1e-40, 0.5543552),
(-0.3, 1.0000001, 1.2410085),
(7.0, 0.0, 7.000911),
(7.0, -0.0, 7.000911),
(7.0, 1.0, 7.0024757),
(7.0, -1.0, 7.000335),
(7.0, 2.0, 7.0067153),
(7.0, -2.0, 7.0001235),
(7.0, 5.0, 7.126928),
(7.0, -5.0, 7.000006),
(7.0, 5.5, 7.201413),
(7.0, -5.5, 7.000004),
(7.0, 0.3, 7.0012302),
(7.0, -0.3, 7.000675),
(7.0, 7.0, 7.693147),
(7.0, 1e-10, 7.000911),
(7.0, 3.0, 7.01815),
(7.0, -3.0, 7.0000453),
(7.0, 1e+30, 1e+30),
(7.0, -1e+30, 7.0),
(7.0, 1e-40, 7.000911),
(7.0, 1.0000001, 7.0024757),
(1e-10, 0.0, 0.6931472),
(1e-10, -0.0, 0.6931472),
(1e-10, 1.0, 1.3132617),
(1e-10, -1.0, 0.3132617),
(1e-10, 2.0, 2.126928),
(1e-10, -2.0, 0.126928),
(1e-10, 5.0, 5.0067153),
(1e-10, -5.0, 0.0067153485),
(1e-10, 5.5, 5.5040784),
(1e-10, -5.5, 0.0040784436),
(1e-10, 0.3, 0.8543552),
(1e-10, -0.3, 0.5543552),
(1e-10, 7.0, 7.000911),
(1e-10, 1e-10, 0.6931472),
(1e-10, 3.0, 3.0485873),
(1e-10, -3.0, 0.048587352),
(1e-10, 1e+30, 1e+30),
(1e-10, -1e+30, 1e-10),
(1e-10, 1e-40, 0.6931472),
(1e-10, 1.0000001, 1.3132617),
(3.0, 0.0, 3.0485873),
(3.0, -0.0, 3.0485873),
(3.0, 1.0, 3.126928),
(3.0, -1.0, 3.0181499),
(3.0, 2.0, 3.3132617),
(3.0, -2.0, 3.0067153),
(3.0, 5.0, 5.126928),
(3.0, -5.0, 3.0003355),
(3.0, 5.5, 5.57889),
(3.0, -5.5, 3.0002034),
(3.0, 0.3, 3.0650434),
(3.0, -0.3, 3.0362194),
(3.0, 7.0, 7.01815),
(3.0, 1e-10, 3.0485873),
(3.0, 3.0, 3.6931472),
(3.0, -3.0, 3.0024757),
(3.0, 1e+30, 1e+30),
(3.0, -1e+30, 3.0),
(3.0, 1e-40, 3.0485873),
(3.0, 1.0000001, 3.126928),
(-3.0, 0.0, 0.048587352),
(-3.0, -0.0, 0.048587352),
(-3.0, 1.0, 1.01815),
(-3.0, -1.0, -0.873072),
(-3.0, 2.0, 2.0067153),
(-3.0, -2.0, -1.6867383),
(-3.0, 5.0, 5.000335),
(-3.0, -5.0, -2.873072),
(-3.0, 5.5, 5.5002036),
(-3.0, -5.5, -2.9211102),
(-3.0, 0.3, 0.33621928),
(-3.0, -0.3, -0.23495644),
(-3.0, 7.0, 7.0000453),
(-3.0, 1e-10, 0.048587352),
(-3.0, 3.0, 3.0024757),
(-3.0, -3.0, -2.3068528),
(-3.0, 1e+30, 1e+30),
(-3.0, -1e+30, -3.0),
(-3.0, 1e-40, 0.048587352),
(-3.0, 1.0000001, 1.0181501),
(1e+30, 0.0, 1e+30),
(1e+30, -0.0, 1e+30),
(1e+30, 1.0, 1e+30),
(1e+30, -1.0, 1e+30),
(1e+30, 2.0, 1e+30),
(1e+30, -2.0, 1e+30),
(1e+30, 5.0, 1e+30),
(1e+30, -5.0, 1e+30),
(1e+30, 5.5, 1e+30),
(1e+30, -5.5, 1e+30),
(1e+30, 0.3, 1e+30),
(1e+30, -0.3, 1e+30),
(1e+30, 7.0, 1e+30),
(1e+30, 1e-10, 1e+30),
(1e+30, 3.0, 1e+30),
(1e+30, -3.0, 1e+30),
(1e+30, 1e+30, 1e+30),
(1e+30, -1e+30, 1e+30),
(1e+30, 1e-40, 1e+30),
(1e+30, 1.0000001, 1e+30),
(-1e+30, 0.0, 0.0),
(-1e+30, -0.0, 0.0),
(-1e+30, 1.0, 1.0),
(-1e+30, -1.0, -1.0),
(-1e+30, 2.0, 2.0),
(-1e+30, -2.0, -2.0),
(-1e+30, 5.0, 5.0),
(-1e+30, -5.0, -5.0),
(-1e+30, 5.5, 5.5),
(-1e+30, -5.5, -5.5),
(-1e+30, 0.3, 0.3),
(-1e+30, -0.3, -0.3),
(-1e+30, 7.0, 7.0),
(-1e+30, 1e-10, 1e-10),
(-1e+30, 3.0, 3.0),
(-1e+30, -3.0, -3.0),
(-1e+30, 1e+30, 1e+30),
(-1e+30, -1e+30, -1e+30),
(-1e+30, 1e-40, 1e-40),
(-1e+30, 1.0000001, 1.0000001),
(1e-40, 0.0, 0.6931472),
(1e-40, -0.0, 0.6931472),
(1e-40, 1.0, 1.3132617),
(1e-40, -1.0, 0.3132617),
(1e-40, 2.0, 2.126928),
(1e-40, -2.0, 0.126928),
(1e-40, 5.0, 5.0067153),
(1e-40, -5.0, 0.0067153485),
(1e-40, 5.5, 5.5040784),
(1e-40, -5.5, 0.0040784436),
(1e-40, 0.3, 0.8543552),
(1e-40, -0.3, 0.5543552),
(1e-40, 7.0, 7.000911),
(1e-40, 1e-10, 0.6931472),
(1e-40, 3.0, 3.0485873),
(1e-40, -3.0, 0.048587352),
(1e-40, 1e+30, 1e+30),
(1e-40, -1e+30, 1e-40),
(1e-40, 1e-40, 0.6931472),
(1e-40, 1.0000001, 1.3132617),
(1.0000001, 0.0, 1.3132617),
(1.0000001, -0.0, 1.3132617),
(1.0000001, 1.0, 1.6931472),
(1.0000001, -1.0, 1.1269281),
(1.0000001, 2.0, 2.3132617),
(1.0000001, -2.0, 1.0485874),
(1.0000001, 5.0, 5.01815),
(1.0000001, -5.0, 1.0024759),
(1.0000001, 5.5, 5.511048),
(1.0000001, -5.5, 1.0015024),
(1.0000001, 0.3, 1.4031861),
(1.0000001, -0.3, 1.2410085),
(1.0000001, 7.0, 7.0024757),
(1.0000001, 1e-10, 1.3132617),
(1.0000001, 3.0, 3.126928),
(1.0000001, -3.0, 1.0181501),
(1.0000001, 1e+30, 1e+30),
(1.0000001, -1e+30, 1.0000001),
(1.0000001, 1e-40, 1.3132617),
(1.0000001, 1.0000001, 1.6931473),
];
for &(x, y, want) in CASES {
check(
"logaddexp",
&format!("{x:?}, {y:?}"),
logaddexp(x, y),
want,
1e-5,
0.0,
);
}
}
#[test]
fn logaddexp2_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32)] = &[
(0.0, 0.0, 1.0),
(0.0, -0.0, 1.0),
(0.0, 1.0, 1.5849625),
(0.0, -1.0, 0.5849625),
(0.0, 2.0, 2.321928),
(0.0, -2.0, 0.32192808),
(0.0, 5.0, 5.044394),
(0.0, -5.0, 0.044394117),
(0.0, 5.5, 5.5315323),
(0.0, -5.5, 0.03153224),
(0.0, 0.3, 1.157784),
(0.0, -0.3, 0.8577839),
(0.0, 7.0, 7.011227),
(0.0, 1e-10, 1.0),
(0.0, 3.0, 3.169925),
(0.0, -3.0, 0.16992499),
(0.0, 1e+30, 1e+30),
(0.0, -1e+30, 0.0),
(0.0, 1e-40, 1.0),
(0.0, 1.0000001, 1.5849626),
(-0.0, 0.0, 1.0),
(-0.0, -0.0, 1.0),
(-0.0, 1.0, 1.5849625),
(-0.0, -1.0, 0.5849625),
(-0.0, 2.0, 2.321928),
(-0.0, -2.0, 0.32192808),
(-0.0, 5.0, 5.044394),
(-0.0, -5.0, 0.044394117),
(-0.0, 5.5, 5.5315323),
(-0.0, -5.5, 0.03153224),
(-0.0, 0.3, 1.157784),
(-0.0, -0.3, 0.8577839),
(-0.0, 7.0, 7.011227),
(-0.0, 1e-10, 1.0),
(-0.0, 3.0, 3.169925),
(-0.0, -3.0, 0.16992499),
(-0.0, 1e+30, 1e+30),
(-0.0, -1e+30, 0.0),
(-0.0, 1e-40, 1.0),
(-0.0, 1.0000001, 1.5849626),
(1.0, 0.0, 1.5849625),
(1.0, -0.0, 1.5849625),
(1.0, 1.0, 2.0),
(1.0, -1.0, 1.321928),
(1.0, 2.0, 2.5849624),
(1.0, -2.0, 1.169925),
(1.0, 5.0, 5.087463),
(1.0, -5.0, 1.0223678),
(1.0, 5.5, 5.56239),
(1.0, -5.5, 1.0158522),
(1.0, 0.3, 1.6920452),
(1.0, -0.3, 1.491726),
(1.0, 7.0, 7.022368),
(1.0, 1e-10, 1.5849625),
(1.0, 3.0, 3.321928),
(1.0, -3.0, 1.0874629),
(1.0, 1e+30, 1e+30),
(1.0, -1e+30, 1.0),
(1.0, 1e-40, 1.5849625),
(1.0, 1.0000001, 2.0),
(-1.0, 0.0, 0.5849625),
(-1.0, -0.0, 0.5849625),
(-1.0, 1.0, 1.321928),
(-1.0, -1.0, 0.0),
(-1.0, 2.0, 2.169925),
(-1.0, -2.0, -0.4150375),
(-1.0, 5.0, 5.022368),
(-1.0, -5.0, -0.91253716),
(-1.0, 5.5, 5.5158525),
(-1.0, -5.5, -0.93761),
(-1.0, 0.3, 0.7917261),
(-1.0, -0.3, 0.3920452),
(-1.0, 7.0, 7.005625),
(-1.0, 1e-10, 0.5849625),
(-1.0, 3.0, 3.087463),
(-1.0, -3.0, -0.6780719),
(-1.0, 1e+30, 1e+30),
(-1.0, -1e+30, -1.0),
(-1.0, 1e-40, 0.5849625),
(-1.0, 1.0000001, 1.3219283),
(2.0, 0.0, 2.321928),
(2.0, -0.0, 2.321928),
(2.0, 1.0, 2.5849624),
(2.0, -1.0, 2.169925),
(2.0, 2.0, 3.0),
(2.0, -2.0, 2.087463),
(2.0, 5.0, 5.169925),
(2.0, -5.0, 2.0112274),
(2.0, 5.5, 5.6221933),
(2.0, -5.5, 2.007948),
(2.0, 0.3, 2.3871264),
(2.0, -0.3, 2.2667122),
(2.0, 7.0, 7.044394),
(2.0, 1e-10, 2.321928),
(2.0, 3.0, 3.5849624),
(2.0, -3.0, 2.044394),
(2.0, 1e+30, 1e+30),
(2.0, -1e+30, 2.0),
(2.0, 1e-40, 2.321928),
(2.0, 1.0000001, 2.5849626),
(-2.0, 0.0, 0.32192808),
(-2.0, -0.0, 0.32192808),
(-2.0, 1.0, 1.169925),
(-2.0, -1.0, -0.4150375),
(-2.0, 2.0, 2.087463),
(-2.0, -2.0, -1.0),
(-2.0, 5.0, 5.011227),
(-2.0, -5.0, -1.830075),
(-2.0, 5.5, 5.507948),
(-2.0, -5.5, -1.8778065),
(-2.0, 0.3, 0.5667123),
(-2.0, -0.3, 0.08712655),
(-2.0, 7.0, 7.0028152),
(-2.0, 1e-10, 0.32192808),
(-2.0, 3.0, 3.044394),
(-2.0, -3.0, -1.4150375),
(-2.0, 1e+30, 1e+30),
(-2.0, -1e+30, -2.0),
(-2.0, 1e-40, 0.32192808),
(-2.0, 1.0000001, 1.1699251),
(5.0, 0.0, 5.044394),
(5.0, -0.0, 5.044394),
(5.0, 1.0, 5.087463),
(5.0, -1.0, 5.022368),
(5.0, 2.0, 5.169925),
(5.0, -2.0, 5.011227),
(5.0, 5.0, 6.0),
(5.0, -5.0, 5.001408),
(5.0, 5.5, 6.271553),
(5.0, -5.5, 5.000996),
(5.0, 0.3, 5.054464),
(5.0, -0.3, 5.036163),
(5.0, 7.0, 7.321928),
(5.0, 1e-10, 5.044394),
(5.0, 3.0, 5.321928),
(5.0, -3.0, 5.005625),
(5.0, 1e+30, 1e+30),
(5.0, -1e+30, 5.0),
(5.0, 1e-40, 5.044394),
(5.0, 1.0000001, 5.087463),
(-5.0, 0.0, 0.044394117),
(-5.0, -0.0, 0.044394117),
(-5.0, 1.0, 1.0223678),
(-5.0, -1.0, -0.91253716),
(-5.0, 2.0, 2.0112274),
(-5.0, -2.0, -1.830075),
(-5.0, 5.0, 5.001408),
(-5.0, -5.0, -4.0),
(-5.0, 5.5, 5.500996),
(-5.0, -5.5, -4.228447),
(-5.0, 0.3, 0.33616275),
(-5.0, -0.3, -0.24553594),
(-5.0, 7.0, 7.0003524),
(-5.0, 1e-10, 0.044394117),
(-5.0, 3.0, 3.0056245),
(-5.0, -3.0, -2.678072),
(-5.0, 1e+30, 1e+30),
(-5.0, -1e+30, -5.0),
(-5.0, 1e-40, 0.044394117),
(-5.0, 1.0000001, 1.022368),
(5.5, 0.0, 5.5315323),
(5.5, -0.0, 5.5315323),
(5.5, 1.0, 5.56239),
(5.5, -1.0, 5.5158525),
(5.5, 2.0, 5.6221933),
(5.5, -2.0, 5.507948),
(5.5, 5.0, 6.271553),
(5.5, -5.0, 5.500996),
(5.5, 5.5, 6.5),
(5.5, -5.5, 5.5007043),
(5.5, 0.3, 5.538724),
(5.5, -0.3, 5.5256643),
(5.5, 7.0, 7.436752),
(5.5, 1e-10, 5.5315323),
(5.5, 3.0, 5.7348404),
(5.5, -3.0, 5.503979),
(5.5, 1e+30, 1e+30),
(5.5, -1e+30, 5.5),
(5.5, 1e-40, 5.5315323),
(5.5, 1.0000001, 5.56239),
(-5.5, 0.0, 0.03153224),
(-5.5, -0.0, 0.03153224),
(-5.5, 1.0, 1.0158522),
(-5.5, -1.0, -0.93761),
(-5.5, 2.0, 2.007948),
(-5.5, -2.0, -1.8778065),
(-5.5, 5.0, 5.000996),
(-5.5, -5.0, -4.228447),
(-5.5, 5.5, 5.5007043),
(-5.5, -5.5, -4.5),
(-5.5, 0.3, 0.32566446),
(-5.5, -0.3, -0.2612763),
(-5.5, 7.0, 7.000249),
(-5.5, 1e-10, 0.03153224),
(-5.5, 3.0, 3.0039794),
(-5.5, -3.0, -2.7651594),
(-5.5, 1e+30, 1e+30),
(-5.5, -1e+30, -5.5),
(-5.5, 1e-40, 0.03153224),
(-5.5, 1.0000001, 1.0158523),
(0.3, 0.0, 1.157784),
(0.3, -0.0, 1.157784),
(0.3, 1.0, 1.6920452),
(0.3, -1.0, 0.7917261),
(0.3, 2.0, 2.3871264),
(0.3, -2.0, 0.5667123),
(0.3, 5.0, 5.054464),
(0.3, -5.0, 0.33616275),
(0.3, 5.5, 5.538724),
(0.3, -5.5, 0.32566446),
(0.3, 0.3, 1.3),
(0.3, -0.3, 1.0309694),
(0.3, 7.0, 7.01381),
(0.3, 1e-10, 1.157784),
(0.3, 3.0, 3.2065096),
(0.3, -3.0, 0.43951082),
(0.3, 1e+30, 1e+30),
(0.3, -1e+30, 0.3),
(0.3, 1e-40, 1.157784),
(0.3, 1.0000001, 1.6920453),
(-0.3, 0.0, 0.8577839),
(-0.3, -0.0, 0.8577839),
(-0.3, 1.0, 1.491726),
(-0.3, -1.0, 0.3920452),
(-0.3, 2.0, 2.2667122),
(-0.3, -2.0, 0.08712655),
(-0.3, 5.0, 5.036163),
(-0.3, -5.0, -0.24553594),
(-0.3, 5.5, 5.5256643),
(-0.3, -5.5, -0.2612763),
(-0.3, 0.3, 1.0309694),
(-0.3, -0.3, 0.7),
(-0.3, 7.0, 7.009126),
(-0.3, 1e-10, 0.8577839),
(-0.3, 3.0, 3.1395109),
(-0.3, -3.0, -0.09349051),
(-0.3, 1e+30, 1e+30),
(-0.3, -1e+30, -0.3),
(-0.3, 1e-40, 0.8577839),
(-0.3, 1.0000001, 1.4917262),
(7.0, 0.0, 7.011227),
(7.0, -0.0, 7.011227),
(7.0, 1.0, 7.022368),
(7.0, -1.0, 7.005625),
(7.0, 2.0, 7.044394),
(7.0, -2.0, 7.0028152),
(7.0, 5.0, 7.321928),
(7.0, -5.0, 7.0003524),
(7.0, 5.5, 7.436752),
(7.0, -5.5, 7.000249),
(7.0, 0.3, 7.01381),
(7.0, -0.3, 7.009126),
(7.0, 7.0, 8.0),
(7.0, 1e-10, 7.011227),
(7.0, 3.0, 7.087463),
(7.0, -3.0, 7.001408),
(7.0, 1e+30, 1e+30),
(7.0, -1e+30, 7.0),
(7.0, 1e-40, 7.011227),
(7.0, 1.0000001, 7.022368),
(1e-10, 0.0, 1.0),
(1e-10, -0.0, 1.0),
(1e-10, 1.0, 1.5849625),
(1e-10, -1.0, 0.5849625),
(1e-10, 2.0, 2.321928),
(1e-10, -2.0, 0.32192808),
(1e-10, 5.0, 5.044394),
(1e-10, -5.0, 0.044394117),
(1e-10, 5.5, 5.5315323),
(1e-10, -5.5, 0.03153224),
(1e-10, 0.3, 1.157784),
(1e-10, -0.3, 0.8577839),
(1e-10, 7.0, 7.011227),
(1e-10, 1e-10, 1.0),
(1e-10, 3.0, 3.169925),
(1e-10, -3.0, 0.16992499),
(1e-10, 1e+30, 1e+30),
(1e-10, -1e+30, 1e-10),
(1e-10, 1e-40, 1.0),
(1e-10, 1.0000001, 1.5849626),
(3.0, 0.0, 3.169925),
(3.0, -0.0, 3.169925),
(3.0, 1.0, 3.321928),
(3.0, -1.0, 3.087463),
(3.0, 2.0, 3.5849624),
(3.0, -2.0, 3.044394),
(3.0, 5.0, 5.321928),
(3.0, -5.0, 3.0056245),
(3.0, 5.5, 5.7348404),
(3.0, -5.5, 3.0039794),
(3.0, 0.3, 3.2065096),
(3.0, -0.3, 3.1395109),
(3.0, 7.0, 7.087463),
(3.0, 1e-10, 3.169925),
(3.0, 3.0, 4.0),
(3.0, -3.0, 3.0223677),
(3.0, 1e+30, 1e+30),
(3.0, -1e+30, 3.0),
(3.0, 1e-40, 3.169925),
(3.0, 1.0000001, 3.321928),
(-3.0, 0.0, 0.16992499),
(-3.0, -0.0, 0.16992499),
(-3.0, 1.0, 1.0874629),
(-3.0, -1.0, -0.6780719),
(-3.0, 2.0, 2.044394),
(-3.0, -2.0, -1.4150375),
(-3.0, 5.0, 5.005625),
(-3.0, -5.0, -2.678072),
(-3.0, 5.5, 5.503979),
(-3.0, -5.5, -2.7651594),
(-3.0, 0.3, 0.43951082),
(-3.0, -0.3, -0.09349051),
(-3.0, 7.0, 7.001408),
(-3.0, 1e-10, 0.16992499),
(-3.0, 3.0, 3.0223677),
(-3.0, -3.0, -2.0),
(-3.0, 1e+30, 1e+30),
(-3.0, -1e+30, -3.0),
(-3.0, 1e-40, 0.16992499),
(-3.0, 1.0000001, 1.0874629),
(1e+30, 0.0, 1e+30),
(1e+30, -0.0, 1e+30),
(1e+30, 1.0, 1e+30),
(1e+30, -1.0, 1e+30),
(1e+30, 2.0, 1e+30),
(1e+30, -2.0, 1e+30),
(1e+30, 5.0, 1e+30),
(1e+30, -5.0, 1e+30),
(1e+30, 5.5, 1e+30),
(1e+30, -5.5, 1e+30),
(1e+30, 0.3, 1e+30),
(1e+30, -0.3, 1e+30),
(1e+30, 7.0, 1e+30),
(1e+30, 1e-10, 1e+30),
(1e+30, 3.0, 1e+30),
(1e+30, -3.0, 1e+30),
(1e+30, 1e+30, 1e+30),
(1e+30, -1e+30, 1e+30),
(1e+30, 1e-40, 1e+30),
(1e+30, 1.0000001, 1e+30),
(-1e+30, 0.0, 0.0),
(-1e+30, -0.0, 0.0),
(-1e+30, 1.0, 1.0),
(-1e+30, -1.0, -1.0),
(-1e+30, 2.0, 2.0),
(-1e+30, -2.0, -2.0),
(-1e+30, 5.0, 5.0),
(-1e+30, -5.0, -5.0),
(-1e+30, 5.5, 5.5),
(-1e+30, -5.5, -5.5),
(-1e+30, 0.3, 0.3),
(-1e+30, -0.3, -0.3),
(-1e+30, 7.0, 7.0),
(-1e+30, 1e-10, 1e-10),
(-1e+30, 3.0, 3.0),
(-1e+30, -3.0, -3.0),
(-1e+30, 1e+30, 1e+30),
(-1e+30, -1e+30, -1e+30),
(-1e+30, 1e-40, 1e-40),
(-1e+30, 1.0000001, 1.0000001),
(1e-40, 0.0, 1.0),
(1e-40, -0.0, 1.0),
(1e-40, 1.0, 1.5849625),
(1e-40, -1.0, 0.5849625),
(1e-40, 2.0, 2.321928),
(1e-40, -2.0, 0.32192808),
(1e-40, 5.0, 5.044394),
(1e-40, -5.0, 0.044394117),
(1e-40, 5.5, 5.5315323),
(1e-40, -5.5, 0.03153224),
(1e-40, 0.3, 1.157784),
(1e-40, -0.3, 0.8577839),
(1e-40, 7.0, 7.011227),
(1e-40, 1e-10, 1.0),
(1e-40, 3.0, 3.169925),
(1e-40, -3.0, 0.16992499),
(1e-40, 1e+30, 1e+30),
(1e-40, -1e+30, 1e-40),
(1e-40, 1e-40, 1.0),
(1e-40, 1.0000001, 1.5849626),
(1.0000001, 0.0, 1.5849626),
(1.0000001, -0.0, 1.5849626),
(1.0000001, 1.0, 2.0),
(1.0000001, -1.0, 1.3219283),
(1.0000001, 2.0, 2.5849626),
(1.0000001, -2.0, 1.1699251),
(1.0000001, 5.0, 5.087463),
(1.0000001, -5.0, 1.022368),
(1.0000001, 5.5, 5.56239),
(1.0000001, -5.5, 1.0158523),
(1.0000001, 0.3, 1.6920453),
(1.0000001, -0.3, 1.4917262),
(1.0000001, 7.0, 7.022368),
(1.0000001, 1e-10, 1.5849626),
(1.0000001, 3.0, 3.321928),
(1.0000001, -3.0, 1.0874629),
(1.0000001, 1e+30, 1e+30),
(1.0000001, -1e+30, 1.0000001),
(1.0000001, 1e-40, 1.5849626),
(1.0000001, 1.0000001, 2.0),
];
for &(x, y, want) in CASES {
check(
"logaddexp2",
&format!("{x:?}, {y:?}"),
logaddexp2(x, y),
want,
1e-5,
0.0,
);
}
}
#[test]
fn divmod_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::NAN, 0.0, f64::NAN, f64::NAN),
(f64::NAN, -0.0, f64::NAN, f64::NAN),
(f64::NAN, 1.0, f64::NAN, f64::NAN),
(f64::NAN, -1.0, f64::NAN, f64::NAN),
(f64::NAN, 2.0, f64::NAN, f64::NAN),
(f64::NAN, -2.0, f64::NAN, f64::NAN),
(f64::NAN, 5.0, f64::NAN, f64::NAN),
(f64::NAN, -5.0, f64::NAN, f64::NAN),
(f64::NAN, 5.5, f64::NAN, f64::NAN),
(f64::NAN, -5.5, f64::NAN, f64::NAN),
(f64::NAN, 0.3, f64::NAN, f64::NAN),
(f64::NAN, -0.3, f64::NAN, f64::NAN),
(f64::NAN, 7.0, f64::NAN, f64::NAN),
(f64::NAN, 1e+300, f64::NAN, f64::NAN),
(f64::NAN, -1e+300, f64::NAN, f64::NAN),
(f64::NAN, 5e-324, f64::NAN, f64::NAN),
(f64::NAN, -5e-324, f64::NAN, f64::NAN),
(f64::NAN, 1e-10, f64::NAN, f64::NAN),
(f64::NAN, 3.0, f64::NAN, f64::NAN),
(f64::NAN, -3.0, f64::NAN, f64::NAN),
(f64::INFINITY, f64::NAN, f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY, f64::NAN, f64::NAN),
(f64::INFINITY, f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::INFINITY, 0.0, f64::INFINITY, f64::NAN),
(f64::INFINITY, -0.0, f64::NEG_INFINITY, f64::NAN),
(f64::INFINITY, 1.0, f64::NAN, f64::NAN),
(f64::INFINITY, -1.0, f64::NAN, f64::NAN),
(f64::INFINITY, 2.0, f64::NAN, f64::NAN),
(f64::INFINITY, -2.0, f64::NAN, f64::NAN),
(f64::INFINITY, 5.0, f64::NAN, f64::NAN),
(f64::INFINITY, -5.0, f64::NAN, f64::NAN),
(f64::INFINITY, 5.5, f64::NAN, f64::NAN),
(f64::INFINITY, -5.5, f64::NAN, f64::NAN),
(f64::INFINITY, 0.3, f64::NAN, f64::NAN),
(f64::INFINITY, -0.3, f64::NAN, f64::NAN),
(f64::INFINITY, 7.0, f64::NAN, f64::NAN),
(f64::INFINITY, 1e+300, f64::NAN, f64::NAN),
(f64::INFINITY, -1e+300, f64::NAN, f64::NAN),
(f64::INFINITY, 5e-324, f64::NAN, f64::NAN),
(f64::INFINITY, -5e-324, f64::NAN, f64::NAN),
(f64::INFINITY, 1e-10, f64::NAN, f64::NAN),
(f64::INFINITY, 3.0, f64::NAN, f64::NAN),
(f64::INFINITY, -3.0, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::NAN, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::INFINITY, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, 0.0, f64::NEG_INFINITY, f64::NAN),
(f64::NEG_INFINITY, -0.0, f64::INFINITY, f64::NAN),
(f64::NEG_INFINITY, 1.0, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, -1.0, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, 2.0, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, -2.0, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, 5.0, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, -5.0, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, 5.5, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, -5.5, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, 0.3, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, -0.3, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, 7.0, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, 1e+300, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, -1e+300, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, 5e-324, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, -5e-324, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, 1e-10, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, 3.0, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, -3.0, f64::NAN, f64::NAN),
(0.0, f64::NAN, f64::NAN, f64::NAN),
(0.0, f64::INFINITY, 0.0, 0.0),
(0.0, f64::NEG_INFINITY, -0.0, -0.0),
(0.0, 0.0, f64::NAN, f64::NAN),
(0.0, -0.0, f64::NAN, f64::NAN),
(0.0, 1.0, 0.0, 0.0),
(0.0, -1.0, -0.0, -0.0),
(0.0, 2.0, 0.0, 0.0),
(0.0, -2.0, -0.0, -0.0),
(0.0, 5.0, 0.0, 0.0),
(0.0, -5.0, -0.0, -0.0),
(0.0, 5.5, 0.0, 0.0),
(0.0, -5.5, -0.0, -0.0),
(0.0, 0.3, 0.0, 0.0),
(0.0, -0.3, -0.0, -0.0),
(0.0, 7.0, 0.0, 0.0),
(0.0, 1e+300, 0.0, 0.0),
(0.0, -1e+300, -0.0, -0.0),
(0.0, 5e-324, 0.0, 0.0),
(0.0, -5e-324, -0.0, -0.0),
(0.0, 1e-10, 0.0, 0.0),
(0.0, 3.0, 0.0, 0.0),
(0.0, -3.0, -0.0, -0.0),
(-0.0, f64::NAN, f64::NAN, f64::NAN),
(-0.0, f64::INFINITY, -0.0, 0.0),
(-0.0, f64::NEG_INFINITY, 0.0, -0.0),
(-0.0, 0.0, f64::NAN, f64::NAN),
(-0.0, -0.0, f64::NAN, f64::NAN),
(-0.0, 1.0, -0.0, 0.0),
(-0.0, -1.0, 0.0, -0.0),
(-0.0, 2.0, -0.0, 0.0),
(-0.0, -2.0, 0.0, -0.0),
(-0.0, 5.0, -0.0, 0.0),
(-0.0, -5.0, 0.0, -0.0),
(-0.0, 5.5, -0.0, 0.0),
(-0.0, -5.5, 0.0, -0.0),
(-0.0, 0.3, -0.0, 0.0),
(-0.0, -0.3, 0.0, -0.0),
(-0.0, 7.0, -0.0, 0.0),
(-0.0, 1e+300, -0.0, 0.0),
(-0.0, -1e+300, 0.0, -0.0),
(-0.0, 5e-324, -0.0, 0.0),
(-0.0, -5e-324, 0.0, -0.0),
(-0.0, 1e-10, -0.0, 0.0),
(-0.0, 3.0, -0.0, 0.0),
(-0.0, -3.0, 0.0, -0.0),
(1.0, f64::NAN, f64::NAN, f64::NAN),
(1.0, f64::INFINITY, 0.0, 1.0),
(1.0, f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(1.0, 0.0, f64::INFINITY, f64::NAN),
(1.0, -0.0, f64::NEG_INFINITY, f64::NAN),
(1.0, 1.0, 1.0, 0.0),
(1.0, -1.0, -1.0, -0.0),
(1.0, 2.0, 0.0, 1.0),
(1.0, -2.0, -1.0, -1.0),
(1.0, 5.0, 0.0, 1.0),
(1.0, -5.0, -1.0, -4.0),
(1.0, 5.5, 0.0, 1.0),
(1.0, -5.5, -1.0, -4.5),
(1.0, 0.3, 3.0, 0.10000000000000003),
(1.0, -0.3, -4.0, -0.19999999999999996),
(1.0, 7.0, 0.0, 1.0),
(1.0, 1e+300, 0.0, 1.0),
(1.0, -1e+300, -1.0, -1e+300),
(1.0, 5e-324, f64::INFINITY, 0.0),
(1.0, -5e-324, f64::NEG_INFINITY, -0.0),
(1.0, 1e-10, 9999999999.0, 9.999996356780269e-11),
(1.0, 3.0, 0.0, 1.0),
(1.0, -3.0, -1.0, -2.0),
(-1.0, f64::NAN, f64::NAN, f64::NAN),
(-1.0, f64::INFINITY, -1.0, f64::INFINITY),
(-1.0, f64::NEG_INFINITY, 0.0, -1.0),
(-1.0, 0.0, f64::NEG_INFINITY, f64::NAN),
(-1.0, -0.0, f64::INFINITY, f64::NAN),
(-1.0, 1.0, -1.0, 0.0),
(-1.0, -1.0, 1.0, -0.0),
(-1.0, 2.0, -1.0, 1.0),
(-1.0, -2.0, 0.0, -1.0),
(-1.0, 5.0, -1.0, 4.0),
(-1.0, -5.0, 0.0, -1.0),
(-1.0, 5.5, -1.0, 4.5),
(-1.0, -5.5, 0.0, -1.0),
(-1.0, 0.3, -4.0, 0.19999999999999996),
(-1.0, -0.3, 3.0, -0.10000000000000003),
(-1.0, 7.0, -1.0, 6.0),
(-1.0, 1e+300, -1.0, 1e+300),
(-1.0, -1e+300, 0.0, -1.0),
(-1.0, 5e-324, f64::NEG_INFINITY, 0.0),
(-1.0, -5e-324, f64::INFINITY, -0.0),
(-1.0, 1e-10, -10000000000.0, 3.643219731549774e-17),
(-1.0, 3.0, -1.0, 2.0),
(-1.0, -3.0, 0.0, -1.0),
(2.0, f64::NAN, f64::NAN, f64::NAN),
(2.0, f64::INFINITY, 0.0, 2.0),
(2.0, f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(2.0, 0.0, f64::INFINITY, f64::NAN),
(2.0, -0.0, f64::NEG_INFINITY, f64::NAN),
(2.0, 1.0, 2.0, 0.0),
(2.0, -1.0, -2.0, -0.0),
(2.0, 2.0, 1.0, 0.0),
(2.0, -2.0, -1.0, -0.0),
(2.0, 5.0, 0.0, 2.0),
(2.0, -5.0, -1.0, -3.0),
(2.0, 5.5, 0.0, 2.0),
(2.0, -5.5, -1.0, -3.5),
(2.0, 0.3, 6.0, 0.20000000000000007),
(2.0, -0.3, -7.0, -0.09999999999999992),
(2.0, 7.0, 0.0, 2.0),
(2.0, 1e+300, 0.0, 2.0),
(2.0, -1e+300, -1.0, -1e+300),
(2.0, 5e-324, f64::INFINITY, 0.0),
(2.0, -5e-324, f64::NEG_INFINITY, -0.0),
(2.0, 1e-10, 19999999999.0, 9.999992713560537e-11),
(2.0, 3.0, 0.0, 2.0),
(2.0, -3.0, -1.0, -1.0),
(-2.0, f64::NAN, f64::NAN, f64::NAN),
(-2.0, f64::INFINITY, -1.0, f64::INFINITY),
(-2.0, f64::NEG_INFINITY, 0.0, -2.0),
(-2.0, 0.0, f64::NEG_INFINITY, f64::NAN),
(-2.0, -0.0, f64::INFINITY, f64::NAN),
(-2.0, 1.0, -2.0, 0.0),
(-2.0, -1.0, 2.0, -0.0),
(-2.0, 2.0, -1.0, 0.0),
(-2.0, -2.0, 1.0, -0.0),
(-2.0, 5.0, -1.0, 3.0),
(-2.0, -5.0, 0.0, -2.0),
(-2.0, 5.5, -1.0, 3.5),
(-2.0, -5.5, 0.0, -2.0),
(-2.0, 0.3, -7.0, 0.09999999999999992),
(-2.0, -0.3, 6.0, -0.20000000000000007),
(-2.0, 7.0, -1.0, 5.0),
(-2.0, 1e+300, -1.0, 1e+300),
(-2.0, -1e+300, 0.0, -2.0),
(-2.0, 5e-324, f64::NEG_INFINITY, 0.0),
(-2.0, -5e-324, f64::INFINITY, -0.0),
(-2.0, 1e-10, -20000000000.0, 7.286439463099548e-17),
(-2.0, 3.0, -1.0, 1.0),
(-2.0, -3.0, 0.0, -2.0),
(5.0, f64::NAN, f64::NAN, f64::NAN),
(5.0, f64::INFINITY, 0.0, 5.0),
(5.0, f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(5.0, 0.0, f64::INFINITY, f64::NAN),
(5.0, -0.0, f64::NEG_INFINITY, f64::NAN),
(5.0, 1.0, 5.0, 0.0),
(5.0, -1.0, -5.0, -0.0),
(5.0, 2.0, 2.0, 1.0),
(5.0, -2.0, -3.0, -1.0),
(5.0, 5.0, 1.0, 0.0),
(5.0, -5.0, -1.0, -0.0),
(5.0, 5.5, 0.0, 5.0),
(5.0, -5.5, -1.0, -0.5),
(5.0, 0.3, 16.0, 0.20000000000000018),
(5.0, -0.3, -17.0, -0.09999999999999981),
(5.0, 7.0, 0.0, 5.0),
(5.0, 1e+300, 0.0, 5.0),
(5.0, -1e+300, -1.0, -1e+300),
(5.0, 5e-324, f64::INFINITY, 0.0),
(5.0, -5e-324, f64::NEG_INFINITY, -0.0),
(5.0, 1e-10, 49999999999.0, 9.999981783901343e-11),
(5.0, 3.0, 1.0, 2.0),
(5.0, -3.0, -2.0, -1.0),
(-5.0, f64::NAN, f64::NAN, f64::NAN),
(-5.0, f64::INFINITY, -1.0, f64::INFINITY),
(-5.0, f64::NEG_INFINITY, 0.0, -5.0),
(-5.0, 0.0, f64::NEG_INFINITY, f64::NAN),
(-5.0, -0.0, f64::INFINITY, f64::NAN),
(-5.0, 1.0, -5.0, 0.0),
(-5.0, -1.0, 5.0, -0.0),
(-5.0, 2.0, -3.0, 1.0),
(-5.0, -2.0, 2.0, -1.0),
(-5.0, 5.0, -1.0, 0.0),
(-5.0, -5.0, 1.0, -0.0),
(-5.0, 5.5, -1.0, 0.5),
(-5.0, -5.5, 0.0, -5.0),
(-5.0, 0.3, -17.0, 0.09999999999999981),
(-5.0, -0.3, 16.0, -0.20000000000000018),
(-5.0, 7.0, -1.0, 2.0),
(-5.0, 1e+300, -1.0, 1e+300),
(-5.0, -1e+300, 0.0, -5.0),
(-5.0, 5e-324, f64::NEG_INFINITY, 0.0),
(-5.0, -5e-324, f64::INFINITY, -0.0),
(-5.0, 1e-10, -50000000000.0, 1.821609865774887e-16),
(-5.0, 3.0, -2.0, 1.0),
(-5.0, -3.0, 1.0, -2.0),
(5.5, f64::NAN, f64::NAN, f64::NAN),
(5.5, f64::INFINITY, 0.0, 5.5),
(5.5, f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(5.5, 0.0, f64::INFINITY, f64::NAN),
(5.5, -0.0, f64::NEG_INFINITY, f64::NAN),
(5.5, 1.0, 5.0, 0.5),
(5.5, -1.0, -6.0, -0.5),
(5.5, 2.0, 2.0, 1.5),
(5.5, -2.0, -3.0, -0.5),
(5.5, 5.0, 1.0, 0.5),
(5.5, -5.0, -2.0, -4.5),
(5.5, 5.5, 1.0, 0.0),
(5.5, -5.5, -1.0, -0.0),
(5.5, 0.3, 18.0, 0.1000000000000002),
(5.5, -0.3, -19.0, -0.1999999999999998),
(5.5, 7.0, 0.0, 5.5),
(5.5, 1e+300, 0.0, 5.5),
(5.5, -1e+300, -1.0, -1e+300),
(5.5, 5e-324, f64::INFINITY, 0.0),
(5.5, -5e-324, f64::NEG_INFINITY, -0.0),
(5.5, 1e-10, 54999999999.0, 9.999979962291477e-11),
(5.5, 3.0, 1.0, 2.5),
(5.5, -3.0, -2.0, -0.5),
(-5.5, f64::NAN, f64::NAN, f64::NAN),
(-5.5, f64::INFINITY, -1.0, f64::INFINITY),
(-5.5, f64::NEG_INFINITY, 0.0, -5.5),
(-5.5, 0.0, f64::NEG_INFINITY, f64::NAN),
(-5.5, -0.0, f64::INFINITY, f64::NAN),
(-5.5, 1.0, -6.0, 0.5),
(-5.5, -1.0, 5.0, -0.5),
(-5.5, 2.0, -3.0, 0.5),
(-5.5, -2.0, 2.0, -1.5),
(-5.5, 5.0, -2.0, 4.5),
(-5.5, -5.0, 1.0, -0.5),
(-5.5, 5.5, -1.0, 0.0),
(-5.5, -5.5, 1.0, -0.0),
(-5.5, 0.3, -19.0, 0.1999999999999998),
(-5.5, -0.3, 18.0, -0.1000000000000002),
(-5.5, 7.0, -1.0, 1.5),
(-5.5, 1e+300, -1.0, 1e+300),
(-5.5, -1e+300, 0.0, -5.5),
(-5.5, 5e-324, f64::NEG_INFINITY, 0.0),
(-5.5, -5e-324, f64::INFINITY, -0.0),
(-5.5, 1e-10, -55000000000.0, 2.0037708523523758e-16),
(-5.5, 3.0, -2.0, 0.5),
(-5.5, -3.0, 1.0, -2.5),
(0.3, f64::NAN, f64::NAN, f64::NAN),
(0.3, f64::INFINITY, 0.0, 0.3),
(0.3, f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(0.3, 0.0, f64::INFINITY, f64::NAN),
(0.3, -0.0, f64::NEG_INFINITY, f64::NAN),
(0.3, 1.0, 0.0, 0.3),
(0.3, -1.0, -1.0, -0.7),
(0.3, 2.0, 0.0, 0.3),
(0.3, -2.0, -1.0, -1.7),
(0.3, 5.0, 0.0, 0.3),
(0.3, -5.0, -1.0, -4.7),
(0.3, 5.5, 0.0, 0.3),
(0.3, -5.5, -1.0, -5.2),
(0.3, 0.3, 1.0, 0.0),
(0.3, -0.3, -1.0, -0.0),
(0.3, 7.0, 0.0, 0.3),
(0.3, 1e+300, 0.0, 0.3),
(0.3, -1e+300, -1.0, -1e+300),
(0.3, 5e-324, f64::INFINITY, 0.0),
(0.3, -5e-324, f64::NEG_INFINITY, -0.0),
(0.3, 1e-10, 2999999999.0, 9.999997796811056e-11),
(0.3, 3.0, 0.0, 0.3),
(0.3, -3.0, -1.0, -2.7),
(-0.3, f64::NAN, f64::NAN, f64::NAN),
(-0.3, f64::INFINITY, -1.0, f64::INFINITY),
(-0.3, f64::NEG_INFINITY, 0.0, -0.3),
(-0.3, 0.0, f64::NEG_INFINITY, f64::NAN),
(-0.3, -0.0, f64::INFINITY, f64::NAN),
(-0.3, 1.0, -1.0, 0.7),
(-0.3, -1.0, 0.0, -0.3),
(-0.3, 2.0, -1.0, 1.7),
(-0.3, -2.0, 0.0, -0.3),
(-0.3, 5.0, -1.0, 4.7),
(-0.3, -5.0, 0.0, -0.3),
(-0.3, 5.5, -1.0, 5.2),
(-0.3, -5.5, 0.0, -0.3),
(-0.3, 0.3, -1.0, 0.0),
(-0.3, -0.3, 1.0, -0.0),
(-0.3, 7.0, -1.0, 6.7),
(-0.3, 1e+300, -1.0, 1e+300),
(-0.3, -1e+300, 0.0, -0.3),
(-0.3, 5e-324, f64::NEG_INFINITY, 0.0),
(-0.3, -5e-324, f64::INFINITY, -0.0),
(-0.3, 1e-10, -3000000000.0, 2.2031889440900888e-17),
(-0.3, 3.0, -1.0, 2.7),
(-0.3, -3.0, 0.0, -0.3),
(7.0, f64::NAN, f64::NAN, f64::NAN),
(7.0, f64::INFINITY, 0.0, 7.0),
(7.0, f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(7.0, 0.0, f64::INFINITY, f64::NAN),
(7.0, -0.0, f64::NEG_INFINITY, f64::NAN),
(7.0, 1.0, 7.0, 0.0),
(7.0, -1.0, -7.0, -0.0),
(7.0, 2.0, 3.0, 1.0),
(7.0, -2.0, -4.0, -1.0),
(7.0, 5.0, 1.0, 2.0),
(7.0, -5.0, -2.0, -3.0),
(7.0, 5.5, 1.0, 1.5),
(7.0, -5.5, -2.0, -4.0),
(7.0, 0.3, 23.0, 0.10000000000000026),
(7.0, -0.3, -24.0, -0.19999999999999973),
(7.0, 7.0, 1.0, 0.0),
(7.0, 1e+300, 0.0, 7.0),
(7.0, -1e+300, -1.0, -1e+300),
(7.0, 5e-324, f64::INFINITY, 0.0),
(7.0, -5e-324, f64::NEG_INFINITY, -0.0),
(7.0, 1e-10, 69999999999.0, 9.99997449746188e-11),
(7.0, 3.0, 2.0, 1.0),
(7.0, -3.0, -3.0, -2.0),
(1e+300, f64::NAN, f64::NAN, f64::NAN),
(1e+300, f64::INFINITY, 0.0, 1e+300),
(1e+300, f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(1e+300, 0.0, f64::INFINITY, f64::NAN),
(1e+300, -0.0, f64::NEG_INFINITY, f64::NAN),
(1e+300, 1.0, 1e+300, 0.0),
(1e+300, -1.0, -1e+300, -0.0),
(1e+300, 2.0, 5e+299, 0.0),
(1e+300, -2.0, -5e+299, -0.0),
(1e+300, 5.0, 2e+299, 0.0),
(1e+300, -5.0, -2e+299, -0.0),
(1e+300, 5.5, 1.8181818181818183e+299, 1.5),
(1e+300, -5.5, -1.8181818181818183e+299, -4.0),
(1e+300, 0.3, 3.3333333333333335e+300, 0.15321850028067768),
(1e+300, -0.3, -3.3333333333333335e+300, -0.1467814997193223),
(1e+300, 7.0, 1.4285714285714286e+299, 1.0),
(1e+300, 1e+300, 1.0, 0.0),
(1e+300, -1e+300, -1.0, -0.0),
(1e+300, 5e-324, f64::INFINITY, 0.0),
(1e+300, -5e-324, f64::NEG_INFINITY, -0.0),
(1e+300, 1e-10, f64::INFINITY, 5.476641984772742e-11),
(1e+300, 3.0, 3.3333333333333335e+299, 0.0),
(1e+300, -3.0, -3.3333333333333335e+299, -0.0),
(-1e+300, f64::NAN, f64::NAN, f64::NAN),
(-1e+300, f64::INFINITY, -1.0, f64::INFINITY),
(-1e+300, f64::NEG_INFINITY, 0.0, -1e+300),
(-1e+300, 0.0, f64::NEG_INFINITY, f64::NAN),
(-1e+300, -0.0, f64::INFINITY, f64::NAN),
(-1e+300, 1.0, -1e+300, 0.0),
(-1e+300, -1.0, 1e+300, -0.0),
(-1e+300, 2.0, -5e+299, 0.0),
(-1e+300, -2.0, 5e+299, -0.0),
(-1e+300, 5.0, -2e+299, 0.0),
(-1e+300, -5.0, 2e+299, -0.0),
(-1e+300, 5.5, -1.8181818181818183e+299, 4.0),
(-1e+300, -5.5, 1.8181818181818183e+299, -1.5),
(-1e+300, 0.3, -3.3333333333333335e+300, 0.1467814997193223),
(-1e+300, -0.3, 3.3333333333333335e+300, -0.15321850028067768),
(-1e+300, 7.0, -1.4285714285714286e+299, 6.0),
(-1e+300, 1e+300, -1.0, 0.0),
(-1e+300, -1e+300, 1.0, -0.0),
(-1e+300, 5e-324, f64::NEG_INFINITY, 0.0),
(-1e+300, -5e-324, f64::INFINITY, -0.0),
(-1e+300, 1e-10, f64::NEG_INFINITY, 4.5233580152272584e-11),
(-1e+300, 3.0, -3.3333333333333335e+299, 0.0),
(-1e+300, -3.0, 3.3333333333333335e+299, -0.0),
(5e-324, f64::NAN, f64::NAN, f64::NAN),
(5e-324, f64::INFINITY, 0.0, 5e-324),
(5e-324, f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(5e-324, 0.0, f64::INFINITY, f64::NAN),
(5e-324, -0.0, f64::NEG_INFINITY, f64::NAN),
(5e-324, 1.0, 0.0, 5e-324),
(5e-324, -1.0, -1.0, -1.0),
(5e-324, 2.0, 0.0, 5e-324),
(5e-324, -2.0, -1.0, -2.0),
(5e-324, 5.0, 0.0, 5e-324),
(5e-324, -5.0, -1.0, -5.0),
(5e-324, 5.5, 0.0, 5e-324),
(5e-324, -5.5, -1.0, -5.5),
(5e-324, 0.3, 0.0, 5e-324),
(5e-324, -0.3, -1.0, -0.3),
(5e-324, 7.0, 0.0, 5e-324),
(5e-324, 1e+300, 0.0, 5e-324),
(5e-324, -1e+300, -1.0, -1e+300),
(5e-324, 5e-324, 1.0, 0.0),
(5e-324, -5e-324, -1.0, -0.0),
(5e-324, 1e-10, 0.0, 5e-324),
(5e-324, 3.0, 0.0, 5e-324),
(5e-324, -3.0, -1.0, -3.0),
(-5e-324, f64::NAN, f64::NAN, f64::NAN),
(-5e-324, f64::INFINITY, -1.0, f64::INFINITY),
(-5e-324, f64::NEG_INFINITY, 0.0, -5e-324),
(-5e-324, 0.0, f64::NEG_INFINITY, f64::NAN),
(-5e-324, -0.0, f64::INFINITY, f64::NAN),
(-5e-324, 1.0, -1.0, 1.0),
(-5e-324, -1.0, 0.0, -5e-324),
(-5e-324, 2.0, -1.0, 2.0),
(-5e-324, -2.0, 0.0, -5e-324),
(-5e-324, 5.0, -1.0, 5.0),
(-5e-324, -5.0, 0.0, -5e-324),
(-5e-324, 5.5, -1.0, 5.5),
(-5e-324, -5.5, 0.0, -5e-324),
(-5e-324, 0.3, -1.0, 0.3),
(-5e-324, -0.3, 0.0, -5e-324),
(-5e-324, 7.0, -1.0, 7.0),
(-5e-324, 1e+300, -1.0, 1e+300),
(-5e-324, -1e+300, 0.0, -5e-324),
(-5e-324, 5e-324, -1.0, 0.0),
(-5e-324, -5e-324, 1.0, -0.0),
(-5e-324, 1e-10, -1.0, 1e-10),
(-5e-324, 3.0, -1.0, 3.0),
(-5e-324, -3.0, 0.0, -5e-324),
(1e-10, f64::NAN, f64::NAN, f64::NAN),
(1e-10, f64::INFINITY, 0.0, 1e-10),
(1e-10, f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(1e-10, 0.0, f64::INFINITY, f64::NAN),
(1e-10, -0.0, f64::NEG_INFINITY, f64::NAN),
(1e-10, 1.0, 0.0, 1e-10),
(1e-10, -1.0, -1.0, -0.9999999999),
(1e-10, 2.0, 0.0, 1e-10),
(1e-10, -2.0, -1.0, -1.9999999999),
(1e-10, 5.0, 0.0, 1e-10),
(1e-10, -5.0, -1.0, -4.9999999999),
(1e-10, 5.5, 0.0, 1e-10),
(1e-10, -5.5, -1.0, -5.4999999999),
(1e-10, 0.3, 0.0, 1e-10),
(1e-10, -0.3, -1.0, -0.2999999999),
(1e-10, 7.0, 0.0, 1e-10),
(1e-10, 1e+300, 0.0, 1e-10),
(1e-10, -1e+300, -1.0, -1e+300),
(1e-10, 5e-324, f64::INFINITY, 0.0),
(1e-10, -5e-324, f64::NEG_INFINITY, -0.0),
(1e-10, 1e-10, 1.0, 0.0),
(1e-10, 3.0, 0.0, 1e-10),
(1e-10, -3.0, -1.0, -2.9999999999),
(3.0, f64::NAN, f64::NAN, f64::NAN),
(3.0, f64::INFINITY, 0.0, 3.0),
(3.0, f64::NEG_INFINITY, -1.0, f64::NEG_INFINITY),
(3.0, 0.0, f64::INFINITY, f64::NAN),
(3.0, -0.0, f64::NEG_INFINITY, f64::NAN),
(3.0, 1.0, 3.0, 0.0),
(3.0, -1.0, -3.0, -0.0),
(3.0, 2.0, 1.0, 1.0),
(3.0, -2.0, -2.0, -1.0),
(3.0, 5.0, 0.0, 3.0),
(3.0, -5.0, -1.0, -2.0),
(3.0, 5.5, 0.0, 3.0),
(3.0, -5.5, -1.0, -2.5),
(3.0, 0.3, 10.0, 1.1102230246251565e-16),
(3.0, -0.3, -11.0, -0.2999999999999999),
(3.0, 7.0, 0.0, 3.0),
(3.0, 1e+300, 0.0, 3.0),
(3.0, -1e+300, -1.0, -1e+300),
(3.0, 5e-324, f64::INFINITY, 0.0),
(3.0, -5e-324, f64::NEG_INFINITY, -0.0),
(3.0, 1e-10, 29999999999.0, 9.999989070340806e-11),
(3.0, 3.0, 1.0, 0.0),
(3.0, -3.0, -1.0, -0.0),
(-3.0, f64::NAN, f64::NAN, f64::NAN),
(-3.0, f64::INFINITY, -1.0, f64::INFINITY),
(-3.0, f64::NEG_INFINITY, 0.0, -3.0),
(-3.0, 0.0, f64::NEG_INFINITY, f64::NAN),
(-3.0, -0.0, f64::INFINITY, f64::NAN),
(-3.0, 1.0, -3.0, 0.0),
(-3.0, -1.0, 3.0, -0.0),
(-3.0, 2.0, -2.0, 1.0),
(-3.0, -2.0, 1.0, -1.0),
(-3.0, 5.0, -1.0, 2.0),
(-3.0, -5.0, 0.0, -3.0),
(-3.0, 5.5, -1.0, 2.5),
(-3.0, -5.5, 0.0, -3.0),
(-3.0, 0.3, -11.0, 0.2999999999999999),
(-3.0, -0.3, 10.0, -1.1102230246251565e-16),
(-3.0, 7.0, -1.0, 4.0),
(-3.0, 1e+300, -1.0, 1e+300),
(-3.0, -1e+300, 0.0, -3.0),
(-3.0, 5e-324, f64::NEG_INFINITY, 0.0),
(-3.0, -5e-324, f64::INFINITY, -0.0),
(-3.0, 1e-10, -30000000000.0, 1.0929659194649322e-16),
(-3.0, 3.0, -1.0, 0.0),
(-3.0, -3.0, 1.0, -0.0),
];
for &(x, y, wq, wr) in CASES {
let (q, r) = divmod(x, y);
check("divmod.0", &format!("{x:?}, {y:?}"), q, wq, 0.0, 0.0);
check("divmod.1", &format!("{x:?}, {y:?}"), r, wr, 0.0, 0.0);
}
}
#[test]
fn divmod_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32, f32)] = &[
(0.0, 0.0, f32::NAN, f32::NAN),
(0.0, -0.0, f32::NAN, f32::NAN),
(0.0, 1.0, 0.0, 0.0),
(0.0, -1.0, -0.0, -0.0),
(0.0, 2.0, 0.0, 0.0),
(0.0, -2.0, -0.0, -0.0),
(0.0, 5.0, 0.0, 0.0),
(0.0, -5.0, -0.0, -0.0),
(0.0, 5.5, 0.0, 0.0),
(0.0, -5.5, -0.0, -0.0),
(0.0, 0.3, 0.0, 0.0),
(0.0, -0.3, -0.0, -0.0),
(0.0, 7.0, 0.0, 0.0),
(0.0, 1e-10, 0.0, 0.0),
(0.0, 3.0, 0.0, 0.0),
(0.0, -3.0, -0.0, -0.0),
(-0.0, 0.0, f32::NAN, f32::NAN),
(-0.0, -0.0, f32::NAN, f32::NAN),
(-0.0, 1.0, -0.0, 0.0),
(-0.0, -1.0, 0.0, -0.0),
(-0.0, 2.0, -0.0, 0.0),
(-0.0, -2.0, 0.0, -0.0),
(-0.0, 5.0, -0.0, 0.0),
(-0.0, -5.0, 0.0, -0.0),
(-0.0, 5.5, -0.0, 0.0),
(-0.0, -5.5, 0.0, -0.0),
(-0.0, 0.3, -0.0, 0.0),
(-0.0, -0.3, 0.0, -0.0),
(-0.0, 7.0, -0.0, 0.0),
(-0.0, 1e-10, -0.0, 0.0),
(-0.0, 3.0, -0.0, 0.0),
(-0.0, -3.0, 0.0, -0.0),
(1.0, 0.0, f32::INFINITY, f32::NAN),
(1.0, -0.0, f32::NEG_INFINITY, f32::NAN),
(1.0, 1.0, 1.0, 0.0),
(1.0, -1.0, -1.0, -0.0),
(1.0, 2.0, 0.0, 1.0),
(1.0, -2.0, -1.0, -1.0),
(1.0, 5.0, 0.0, 1.0),
(1.0, -5.0, -1.0, -4.0),
(1.0, 5.5, 0.0, 1.0),
(1.0, -5.5, -1.0, -4.5),
(1.0, 0.3, 3.0, 0.099999964),
(1.0, -0.3, -4.0, -0.20000005),
(1.0, 7.0, 0.0, 1.0),
(1.0, 1e-10, 1e+10, 4.856822e-11),
(1.0, 3.0, 0.0, 1.0),
(1.0, -3.0, -1.0, -2.0),
(-1.0, 0.0, f32::NEG_INFINITY, f32::NAN),
(-1.0, -0.0, f32::INFINITY, f32::NAN),
(-1.0, 1.0, -1.0, 0.0),
(-1.0, -1.0, 1.0, -0.0),
(-1.0, 2.0, -1.0, 1.0),
(-1.0, -2.0, 0.0, -1.0),
(-1.0, 5.0, -1.0, 4.0),
(-1.0, -5.0, 0.0, -1.0),
(-1.0, 5.5, -1.0, 4.5),
(-1.0, -5.5, 0.0, -1.0),
(-1.0, 0.3, -4.0, 0.20000005),
(-1.0, -0.3, 3.0, -0.099999964),
(-1.0, 7.0, -1.0, 6.0),
(-1.0, 1e-10, -1e+10, 5.1431782e-11),
(-1.0, 3.0, -1.0, 2.0),
(-1.0, -3.0, 0.0, -1.0),
(2.0, 0.0, f32::INFINITY, f32::NAN),
(2.0, -0.0, f32::NEG_INFINITY, f32::NAN),
(2.0, 1.0, 2.0, 0.0),
(2.0, -1.0, -2.0, -0.0),
(2.0, 2.0, 1.0, 0.0),
(2.0, -2.0, -1.0, -0.0),
(2.0, 5.0, 0.0, 2.0),
(2.0, -5.0, -1.0, -3.0),
(2.0, 5.5, 0.0, 2.0),
(2.0, -5.5, -1.0, -3.5),
(2.0, 0.3, 6.0, 0.19999993),
(2.0, -0.3, -7.0, -0.10000008),
(2.0, 7.0, 0.0, 2.0),
(2.0, 1e-10, 2e+10, 9.713644e-11),
(2.0, 3.0, 0.0, 2.0),
(2.0, -3.0, -1.0, -1.0),
(-2.0, 0.0, f32::NEG_INFINITY, f32::NAN),
(-2.0, -0.0, f32::INFINITY, f32::NAN),
(-2.0, 1.0, -2.0, 0.0),
(-2.0, -1.0, 2.0, -0.0),
(-2.0, 2.0, -1.0, 0.0),
(-2.0, -2.0, 1.0, -0.0),
(-2.0, 5.0, -1.0, 3.0),
(-2.0, -5.0, 0.0, -2.0),
(-2.0, 5.5, -1.0, 3.5),
(-2.0, -5.5, 0.0, -2.0),
(-2.0, 0.3, -7.0, 0.10000008),
(-2.0, -0.3, 6.0, -0.19999993),
(-2.0, 7.0, -1.0, 5.0),
(-2.0, 1e-10, -2e+10, 2.8635636e-12),
(-2.0, 3.0, -1.0, 1.0),
(-2.0, -3.0, 0.0, -2.0),
(5.0, 0.0, f32::INFINITY, f32::NAN),
(5.0, -0.0, f32::NEG_INFINITY, f32::NAN),
(5.0, 1.0, 5.0, 0.0),
(5.0, -1.0, -5.0, -0.0),
(5.0, 2.0, 2.0, 1.0),
(5.0, -2.0, -3.0, -1.0),
(5.0, 5.0, 1.0, 0.0),
(5.0, -5.0, -1.0, -0.0),
(5.0, 5.5, 0.0, 5.0),
(5.0, -5.5, -1.0, -0.5),
(5.0, 0.3, 16.0, 0.19999981),
(5.0, -0.3, -17.0, -0.1000002),
(5.0, 7.0, 0.0, 5.0),
(5.0, 1e-10, 5e+10, 4.2841092e-11),
(5.0, 3.0, 1.0, 2.0),
(5.0, -3.0, -2.0, -1.0),
(-5.0, 0.0, f32::NEG_INFINITY, f32::NAN),
(-5.0, -0.0, f32::INFINITY, f32::NAN),
(-5.0, 1.0, -5.0, 0.0),
(-5.0, -1.0, 5.0, -0.0),
(-5.0, 2.0, -3.0, 1.0),
(-5.0, -2.0, 2.0, -1.0),
(-5.0, 5.0, -1.0, 0.0),
(-5.0, -5.0, 1.0, -0.0),
(-5.0, 5.5, -1.0, 0.5),
(-5.0, -5.5, 0.0, -5.0),
(-5.0, 0.3, -17.0, 0.1000002),
(-5.0, -0.3, 16.0, -0.19999981),
(-5.0, 7.0, -1.0, 2.0),
(-5.0, 1e-10, -5e+10, 5.715891e-11),
(-5.0, 3.0, -2.0, 1.0),
(-5.0, -3.0, 1.0, -2.0),
(5.5, 0.0, f32::INFINITY, f32::NAN),
(5.5, -0.0, f32::NEG_INFINITY, f32::NAN),
(5.5, 1.0, 5.0, 0.5),
(5.5, -1.0, -6.0, -0.5),
(5.5, 2.0, 2.0, 1.5),
(5.5, -2.0, -3.0, -0.5),
(5.5, 5.0, 1.0, 0.5),
(5.5, -5.0, -2.0, -4.5),
(5.5, 5.5, 1.0, 0.0),
(5.5, -5.5, -1.0, -0.0),
(5.5, 0.3, 18.0, 0.099999785),
(5.5, -0.3, -19.0, -0.20000023),
(5.5, 7.0, 0.0, 5.5),
(5.5, 1e-10, 5.5e+10, 6.71252e-11),
(5.5, 3.0, 1.0, 2.5),
(5.5, -3.0, -2.0, -0.5),
(-5.5, 0.0, f32::NEG_INFINITY, f32::NAN),
(-5.5, -0.0, f32::INFINITY, f32::NAN),
(-5.5, 1.0, -6.0, 0.5),
(-5.5, -1.0, 5.0, -0.5),
(-5.5, 2.0, -3.0, 0.5),
(-5.5, -2.0, 2.0, -1.5),
(-5.5, 5.0, -2.0, 4.5),
(-5.5, -5.0, 1.0, -0.5),
(-5.5, 5.5, -1.0, 0.0),
(-5.5, -5.5, 1.0, -0.0),
(-5.5, 0.3, -19.0, 0.20000023),
(-5.5, -0.3, 18.0, -0.099999785),
(-5.5, 7.0, -1.0, 1.5),
(-5.5, 1e-10, -5.5e+10, 3.28748e-11),
(-5.5, 3.0, -2.0, 0.5),
(-5.5, -3.0, 1.0, -2.5),
(0.3, 0.0, f32::INFINITY, f32::NAN),
(0.3, -0.0, f32::NEG_INFINITY, f32::NAN),
(0.3, 1.0, 0.0, 0.3),
(0.3, -1.0, -1.0, -0.7),
(0.3, 2.0, 0.0, 0.3),
(0.3, -2.0, -1.0, -1.7),
(0.3, 5.0, 0.0, 0.3),
(0.3, -5.0, -1.0, -4.7),
(0.3, 5.5, 0.0, 0.3),
(0.3, -5.5, -1.0, -5.2),
(0.3, 0.3, 1.0, 0.0),
(0.3, -0.3, -1.0, -0.0),
(0.3, 7.0, 0.0, 0.3),
(0.3, 1e-10, 3e+09, 1.5499262e-11),
(0.3, 3.0, 0.0, 0.3),
(0.3, -3.0, -1.0, -2.7),
(-0.3, 0.0, f32::NEG_INFINITY, f32::NAN),
(-0.3, -0.0, f32::INFINITY, f32::NAN),
(-0.3, 1.0, -1.0, 0.7),
(-0.3, -1.0, 0.0, -0.3),
(-0.3, 2.0, -1.0, 1.7),
(-0.3, -2.0, 0.0, -0.3),
(-0.3, 5.0, -1.0, 4.7),
(-0.3, -5.0, 0.0, -0.3),
(-0.3, 5.5, -1.0, 5.2),
(-0.3, -5.5, 0.0, -0.3),
(-0.3, 0.3, -1.0, 0.0),
(-0.3, -0.3, 1.0, -0.0),
(-0.3, 7.0, -1.0, 6.7),
(-0.3, 1e-10, -3e+09, 8.450074e-11),
(-0.3, 3.0, -1.0, 2.7),
(-0.3, -3.0, 0.0, -0.3),
(7.0, 0.0, f32::INFINITY, f32::NAN),
(7.0, -0.0, f32::NEG_INFINITY, f32::NAN),
(7.0, 1.0, 7.0, 0.0),
(7.0, -1.0, -7.0, -0.0),
(7.0, 2.0, 3.0, 1.0),
(7.0, -2.0, -4.0, -1.0),
(7.0, 5.0, 1.0, 2.0),
(7.0, -5.0, -2.0, -3.0),
(7.0, 5.5, 1.0, 1.5),
(7.0, -5.5, -2.0, -4.0),
(7.0, 0.3, 23.0, 0.099999726),
(7.0, -0.3, -24.0, -0.20000029),
(7.0, 7.0, 1.0, 0.0),
(7.0, 1e-10, 7e+10, 3.9977528e-11),
(7.0, 3.0, 2.0, 1.0),
(7.0, -3.0, -3.0, -2.0),
(1e-10, 0.0, f32::INFINITY, f32::NAN),
(1e-10, -0.0, f32::NEG_INFINITY, f32::NAN),
(1e-10, 1.0, 0.0, 1e-10),
(1e-10, -1.0, -1.0, -1.0),
(1e-10, 2.0, 0.0, 1e-10),
(1e-10, -2.0, -1.0, -2.0),
(1e-10, 5.0, 0.0, 1e-10),
(1e-10, -5.0, -1.0, -5.0),
(1e-10, 5.5, 0.0, 1e-10),
(1e-10, -5.5, -1.0, -5.5),
(1e-10, 0.3, 0.0, 1e-10),
(1e-10, -0.3, -1.0, -0.3),
(1e-10, 7.0, 0.0, 1e-10),
(1e-10, 1e-10, 1.0, 0.0),
(1e-10, 3.0, 0.0, 1e-10),
(1e-10, -3.0, -1.0, -3.0),
(3.0, 0.0, f32::INFINITY, f32::NAN),
(3.0, -0.0, f32::NEG_INFINITY, f32::NAN),
(3.0, 1.0, 3.0, 0.0),
(3.0, -1.0, -3.0, -0.0),
(3.0, 2.0, 1.0, 1.0),
(3.0, -2.0, -2.0, -1.0),
(3.0, 5.0, 0.0, 3.0),
(3.0, -5.0, -1.0, -2.0),
(3.0, 5.5, 0.0, 3.0),
(3.0, -5.5, -1.0, -2.5),
(3.0, 0.3, 9.0, 0.2999999),
(3.0, -0.3, -10.0, -1.1920929e-07),
(3.0, 7.0, 0.0, 3.0),
(3.0, 1e-10, 2.9999999e+10, 4.5704655e-11),
(3.0, 3.0, 1.0, 0.0),
(3.0, -3.0, -1.0, -0.0),
(-3.0, 0.0, f32::NEG_INFINITY, f32::NAN),
(-3.0, -0.0, f32::INFINITY, f32::NAN),
(-3.0, 1.0, -3.0, 0.0),
(-3.0, -1.0, 3.0, -0.0),
(-3.0, 2.0, -2.0, 1.0),
(-3.0, -2.0, 1.0, -1.0),
(-3.0, 5.0, -1.0, 2.0),
(-3.0, -5.0, 0.0, -3.0),
(-3.0, 5.5, -1.0, 2.5),
(-3.0, -5.5, 0.0, -3.0),
(-3.0, 0.3, -10.0, 1.1920929e-07),
(-3.0, -0.3, 9.0, -0.2999999),
(-3.0, 7.0, -1.0, 4.0),
(-3.0, 1e-10, -2.9999999e+10, 5.4295346e-11),
(-3.0, 3.0, -1.0, 0.0),
(-3.0, -3.0, 1.0, -0.0),
];
for &(x, y, wq, wr) in CASES {
let (q, r) = divmod(x, y);
check("divmod.0", &format!("{x:?}, {y:?}"), q, wq, 0.0, 0.0);
check("divmod.1", &format!("{x:?}, {y:?}"), r, wr, 0.0, 0.0);
}
}
#[test]
fn float_power_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN),
(f64::NAN, 0.0, 1.0),
(f64::NAN, -0.0, 1.0),
(f64::NAN, 1.0, f64::NAN),
(f64::NAN, -1.0, f64::NAN),
(f64::NAN, 2.0, f64::NAN),
(f64::NAN, -2.0, f64::NAN),
(f64::NAN, 0.5, f64::NAN),
(f64::NAN, -0.5, f64::NAN),
(f64::NAN, 3.0, f64::NAN),
(f64::NAN, 10.0, f64::NAN),
(f64::NAN, 0.001, f64::NAN),
(f64::NAN, 1e+200, f64::NAN),
(f64::NAN, 300.0, f64::NAN),
(f64::NAN, -3.5, f64::NAN),
(f64::NAN, 0.1, f64::NAN),
(f64::INFINITY, f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY, f64::INFINITY),
(f64::INFINITY, f64::NEG_INFINITY, 0.0),
(f64::INFINITY, 0.0, 1.0),
(f64::INFINITY, -0.0, 1.0),
(f64::INFINITY, 1.0, f64::INFINITY),
(f64::INFINITY, -1.0, 0.0),
(f64::INFINITY, 2.0, f64::INFINITY),
(f64::INFINITY, -2.0, 0.0),
(f64::INFINITY, 0.5, f64::INFINITY),
(f64::INFINITY, -0.5, 0.0),
(f64::INFINITY, 3.0, f64::INFINITY),
(f64::INFINITY, 10.0, f64::INFINITY),
(f64::INFINITY, 0.001, f64::INFINITY),
(f64::INFINITY, 1e+200, f64::INFINITY),
(f64::INFINITY, 300.0, f64::INFINITY),
(f64::INFINITY, -3.5, 0.0),
(f64::INFINITY, 0.1, f64::INFINITY),
(f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::INFINITY, f64::INFINITY),
(f64::NEG_INFINITY, f64::NEG_INFINITY, 0.0),
(f64::NEG_INFINITY, 0.0, 1.0),
(f64::NEG_INFINITY, -0.0, 1.0),
(f64::NEG_INFINITY, 1.0, f64::NEG_INFINITY),
(f64::NEG_INFINITY, -1.0, -0.0),
(f64::NEG_INFINITY, 2.0, f64::INFINITY),
(f64::NEG_INFINITY, -2.0, 0.0),
(f64::NEG_INFINITY, 0.5, f64::INFINITY),
(f64::NEG_INFINITY, -0.5, 0.0),
(f64::NEG_INFINITY, 3.0, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 10.0, f64::INFINITY),
(f64::NEG_INFINITY, 0.001, f64::INFINITY),
(f64::NEG_INFINITY, 1e+200, f64::INFINITY),
(f64::NEG_INFINITY, 300.0, f64::INFINITY),
(f64::NEG_INFINITY, -3.5, 0.0),
(f64::NEG_INFINITY, 0.1, f64::INFINITY),
(0.0, f64::NAN, f64::NAN),
(0.0, f64::INFINITY, 0.0),
(0.0, f64::NEG_INFINITY, f64::INFINITY),
(0.0, 0.0, 1.0),
(0.0, -0.0, 1.0),
(0.0, 1.0, 0.0),
(0.0, -1.0, f64::INFINITY),
(0.0, 2.0, 0.0),
(0.0, -2.0, f64::INFINITY),
(0.0, 0.5, 0.0),
(0.0, -0.5, f64::INFINITY),
(0.0, 3.0, 0.0),
(0.0, 10.0, 0.0),
(0.0, 0.001, 0.0),
(0.0, 1e+200, 0.0),
(0.0, 300.0, 0.0),
(0.0, -3.5, f64::INFINITY),
(0.0, 0.1, 0.0),
(-0.0, f64::NAN, f64::NAN),
(-0.0, f64::INFINITY, 0.0),
(-0.0, f64::NEG_INFINITY, f64::INFINITY),
(-0.0, 0.0, 1.0),
(-0.0, -0.0, 1.0),
(-0.0, 1.0, -0.0),
(-0.0, -1.0, f64::NEG_INFINITY),
(-0.0, 2.0, 0.0),
(-0.0, -2.0, f64::INFINITY),
(-0.0, 0.5, 0.0),
(-0.0, -0.5, f64::INFINITY),
(-0.0, 3.0, -0.0),
(-0.0, 10.0, 0.0),
(-0.0, 0.001, 0.0),
(-0.0, 1e+200, 0.0),
(-0.0, 300.0, 0.0),
(-0.0, -3.5, f64::INFINITY),
(-0.0, 0.1, 0.0),
(1.0, f64::NAN, 1.0),
(1.0, f64::INFINITY, 1.0),
(1.0, f64::NEG_INFINITY, 1.0),
(1.0, 0.0, 1.0),
(1.0, -0.0, 1.0),
(1.0, 1.0, 1.0),
(1.0, -1.0, 1.0),
(1.0, 2.0, 1.0),
(1.0, -2.0, 1.0),
(1.0, 0.5, 1.0),
(1.0, -0.5, 1.0),
(1.0, 3.0, 1.0),
(1.0, 10.0, 1.0),
(1.0, 0.001, 1.0),
(1.0, 1e+200, 1.0),
(1.0, 300.0, 1.0),
(1.0, -3.5, 1.0),
(1.0, 0.1, 1.0),
(-1.0, f64::NAN, f64::NAN),
(-1.0, f64::INFINITY, 1.0),
(-1.0, f64::NEG_INFINITY, 1.0),
(-1.0, 0.0, 1.0),
(-1.0, -0.0, 1.0),
(-1.0, 1.0, -1.0),
(-1.0, -1.0, -1.0),
(-1.0, 2.0, 1.0),
(-1.0, -2.0, 1.0),
(-1.0, 0.5, f64::NAN),
(-1.0, -0.5, f64::NAN),
(-1.0, 3.0, -1.0),
(-1.0, 10.0, 1.0),
(-1.0, 0.001, f64::NAN),
(-1.0, 1e+200, 1.0),
(-1.0, 300.0, 1.0),
(-1.0, -3.5, f64::NAN),
(-1.0, 0.1, f64::NAN),
(2.0, f64::NAN, f64::NAN),
(2.0, f64::INFINITY, f64::INFINITY),
(2.0, f64::NEG_INFINITY, 0.0),
(2.0, 0.0, 1.0),
(2.0, -0.0, 1.0),
(2.0, 1.0, 2.0),
(2.0, -1.0, 0.5),
(2.0, 2.0, 4.0),
(2.0, -2.0, 0.25),
(2.0, 0.5, 1.4142135623730951),
(2.0, -0.5, 0.7071067811865476),
(2.0, 3.0, 8.0),
(2.0, 10.0, 1024.0),
(2.0, 0.001, 1.0006933874625807),
(2.0, 1e+200, f64::INFINITY),
(2.0, 300.0, 2.037035976334486e+90),
(2.0, -3.5, 0.08838834764831845),
(2.0, 0.1, 1.0717734625362931),
(-2.0, f64::NAN, f64::NAN),
(-2.0, f64::INFINITY, f64::INFINITY),
(-2.0, f64::NEG_INFINITY, 0.0),
(-2.0, 0.0, 1.0),
(-2.0, -0.0, 1.0),
(-2.0, 1.0, -2.0),
(-2.0, -1.0, -0.5),
(-2.0, 2.0, 4.0),
(-2.0, -2.0, 0.25),
(-2.0, 0.5, f64::NAN),
(-2.0, -0.5, f64::NAN),
(-2.0, 3.0, -8.0),
(-2.0, 10.0, 1024.0),
(-2.0, 0.001, f64::NAN),
(-2.0, 1e+200, f64::INFINITY),
(-2.0, 300.0, 2.037035976334486e+90),
(-2.0, -3.5, f64::NAN),
(-2.0, 0.1, f64::NAN),
(0.5, f64::NAN, f64::NAN),
(0.5, f64::INFINITY, 0.0),
(0.5, f64::NEG_INFINITY, f64::INFINITY),
(0.5, 0.0, 1.0),
(0.5, -0.0, 1.0),
(0.5, 1.0, 0.5),
(0.5, -1.0, 2.0),
(0.5, 2.0, 0.25),
(0.5, -2.0, 4.0),
(0.5, 0.5, 0.7071067811865476),
(0.5, -0.5, 1.4142135623730951),
(0.5, 3.0, 0.125),
(0.5, 10.0, 0.0009765625),
(0.5, 0.001, 0.9993070929904525),
(0.5, 1e+200, 0.0),
(0.5, 300.0, 4.909093465297727e-91),
(0.5, -3.5, 11.313708498984761),
(0.5, 0.1, 0.9330329915368074),
(-0.5, f64::NAN, f64::NAN),
(-0.5, f64::INFINITY, 0.0),
(-0.5, f64::NEG_INFINITY, f64::INFINITY),
(-0.5, 0.0, 1.0),
(-0.5, -0.0, 1.0),
(-0.5, 1.0, -0.5),
(-0.5, -1.0, -2.0),
(-0.5, 2.0, 0.25),
(-0.5, -2.0, 4.0),
(-0.5, 0.5, f64::NAN),
(-0.5, -0.5, f64::NAN),
(-0.5, 3.0, -0.125),
(-0.5, 10.0, 0.0009765625),
(-0.5, 0.001, f64::NAN),
(-0.5, 1e+200, 0.0),
(-0.5, 300.0, 4.909093465297727e-91),
(-0.5, -3.5, f64::NAN),
(-0.5, 0.1, f64::NAN),
(3.0, f64::NAN, f64::NAN),
(3.0, f64::INFINITY, f64::INFINITY),
(3.0, f64::NEG_INFINITY, 0.0),
(3.0, 0.0, 1.0),
(3.0, -0.0, 1.0),
(3.0, 1.0, 3.0),
(3.0, -1.0, 0.3333333333333333),
(3.0, 2.0, 9.0),
(3.0, -2.0, 0.1111111111111111),
(3.0, 0.5, 1.7320508075688772),
(3.0, -0.5, 0.5773502691896257),
(3.0, 3.0, 27.0),
(3.0, 10.0, 59049.0),
(3.0, 0.001, 1.001099215984204),
(3.0, 1e+200, f64::INFINITY),
(3.0, 300.0, 1.3689147905858837e+143),
(3.0, -3.5, 0.021383343303319473),
(3.0, 0.1, 1.1161231740339044),
(10.0, f64::NAN, f64::NAN),
(10.0, f64::INFINITY, f64::INFINITY),
(10.0, f64::NEG_INFINITY, 0.0),
(10.0, 0.0, 1.0),
(10.0, -0.0, 1.0),
(10.0, 1.0, 10.0),
(10.0, -1.0, 0.1),
(10.0, 2.0, 100.0),
(10.0, -2.0, 0.01),
(10.0, 0.5, 3.1622776601683795),
(10.0, -0.5, 0.31622776601683794),
(10.0, 3.0, 1000.0),
(10.0, 10.0, 10000000000.0),
(10.0, 0.001, 1.0023052380778996),
(10.0, 1e+200, f64::INFINITY),
(10.0, 300.0, 1e+300),
(10.0, -3.5, 0.00031622776601683794),
(10.0, 0.1, 1.2589254117941673),
(0.001, f64::NAN, f64::NAN),
(0.001, f64::INFINITY, 0.0),
(0.001, f64::NEG_INFINITY, f64::INFINITY),
(0.001, 0.0, 1.0),
(0.001, -0.0, 1.0),
(0.001, 1.0, 0.001),
(0.001, -1.0, 1000.0),
(0.001, 2.0, 1e-06),
(0.001, -2.0, 1000000.0),
(0.001, 0.5, 0.03162277660168379),
(0.001, -0.5, 31.622776601683793),
(0.001, 3.0, 1e-09),
(0.001, 10.0, 1.0000000000000003e-30),
(0.001, 0.001, 0.9931160484209338),
(0.001, 1e+200, 0.0),
(0.001, 300.0, 0.0),
(0.001, -3.5, 31622776601.683792),
(0.001, 0.1, 0.5011872336272722),
(1e+200, f64::NAN, f64::NAN),
(1e+200, f64::INFINITY, f64::INFINITY),
(1e+200, f64::NEG_INFINITY, 0.0),
(1e+200, 0.0, 1.0),
(1e+200, -0.0, 1.0),
(1e+200, 1.0, 1e+200),
(1e+200, -1.0, 1e-200),
(1e+200, 2.0, f64::INFINITY),
(1e+200, -2.0, 0.0),
(1e+200, 0.5, 1e+100),
(1e+200, -0.5, 1e-100),
(1e+200, 3.0, f64::INFINITY),
(1e+200, 10.0, f64::INFINITY),
(1e+200, 0.001, 1.5848931924611136),
(1e+200, 1e+200, f64::INFINITY),
(1e+200, 300.0, f64::INFINITY),
(1e+200, -3.5, 0.0),
(1e+200, 0.1, 1.0000000000000026e+20),
(300.0, f64::NAN, f64::NAN),
(300.0, f64::INFINITY, f64::INFINITY),
(300.0, f64::NEG_INFINITY, 0.0),
(300.0, 0.0, 1.0),
(300.0, -0.0, 1.0),
(300.0, 1.0, 300.0),
(300.0, -1.0, 0.0033333333333333335),
(300.0, 2.0, 90000.0),
(300.0, -2.0, 1.1111111111111112e-05),
(300.0, 0.5, 17.320508075688775),
(300.0, -0.5, 0.057735026918962574),
(300.0, 3.0, 27000000.0),
(300.0, 10.0, 5.9049e+24),
(300.0, 0.001, 1.005720080013053),
(300.0, 1e+200, f64::INFINITY),
(300.0, 300.0, f64::INFINITY),
(300.0, -3.5, 2.1383343303319472e-09),
(300.0, 0.1, 1.7689360204744258),
(-3.5, f64::NAN, f64::NAN),
(-3.5, f64::INFINITY, f64::INFINITY),
(-3.5, f64::NEG_INFINITY, 0.0),
(-3.5, 0.0, 1.0),
(-3.5, -0.0, 1.0),
(-3.5, 1.0, -3.5),
(-3.5, -1.0, -0.2857142857142857),
(-3.5, 2.0, 12.25),
(-3.5, -2.0, 0.08163265306122448),
(-3.5, 0.5, f64::NAN),
(-3.5, -0.5, f64::NAN),
(-3.5, 3.0, -42.875),
(-3.5, 10.0, 275854.7353515625),
(-3.5, 0.001, f64::NAN),
(-3.5, 1e+200, f64::INFINITY),
(-3.5, 300.0, 1.661167038475158e+163),
(-3.5, -3.5, f64::NAN),
(-3.5, 0.1, f64::NAN),
(0.1, f64::NAN, f64::NAN),
(0.1, f64::INFINITY, 0.0),
(0.1, f64::NEG_INFINITY, f64::INFINITY),
(0.1, 0.0, 1.0),
(0.1, -0.0, 1.0),
(0.1, 1.0, 0.1),
(0.1, -1.0, 10.0),
(0.1, 2.0, 0.010000000000000002),
(0.1, -2.0, 99.99999999999999),
(0.1, 0.5, 0.31622776601683794),
(0.1, -0.5, 3.162277660168379),
(0.1, 3.0, 0.0010000000000000002),
(0.1, 10.0, 1.0000000000000006e-10),
(0.1, 0.001, 0.9977000638225533),
(0.1, 1e+200, 0.0),
(0.1, 300.0, 1.0000000000000166e-300),
(0.1, -3.5, 3162.2776601683786),
(0.1, 0.1, 0.7943282347242815),
];
for &(x, y, want) in CASES {
check(
"float_power",
&format!("{x:?}, {y:?}"),
float_power(x, y),
want,
1e-13,
0.0,
);
}
}
#[test]
fn float_power_f32_inputs_give_f64() {
let _report = Report;
const CASES: &[(f32, f32, f64)] = &[
(2.0, 0.5, 1.4142135623730951),
(0.1, 3.0, 0.0010000000447034842),
(-3.0, 3.0, -27.0),
(1e+10, 2.0, 1e+20),
(7.5, -1.0, 0.13333333333333333),
];
for &(x, y, want) in CASES {
check(
"float_power",
&format!("{x:?}, {y:?}"),
float_power(x, y),
want,
1e-13,
0.0,
);
}
}
#[test]
fn modf_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN),
(f64::INFINITY, 0.0, f64::INFINITY),
(f64::NEG_INFINITY, -0.0, f64::NEG_INFINITY),
(0.0, 0.0, 0.0),
(-0.0, -0.0, -0.0),
(1.0, 0.0, 1.0),
(-1.0, -0.0, -1.0),
(0.5, 0.5, 0.0),
(-0.5, -0.5, -0.0),
(1.5, 0.5, 1.0),
(-1.5, -0.5, -1.0),
(2.5, 0.5, 2.0),
(-2.5, -0.5, -2.0),
(3.0, 0.0, 3.0),
(4.5, 0.5, 4.0),
(-7.25, -0.25, -7.0),
(8.0, 0.0, 8.0),
(8.000001, 9.999999992515995e-07, 8.0),
(100.0, 0.0, 100.0),
(123456.789, 0.7890000000043074, 123456.0),
(1e+16, 0.0, 1e+16),
(0.1, 0.1, 0.0),
(-0.1, -0.1, -0.0),
(1e-300, 1e-300, 0.0),
(-1e-300, -1e-300, -0.0),
(5e-324, 5e-324, 0.0),
(-5e-324, -5e-324, -0.0),
(2.2250738585072014e-308, 2.2250738585072014e-308, 0.0),
(1e+300, 0.0, 1e+300),
(-1e+300, -0.0, -1e+300),
(1.7976931348623157e+308, 0.0, 1.7976931348623157e+308),
(-1.7976931348623157e+308, -0.0, -1.7976931348623157e+308),
(-3.0, -0.0, -3.0),
(3.75, 0.75, 3.0),
(-0.25, -0.25, -0.0),
];
for &(x, wf, wi) in CASES {
let (f, i) = modf(x);
check("modf.frac", &format!("{x:?}"), f, wf, 0.0, 0.0);
check("modf.int", &format!("{x:?}"), i, wi, 0.0, 0.0);
}
}
#[test]
fn modf_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32)] = &[
(f32::NAN, f32::NAN, f32::NAN),
(f32::INFINITY, 0.0, f32::INFINITY),
(f32::NEG_INFINITY, -0.0, f32::NEG_INFINITY),
(0.0, 0.0, 0.0),
(-0.0, -0.0, -0.0),
(1.0, 0.0, 1.0),
(-1.0, -0.0, -1.0),
(0.5, 0.5, 0.0),
(-0.5, -0.5, -0.0),
(1.5, 0.5, 1.0),
(-1.5, -0.5, -1.0),
(2.5, 0.5, 2.0),
(-2.5, -0.5, -2.0),
(3.0, 0.0, 3.0),
(4.5, 0.5, 4.0),
(-7.25, -0.25, -7.0),
(8.0, 0.0, 8.0),
(100.0, 0.0, 100.0),
(123456.79, 0.7890625, 123456.0),
(1e+16, 0.0, 1e+16),
(0.1, 0.1, 0.0),
(-0.1, -0.1, -0.0),
(1e-30, 1e-30, 0.0),
(-1e-30, -1e-30, -0.0),
(1e-45, 1e-45, 0.0),
(-1e-45, -1e-45, -0.0),
(1.1754944e-38, 1.1754944e-38, 0.0),
(1e+30, 0.0, 1e+30),
(-1e+30, -0.0, -1e+30),
(3.4028235e+38, 0.0, 3.4028235e+38),
(-3.4028235e+38, -0.0, -3.4028235e+38),
(89.0, 0.0, 89.0),
(88.0, 0.0, 88.0),
(-3.0, -0.0, -3.0),
(3.75, 0.75, 3.0),
(-0.25, -0.25, -0.0),
];
for &(x, wf, wi) in CASES {
let (f, i) = modf(x);
check("modf.frac", &format!("{x:?}"), f, wf, 0.0, 0.0);
check("modf.int", &format!("{x:?}"), i, wi, 0.0, 0.0);
}
}
#[test]
fn frexp_f64() {
let _report = Report;
const CASES: &[(f64, f64, i32)] = &[
(f64::NAN, f64::NAN, -1),
(f64::INFINITY, f64::INFINITY, -1),
(f64::NEG_INFINITY, f64::NEG_INFINITY, -1),
(0.0, 0.0, 0),
(-0.0, -0.0, 0),
(1.0, 0.5, 1),
(-1.0, -0.5, 1),
(0.5, 0.5, 0),
(-0.5, -0.5, 0),
(1.5, 0.75, 1),
(-1.5, -0.75, 1),
(2.5, 0.625, 2),
(-2.5, -0.625, 2),
(3.0, 0.75, 2),
(4.5, 0.5625, 3),
(-7.25, -0.90625, 3),
(8.0, 0.5, 4),
(8.000001, 0.5000000625, 4),
(100.0, 0.78125, 7),
(123456.789, 0.9419005508422852, 17),
(1e+16, 0.5551115123125783, 54),
(0.1, 0.8, -3),
(-0.1, -0.8, -3),
(1e-300, 0.6696928794914171, -996),
(-1e-300, -0.6696928794914171, -996),
(5e-324, 0.5, -1073),
(-5e-324, -0.5, -1073),
(2.2250738585072014e-308, 0.5, -1021),
(1e+300, 0.7466108948025751, 997),
(-1e+300, -0.7466108948025751, 997),
(1.7976931348623157e+308, 0.9999999999999999, 1024),
(-1.7976931348623157e+308, -0.9999999999999999, 1024),
(3e-320, 0.7412109375, -1061),
(-3e-320, -0.7412109375, -1061),
(1e-310, 0.5752618031559393, -1029),
];
for &(x, wm, we) in CASES {
let (mm, e) = frexp(x);
check("frexp.m", &format!("{x:?}"), mm, wm, 0.0, 0.0);
if x.is_finite() {
assert_eq!(e, we, "frexp({x:?}).e");
}
}
}
#[test]
fn frexp_f32() {
let _report = Report;
const CASES: &[(f32, f32, i32)] = &[
(f32::NAN, f32::NAN, -1),
(f32::INFINITY, f32::INFINITY, -1),
(f32::NEG_INFINITY, f32::NEG_INFINITY, -1),
(0.0, 0.0, 0),
(-0.0, -0.0, 0),
(1.0, 0.5, 1),
(-1.0, -0.5, 1),
(0.5, 0.5, 0),
(-0.5, -0.5, 0),
(1.5, 0.75, 1),
(-1.5, -0.75, 1),
(2.5, 0.625, 2),
(-2.5, -0.625, 2),
(3.0, 0.75, 2),
(4.5, 0.5625, 3),
(-7.25, -0.90625, 3),
(8.0, 0.5, 4),
(100.0, 0.78125, 7),
(123456.79, 0.94190055, 17),
(1e+16, 0.5551115, 54),
(0.1, 0.8, -3),
(-0.1, -0.8, -3),
(1e-30, 0.6338253, -99),
(-1e-30, -0.6338253, -99),
(1e-45, 0.5, -148),
(-1e-45, -0.5, -148),
(1.1754944e-38, 0.5, -125),
(1e+30, 0.7888609, 100),
(-1e+30, -0.7888609, 100),
(3.4028235e+38, 0.99999994, 128),
(-3.4028235e+38, -0.99999994, 128),
(89.0, 0.6953125, 7),
(88.0, 0.6875, 7),
(1e-40, 0.54444885, -132),
(-1e-40, -0.54444885, -132),
(5e-39, 0.85070586, -127),
];
for &(x, wm, we) in CASES {
let (mm, e) = frexp(x);
check("frexp.m", &format!("{x:?}"), mm, wm, 0.0, 0.0);
if x.is_finite() {
assert_eq!(e, we, "frexp({x:?}).e");
}
}
}
#[test]
fn ldexp_f64() {
let _report = Report;
const CASES: &[(f64, i32, f64)] = &[
(1.0, -2200, 0.0),
(1.0, -1100, 0.0),
(1.0, -1075, 0.0),
(1.0, -1074, 5e-324),
(1.0, -1023, 1.1125369292536007e-308),
(1.0, -1022, 2.2250738585072014e-308),
(1.0, -60, 8.673617379884035e-19),
(1.0, -1, 0.5),
(1.0, 0, 1.0),
(1.0, 1, 2.0),
(1.0, 10, 1024.0),
(1.0, 52, 4503599627370496.0),
(1.0, 1023, 8.98846567431158e+307),
(1.0, 1024, f64::INFINITY),
(1.0, 1100, f64::INFINITY),
(1.0, 2100, f64::INFINITY),
(1.0, 4000, f64::INFINITY),
(1.0, 2147483647, f64::INFINITY),
(1.0, -2147483648, 0.0),
(-1.0, -2200, -0.0),
(-1.0, -1100, -0.0),
(-1.0, -1075, -0.0),
(-1.0, -1074, -5e-324),
(-1.0, -1023, -1.1125369292536007e-308),
(-1.0, -1022, -2.2250738585072014e-308),
(-1.0, -60, -8.673617379884035e-19),
(-1.0, -1, -0.5),
(-1.0, 0, -1.0),
(-1.0, 1, -2.0),
(-1.0, 10, -1024.0),
(-1.0, 52, -4503599627370496.0),
(-1.0, 1023, -8.98846567431158e+307),
(-1.0, 1024, f64::NEG_INFINITY),
(-1.0, 1100, f64::NEG_INFINITY),
(-1.0, 2100, f64::NEG_INFINITY),
(-1.0, 4000, f64::NEG_INFINITY),
(-1.0, 2147483647, f64::NEG_INFINITY),
(-1.0, -2147483648, -0.0),
(0.75, -2200, 0.0),
(0.75, -1100, 0.0),
(0.75, -1075, 0.0),
(0.75, -1074, 5e-324),
(0.75, -1023, 8.344026969402005e-309),
(0.75, -1022, 1.668805393880401e-308),
(0.75, -60, 6.505213034913027e-19),
(0.75, -1, 0.375),
(0.75, 0, 0.75),
(0.75, 1, 1.5),
(0.75, 10, 768.0),
(0.75, 52, 3377699720527872.0),
(0.75, 1023, 6.741349255733685e+307),
(0.75, 1024, 1.348269851146737e+308),
(0.75, 1100, f64::INFINITY),
(0.75, 2100, f64::INFINITY),
(0.75, 4000, f64::INFINITY),
(0.75, 2147483647, f64::INFINITY),
(0.75, -2147483648, 0.0),
(3.0, -2200, 0.0),
(3.0, -1100, 0.0),
(3.0, -1075, 1e-323),
(3.0, -1074, 1.5e-323),
(3.0, -1023, 3.337610787760802e-308),
(3.0, -1022, 6.675221575521604e-308),
(3.0, -60, 2.6020852139652106e-18),
(3.0, -1, 1.5),
(3.0, 0, 3.0),
(3.0, 1, 6.0),
(3.0, 10, 3072.0),
(3.0, 52, 1.3510798882111488e+16),
(3.0, 1023, f64::INFINITY),
(3.0, 1024, f64::INFINITY),
(3.0, 1100, f64::INFINITY),
(3.0, 2100, f64::INFINITY),
(3.0, 4000, f64::INFINITY),
(3.0, 2147483647, f64::INFINITY),
(3.0, -2147483648, 0.0),
(1e-300, -2200, 0.0),
(1e-300, -1100, 0.0),
(1e-300, -1075, 0.0),
(1e-300, -1074, 0.0),
(1e-300, -1023, 0.0),
(1e-300, -1022, 0.0),
(1e-300, -60, 8.6736e-319),
(1e-300, -1, 5e-301),
(1e-300, 0, 1e-300),
(1e-300, 1, 2e-300),
(1e-300, 10, 1.024e-297),
(1e-300, 52, 4.503599627370496e-285),
(1e-300, 1023, 89884656.7431158),
(1e-300, 1024, 179769313.4862316),
(1e-300, 1100, 1.3582985290493859e+31),
(1e-300, 2100, f64::INFINITY),
(1e-300, 4000, f64::INFINITY),
(1e-300, 2147483647, f64::INFINITY),
(1e-300, -2147483648, 0.0),
(5e-324, -2200, 0.0),
(5e-324, -1100, 0.0),
(5e-324, -1075, 0.0),
(5e-324, -1074, 0.0),
(5e-324, -1023, 0.0),
(5e-324, -1022, 0.0),
(5e-324, -60, 0.0),
(5e-324, -1, 0.0),
(5e-324, 0, 5e-324),
(5e-324, 1, 1e-323),
(5e-324, 10, 5.06e-321),
(5e-324, 52, 2.2250738585072014e-308),
(5e-324, 1023, 4.440892098500626e-16),
(5e-324, 1024, 8.881784197001252e-16),
(5e-324, 1100, 67108864.0),
(5e-324, 2100, f64::INFINITY),
(5e-324, 4000, f64::INFINITY),
(5e-324, 2147483647, f64::INFINITY),
(5e-324, -2147483648, 0.0),
(1.7976931348623157e+308, -2200, 0.0),
(1.7976931348623157e+308, -1100, 1.3234889800848441e-23),
(1.7976931348623157e+308, -1075, 4.4408920985006257e-16),
(1.7976931348623157e+308, -1074, 8.881784197001251e-16),
(1.7976931348623157e+308, -1023, 1.9999999999999998),
(1.7976931348623157e+308, -1022, 3.9999999999999996),
(1.7976931348623157e+308, -60, 1.5592502418239997e+290),
(1.7976931348623157e+308, -1, 8.988465674311579e+307),
(1.7976931348623157e+308, 0, 1.7976931348623157e+308),
(1.7976931348623157e+308, 1, f64::INFINITY),
(1.7976931348623157e+308, 10, f64::INFINITY),
(1.7976931348623157e+308, 52, f64::INFINITY),
(1.7976931348623157e+308, 1023, f64::INFINITY),
(1.7976931348623157e+308, 1024, f64::INFINITY),
(1.7976931348623157e+308, 1100, f64::INFINITY),
(1.7976931348623157e+308, 2100, f64::INFINITY),
(1.7976931348623157e+308, 4000, f64::INFINITY),
(1.7976931348623157e+308, 2147483647, f64::INFINITY),
(1.7976931348623157e+308, -2147483648, 0.0),
(0.0, -2200, 0.0),
(0.0, -1100, 0.0),
(0.0, -1075, 0.0),
(0.0, -1074, 0.0),
(0.0, -1023, 0.0),
(0.0, -1022, 0.0),
(0.0, -60, 0.0),
(0.0, -1, 0.0),
(0.0, 0, 0.0),
(0.0, 1, 0.0),
(0.0, 10, 0.0),
(0.0, 52, 0.0),
(0.0, 1023, 0.0),
(0.0, 1024, 0.0),
(0.0, 1100, 0.0),
(0.0, 2100, 0.0),
(0.0, 4000, 0.0),
(0.0, 2147483647, 0.0),
(0.0, -2147483648, 0.0),
(-0.0, -2200, -0.0),
(-0.0, -1100, -0.0),
(-0.0, -1075, -0.0),
(-0.0, -1074, -0.0),
(-0.0, -1023, -0.0),
(-0.0, -1022, -0.0),
(-0.0, -60, -0.0),
(-0.0, -1, -0.0),
(-0.0, 0, -0.0),
(-0.0, 1, -0.0),
(-0.0, 10, -0.0),
(-0.0, 52, -0.0),
(-0.0, 1023, -0.0),
(-0.0, 1024, -0.0),
(-0.0, 1100, -0.0),
(-0.0, 2100, -0.0),
(-0.0, 4000, -0.0),
(-0.0, 2147483647, -0.0),
(-0.0, -2147483648, -0.0),
(f64::NAN, -2200, f64::NAN),
(f64::NAN, -1100, f64::NAN),
(f64::NAN, -1075, f64::NAN),
(f64::NAN, -1074, f64::NAN),
(f64::NAN, -1023, f64::NAN),
(f64::NAN, -1022, f64::NAN),
(f64::NAN, -60, f64::NAN),
(f64::NAN, -1, f64::NAN),
(f64::NAN, 0, f64::NAN),
(f64::NAN, 1, f64::NAN),
(f64::NAN, 10, f64::NAN),
(f64::NAN, 52, f64::NAN),
(f64::NAN, 1023, f64::NAN),
(f64::NAN, 1024, f64::NAN),
(f64::NAN, 1100, f64::NAN),
(f64::NAN, 2100, f64::NAN),
(f64::NAN, 4000, f64::NAN),
(f64::NAN, 2147483647, f64::NAN),
(f64::NAN, -2147483648, f64::NAN),
(f64::INFINITY, -2200, f64::INFINITY),
(f64::INFINITY, -1100, f64::INFINITY),
(f64::INFINITY, -1075, f64::INFINITY),
(f64::INFINITY, -1074, f64::INFINITY),
(f64::INFINITY, -1023, f64::INFINITY),
(f64::INFINITY, -1022, f64::INFINITY),
(f64::INFINITY, -60, f64::INFINITY),
(f64::INFINITY, -1, f64::INFINITY),
(f64::INFINITY, 0, f64::INFINITY),
(f64::INFINITY, 1, f64::INFINITY),
(f64::INFINITY, 10, f64::INFINITY),
(f64::INFINITY, 52, f64::INFINITY),
(f64::INFINITY, 1023, f64::INFINITY),
(f64::INFINITY, 1024, f64::INFINITY),
(f64::INFINITY, 1100, f64::INFINITY),
(f64::INFINITY, 2100, f64::INFINITY),
(f64::INFINITY, 4000, f64::INFINITY),
(f64::INFINITY, 2147483647, f64::INFINITY),
(f64::INFINITY, -2147483648, f64::INFINITY),
(f64::NEG_INFINITY, -2200, f64::NEG_INFINITY),
(f64::NEG_INFINITY, -1100, f64::NEG_INFINITY),
(f64::NEG_INFINITY, -1075, f64::NEG_INFINITY),
(f64::NEG_INFINITY, -1074, f64::NEG_INFINITY),
(f64::NEG_INFINITY, -1023, f64::NEG_INFINITY),
(f64::NEG_INFINITY, -1022, f64::NEG_INFINITY),
(f64::NEG_INFINITY, -60, f64::NEG_INFINITY),
(f64::NEG_INFINITY, -1, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 0, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 1, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 10, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 52, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 1023, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 1024, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 1100, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 2100, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 4000, f64::NEG_INFINITY),
(f64::NEG_INFINITY, 2147483647, f64::NEG_INFINITY),
(f64::NEG_INFINITY, -2147483648, f64::NEG_INFINITY),
(1.2345678901234567, -2200, 0.0),
(1.2345678901234567, -1100, 0.0),
(1.2345678901234567, -1075, 5e-324),
(1.2345678901234567, -1074, 5e-324),
(1.2345678901234567, -1023, 1.3735023694330475e-308),
(1.2345678901234567, -1022, 2.7470047388660944e-308),
(1.2345678901234567, -60, 1.0708169508421578e-18),
(1.2345678901234567, -1, 0.6172839450617283),
(1.2345678901234567, 0, 1.2345678901234567),
(1.2345678901234567, 1, 2.4691357802469134),
(1.2345678901234567, 10, 1264.1975194864197),
(1.2345678901234567, 52, 5559999489923579.0),
(1.2345678901234567, 1023, 1.109687110298196e+308),
(1.2345678901234567, 1024, f64::INFINITY),
(1.2345678901234567, 1100, f64::INFINITY),
(1.2345678901234567, 2100, f64::INFINITY),
(1.2345678901234567, 4000, f64::INFINITY),
(1.2345678901234567, 2147483647, f64::INFINITY),
(1.2345678901234567, -2147483648, 0.0),
(3e-320, -2200, 0.0),
(3e-320, -1100, 0.0),
(3e-320, -1075, 0.0),
(3e-320, -1074, 0.0),
(3e-320, -1023, 0.0),
(3e-320, -1022, 0.0),
(3e-320, -60, 0.0),
(3e-320, -1, 1.5e-320),
(3e-320, 0, 3e-320),
(3e-320, 1, 6e-320),
(3e-320, 10, 3.071966e-317),
(3e-320, 52, 1.3510648468855727e-304),
(3e-320, 1023, 2.6965096822095802e-12),
(3e-320, 1024, 5.3930193644191604e-12),
(3e-320, 1100, 407485022208.0),
(3e-320, 2100, f64::INFINITY),
(3e-320, 4000, f64::INFINITY),
(3e-320, 2147483647, f64::INFINITY),
(3e-320, -2147483648, 0.0),
];
for &(x, n, want) in CASES {
check("ldexp", &format!("{x:?}, {n}"), ldexp(x, n), want, 0.0, 0.0);
}
}
#[test]
fn ldexp_f32() {
let _report = Report;
const CASES: &[(f32, i32, f32)] = &[
(1.0, -400, 0.0),
(1.0, -200, 0.0),
(1.0, -150, 0.0),
(1.0, -149, 1e-45),
(1.0, -127, 5.877472e-39),
(1.0, -126, 1.1754944e-38),
(1.0, -60, 8.6736174e-19),
(1.0, -1, 0.5),
(1.0, 0, 1.0),
(1.0, 1, 2.0),
(1.0, 10, 1024.0),
(1.0, 23, 8.388608e+06),
(1.0, 127, 1.7014118e+38),
(1.0, 128, f32::INFINITY),
(1.0, 200, f32::INFINITY),
(1.0, 400, f32::INFINITY),
(1.0, 2147483647, f32::INFINITY),
(1.0, -2147483648, 0.0),
(-1.0, -400, -0.0),
(-1.0, -200, -0.0),
(-1.0, -150, -0.0),
(-1.0, -149, -1e-45),
(-1.0, -127, -5.877472e-39),
(-1.0, -126, -1.1754944e-38),
(-1.0, -60, -8.6736174e-19),
(-1.0, -1, -0.5),
(-1.0, 0, -1.0),
(-1.0, 1, -2.0),
(-1.0, 10, -1024.0),
(-1.0, 23, -8.388608e+06),
(-1.0, 127, -1.7014118e+38),
(-1.0, 128, f32::NEG_INFINITY),
(-1.0, 200, f32::NEG_INFINITY),
(-1.0, 400, f32::NEG_INFINITY),
(-1.0, 2147483647, f32::NEG_INFINITY),
(-1.0, -2147483648, -0.0),
(0.75, -400, 0.0),
(0.75, -200, 0.0),
(0.75, -150, 0.0),
(0.75, -149, 1e-45),
(0.75, -127, 4.408104e-39),
(0.75, -126, 8.816208e-39),
(0.75, -60, 6.505213e-19),
(0.75, -1, 0.375),
(0.75, 0, 0.75),
(0.75, 1, 1.5),
(0.75, 10, 768.0),
(0.75, 23, 6.291456e+06),
(0.75, 127, 1.2760589e+38),
(0.75, 128, 2.5521178e+38),
(0.75, 200, f32::INFINITY),
(0.75, 400, f32::INFINITY),
(0.75, 2147483647, f32::INFINITY),
(0.75, -2147483648, 0.0),
(3.0, -400, 0.0),
(3.0, -200, 0.0),
(3.0, -150, 3e-45),
(3.0, -149, 4e-45),
(3.0, -127, 1.7632415e-38),
(3.0, -126, 3.526483e-38),
(3.0, -60, 2.6020852e-18),
(3.0, -1, 1.5),
(3.0, 0, 3.0),
(3.0, 1, 6.0),
(3.0, 10, 3072.0),
(3.0, 23, 2.5165824e+07),
(3.0, 127, f32::INFINITY),
(3.0, 128, f32::INFINITY),
(3.0, 200, f32::INFINITY),
(3.0, 400, f32::INFINITY),
(3.0, 2147483647, f32::INFINITY),
(3.0, -2147483648, 0.0),
(1e-30, -400, 0.0),
(1e-30, -200, 0.0),
(1e-30, -150, 0.0),
(1e-30, -149, 0.0),
(1e-30, -127, 0.0),
(1e-30, -126, 0.0),
(1e-30, -60, 0.0),
(1e-30, -1, 5e-31),
(1e-30, 0, 1e-30),
(1e-30, 1, 2e-30),
(1e-30, 10, 1.024e-27),
(1e-30, 23, 8.388608e-24),
(1e-30, 127, 1.7014118e+08),
(1e-30, 128, 3.4028237e+08),
(1e-30, 200, 1.606938e+30),
(1e-30, 400, f32::INFINITY),
(1e-30, 2147483647, f32::INFINITY),
(1e-30, -2147483648, 0.0),
(1e-45, -400, 0.0),
(1e-45, -200, 0.0),
(1e-45, -150, 0.0),
(1e-45, -149, 0.0),
(1e-45, -127, 0.0),
(1e-45, -126, 0.0),
(1e-45, -60, 0.0),
(1e-45, -1, 0.0),
(1e-45, 0, 1e-45),
(1e-45, 1, 3e-45),
(1e-45, 10, 1.435e-42),
(1e-45, 23, 1.1754944e-38),
(1e-45, 127, 2.3841858e-07),
(1e-45, 128, 4.7683716e-07),
(1e-45, 200, 2.2517998e+15),
(1e-45, 400, f32::INFINITY),
(1e-45, 2147483647, f32::INFINITY),
(1e-45, -2147483648, 0.0),
(3.4028235e+38, -400, 0.0),
(3.4028235e+38, -200, 2.1175822e-22),
(3.4028235e+38, -150, 2.3841856e-07),
(3.4028235e+38, -149, 4.7683713e-07),
(3.4028235e+38, -127, 1.9999999),
(3.4028235e+38, -126, 3.9999998),
(3.4028235e+38, -60, 2.9514789e+20),
(3.4028235e+38, -1, 1.7014117e+38),
(3.4028235e+38, 0, 3.4028235e+38),
(3.4028235e+38, 1, f32::INFINITY),
(3.4028235e+38, 10, f32::INFINITY),
(3.4028235e+38, 23, f32::INFINITY),
(3.4028235e+38, 127, f32::INFINITY),
(3.4028235e+38, 128, f32::INFINITY),
(3.4028235e+38, 200, f32::INFINITY),
(3.4028235e+38, 400, f32::INFINITY),
(3.4028235e+38, 2147483647, f32::INFINITY),
(3.4028235e+38, -2147483648, 0.0),
(0.0, -400, 0.0),
(0.0, -200, 0.0),
(0.0, -150, 0.0),
(0.0, -149, 0.0),
(0.0, -127, 0.0),
(0.0, -126, 0.0),
(0.0, -60, 0.0),
(0.0, -1, 0.0),
(0.0, 0, 0.0),
(0.0, 1, 0.0),
(0.0, 10, 0.0),
(0.0, 23, 0.0),
(0.0, 127, 0.0),
(0.0, 128, 0.0),
(0.0, 200, 0.0),
(0.0, 400, 0.0),
(0.0, 2147483647, 0.0),
(0.0, -2147483648, 0.0),
(-0.0, -400, -0.0),
(-0.0, -200, -0.0),
(-0.0, -150, -0.0),
(-0.0, -149, -0.0),
(-0.0, -127, -0.0),
(-0.0, -126, -0.0),
(-0.0, -60, -0.0),
(-0.0, -1, -0.0),
(-0.0, 0, -0.0),
(-0.0, 1, -0.0),
(-0.0, 10, -0.0),
(-0.0, 23, -0.0),
(-0.0, 127, -0.0),
(-0.0, 128, -0.0),
(-0.0, 200, -0.0),
(-0.0, 400, -0.0),
(-0.0, 2147483647, -0.0),
(-0.0, -2147483648, -0.0),
(f32::NAN, -400, f32::NAN),
(f32::NAN, -200, f32::NAN),
(f32::NAN, -150, f32::NAN),
(f32::NAN, -149, f32::NAN),
(f32::NAN, -127, f32::NAN),
(f32::NAN, -126, f32::NAN),
(f32::NAN, -60, f32::NAN),
(f32::NAN, -1, f32::NAN),
(f32::NAN, 0, f32::NAN),
(f32::NAN, 1, f32::NAN),
(f32::NAN, 10, f32::NAN),
(f32::NAN, 23, f32::NAN),
(f32::NAN, 127, f32::NAN),
(f32::NAN, 128, f32::NAN),
(f32::NAN, 200, f32::NAN),
(f32::NAN, 400, f32::NAN),
(f32::NAN, 2147483647, f32::NAN),
(f32::NAN, -2147483648, f32::NAN),
(f32::INFINITY, -400, f32::INFINITY),
(f32::INFINITY, -200, f32::INFINITY),
(f32::INFINITY, -150, f32::INFINITY),
(f32::INFINITY, -149, f32::INFINITY),
(f32::INFINITY, -127, f32::INFINITY),
(f32::INFINITY, -126, f32::INFINITY),
(f32::INFINITY, -60, f32::INFINITY),
(f32::INFINITY, -1, f32::INFINITY),
(f32::INFINITY, 0, f32::INFINITY),
(f32::INFINITY, 1, f32::INFINITY),
(f32::INFINITY, 10, f32::INFINITY),
(f32::INFINITY, 23, f32::INFINITY),
(f32::INFINITY, 127, f32::INFINITY),
(f32::INFINITY, 128, f32::INFINITY),
(f32::INFINITY, 200, f32::INFINITY),
(f32::INFINITY, 400, f32::INFINITY),
(f32::INFINITY, 2147483647, f32::INFINITY),
(f32::INFINITY, -2147483648, f32::INFINITY),
(f32::NEG_INFINITY, -400, f32::NEG_INFINITY),
(f32::NEG_INFINITY, -200, f32::NEG_INFINITY),
(f32::NEG_INFINITY, -150, f32::NEG_INFINITY),
(f32::NEG_INFINITY, -149, f32::NEG_INFINITY),
(f32::NEG_INFINITY, -127, f32::NEG_INFINITY),
(f32::NEG_INFINITY, -126, f32::NEG_INFINITY),
(f32::NEG_INFINITY, -60, f32::NEG_INFINITY),
(f32::NEG_INFINITY, -1, f32::NEG_INFINITY),
(f32::NEG_INFINITY, 0, f32::NEG_INFINITY),
(f32::NEG_INFINITY, 1, f32::NEG_INFINITY),
(f32::NEG_INFINITY, 10, f32::NEG_INFINITY),
(f32::NEG_INFINITY, 23, f32::NEG_INFINITY),
(f32::NEG_INFINITY, 127, f32::NEG_INFINITY),
(f32::NEG_INFINITY, 128, f32::NEG_INFINITY),
(f32::NEG_INFINITY, 200, f32::NEG_INFINITY),
(f32::NEG_INFINITY, 400, f32::NEG_INFINITY),
(f32::NEG_INFINITY, 2147483647, f32::NEG_INFINITY),
(f32::NEG_INFINITY, -2147483648, f32::NEG_INFINITY),
(1.2345678, -400, 0.0),
(1.2345678, -200, 0.0),
(1.2345678, -150, 1e-45),
(1.2345678, -149, 1e-45),
(1.2345678, -127, 7.256136e-39),
(1.2345678, -126, 1.4512274e-38),
(1.2345678, -60, 1.0708168e-18),
(1.2345678, -1, 0.6172839),
(1.2345678, 0, 1.2345678),
(1.2345678, 1, 2.4691355),
(1.2345678, 10, 1264.1974),
(1.2345678, 23, 1.0356305e+07),
(1.2345678, 127, 2.1005082e+38),
(1.2345678, 128, f32::INFINITY),
(1.2345678, 200, f32::INFINITY),
(1.2345678, 400, f32::INFINITY),
(1.2345678, 2147483647, f32::INFINITY),
(1.2345678, -2147483648, 0.0),
(3e-40, -400, 0.0),
(3e-40, -200, 0.0),
(3e-40, -150, 0.0),
(3e-40, -149, 0.0),
(3e-40, -127, 0.0),
(3e-40, -126, 0.0),
(3e-40, -60, 0.0),
(3e-40, -1, 1.5e-40),
(3e-40, 0, 3e-40),
(3e-40, 1, 6e-40),
(3e-40, 10, 3.0719978e-37),
(3e-40, 23, 2.5165806e-33),
(3e-40, 127, 0.05104232),
(3e-40, 128, 0.10208464),
(3e-40, 200, 4.8208107e+20),
(3e-40, 400, f32::INFINITY),
(3e-40, 2147483647, f32::INFINITY),
(3e-40, -2147483648, 0.0),
];
for &(x, n, want) in CASES {
check("ldexp", &format!("{x:?}, {n}"), ldexp(x, n), want, 0.0, 0.0);
}
}
#[test]
fn gcd_lcm_i64() {
let _report = Report;
const CASES: &[(i64, i64, i64, i64)] = &[
(0_i64, 0_i64, 0_i64, 0_i64),
(0_i64, 1_i64, 1_i64, 0_i64),
(0_i64, -1_i64, 1_i64, 0_i64),
(0_i64, 2_i64, 2_i64, 0_i64),
(0_i64, -2_i64, 2_i64, 0_i64),
(0_i64, 6_i64, 6_i64, 0_i64),
(0_i64, -6_i64, 6_i64, 0_i64),
(0_i64, 12_i64, 12_i64, 0_i64),
(0_i64, 18_i64, 18_i64, 0_i64),
(0_i64, -18_i64, 18_i64, 0_i64),
(0_i64, 35_i64, 35_i64, 0_i64),
(0_i64, 1071_i64, 1071_i64, 0_i64),
(0_i64, 462_i64, 462_i64, 0_i64),
(0_i64, 2147483648_i64, 2147483648_i64, 0_i64),
(0_i64, 1099511627782_i64, 1099511627782_i64, 0_i64),
(
0_i64,
4611686018427387904_i64,
4611686018427387904_i64,
0_i64,
),
(
0_i64,
-4611686018427387904_i64,
4611686018427387904_i64,
0_i64,
),
(0_i64, 205891132094649_i64, 205891132094649_i64, 0_i64),
(
0_i64,
1000000000000000000_i64,
1000000000000000000_i64,
0_i64,
),
(0_i64, i64::MIN, i64::MIN, 0_i64),
(
0_i64,
9223372036854775807_i64,
9223372036854775807_i64,
0_i64,
),
(0_i64, 7_i64, 7_i64, 0_i64),
(0_i64, 0_i64, 0_i64, 0_i64),
(1_i64, 0_i64, 1_i64, 0_i64),
(1_i64, 1_i64, 1_i64, 1_i64),
(1_i64, -1_i64, 1_i64, 1_i64),
(1_i64, 2_i64, 1_i64, 2_i64),
(1_i64, -2_i64, 1_i64, 2_i64),
(1_i64, 6_i64, 1_i64, 6_i64),
(1_i64, -6_i64, 1_i64, 6_i64),
(1_i64, 12_i64, 1_i64, 12_i64),
(1_i64, 18_i64, 1_i64, 18_i64),
(1_i64, -18_i64, 1_i64, 18_i64),
(1_i64, 35_i64, 1_i64, 35_i64),
(1_i64, 1071_i64, 1_i64, 1071_i64),
(1_i64, 462_i64, 1_i64, 462_i64),
(1_i64, 2147483648_i64, 1_i64, 2147483648_i64),
(1_i64, 1099511627782_i64, 1_i64, 1099511627782_i64),
(
1_i64,
4611686018427387904_i64,
1_i64,
4611686018427387904_i64,
),
(
1_i64,
-4611686018427387904_i64,
1_i64,
4611686018427387904_i64,
),
(1_i64, 205891132094649_i64, 1_i64, 205891132094649_i64),
(
1_i64,
1000000000000000000_i64,
1_i64,
1000000000000000000_i64,
),
(1_i64, i64::MIN, 1_i64, i64::MIN),
(
1_i64,
9223372036854775807_i64,
1_i64,
9223372036854775807_i64,
),
(1_i64, 7_i64, 1_i64, 7_i64),
(1_i64, 0_i64, 1_i64, 0_i64),
(-1_i64, 0_i64, 1_i64, 0_i64),
(-1_i64, 1_i64, 1_i64, 1_i64),
(-1_i64, -1_i64, 1_i64, 1_i64),
(-1_i64, 2_i64, 1_i64, 2_i64),
(-1_i64, -2_i64, 1_i64, 2_i64),
(-1_i64, 6_i64, 1_i64, 6_i64),
(-1_i64, -6_i64, 1_i64, 6_i64),
(-1_i64, 12_i64, 1_i64, 12_i64),
(-1_i64, 18_i64, 1_i64, 18_i64),
(-1_i64, -18_i64, 1_i64, 18_i64),
(-1_i64, 35_i64, 1_i64, 35_i64),
(-1_i64, 1071_i64, 1_i64, 1071_i64),
(-1_i64, 462_i64, 1_i64, 462_i64),
(-1_i64, 2147483648_i64, 1_i64, 2147483648_i64),
(-1_i64, 1099511627782_i64, 1_i64, 1099511627782_i64),
(
-1_i64,
4611686018427387904_i64,
1_i64,
4611686018427387904_i64,
),
(
-1_i64,
-4611686018427387904_i64,
1_i64,
4611686018427387904_i64,
),
(-1_i64, 205891132094649_i64, 1_i64, 205891132094649_i64),
(
-1_i64,
1000000000000000000_i64,
1_i64,
1000000000000000000_i64,
),
(-1_i64, i64::MIN, 1_i64, i64::MIN),
(
-1_i64,
9223372036854775807_i64,
1_i64,
9223372036854775807_i64,
),
(-1_i64, 7_i64, 1_i64, 7_i64),
(-1_i64, 0_i64, 1_i64, 0_i64),
(2_i64, 0_i64, 2_i64, 0_i64),
(2_i64, 1_i64, 1_i64, 2_i64),
(2_i64, -1_i64, 1_i64, 2_i64),
(2_i64, 2_i64, 2_i64, 2_i64),
(2_i64, -2_i64, 2_i64, 2_i64),
(2_i64, 6_i64, 2_i64, 6_i64),
(2_i64, -6_i64, 2_i64, 6_i64),
(2_i64, 12_i64, 2_i64, 12_i64),
(2_i64, 18_i64, 2_i64, 18_i64),
(2_i64, -18_i64, 2_i64, 18_i64),
(2_i64, 35_i64, 1_i64, 70_i64),
(2_i64, 1071_i64, 1_i64, 2142_i64),
(2_i64, 462_i64, 2_i64, 462_i64),
(2_i64, 2147483648_i64, 2_i64, 2147483648_i64),
(2_i64, 1099511627782_i64, 2_i64, 1099511627782_i64),
(
2_i64,
4611686018427387904_i64,
2_i64,
4611686018427387904_i64,
),
(
2_i64,
-4611686018427387904_i64,
2_i64,
4611686018427387904_i64,
),
(2_i64, 205891132094649_i64, 1_i64, 411782264189298_i64),
(
2_i64,
1000000000000000000_i64,
2_i64,
1000000000000000000_i64,
),
(2_i64, i64::MIN, 2_i64, i64::MIN),
(2_i64, 9223372036854775807_i64, 1_i64, -2_i64),
(2_i64, 7_i64, 1_i64, 14_i64),
(2_i64, 0_i64, 2_i64, 0_i64),
(-2_i64, 0_i64, 2_i64, 0_i64),
(-2_i64, 1_i64, 1_i64, 2_i64),
(-2_i64, -1_i64, 1_i64, 2_i64),
(-2_i64, 2_i64, 2_i64, 2_i64),
(-2_i64, -2_i64, 2_i64, 2_i64),
(-2_i64, 6_i64, 2_i64, 6_i64),
(-2_i64, -6_i64, 2_i64, 6_i64),
(-2_i64, 12_i64, 2_i64, 12_i64),
(-2_i64, 18_i64, 2_i64, 18_i64),
(-2_i64, -18_i64, 2_i64, 18_i64),
(-2_i64, 35_i64, 1_i64, 70_i64),
(-2_i64, 1071_i64, 1_i64, 2142_i64),
(-2_i64, 462_i64, 2_i64, 462_i64),
(-2_i64, 2147483648_i64, 2_i64, 2147483648_i64),
(-2_i64, 1099511627782_i64, 2_i64, 1099511627782_i64),
(
-2_i64,
4611686018427387904_i64,
2_i64,
4611686018427387904_i64,
),
(
-2_i64,
-4611686018427387904_i64,
2_i64,
4611686018427387904_i64,
),
(-2_i64, 205891132094649_i64, 1_i64, 411782264189298_i64),
(
-2_i64,
1000000000000000000_i64,
2_i64,
1000000000000000000_i64,
),
(-2_i64, i64::MIN, 2_i64, i64::MIN),
(-2_i64, 9223372036854775807_i64, 1_i64, -2_i64),
(-2_i64, 7_i64, 1_i64, 14_i64),
(-2_i64, 0_i64, 2_i64, 0_i64),
(6_i64, 0_i64, 6_i64, 0_i64),
(6_i64, 1_i64, 1_i64, 6_i64),
(6_i64, -1_i64, 1_i64, 6_i64),
(6_i64, 2_i64, 2_i64, 6_i64),
(6_i64, -2_i64, 2_i64, 6_i64),
(6_i64, 6_i64, 6_i64, 6_i64),
(6_i64, -6_i64, 6_i64, 6_i64),
(6_i64, 12_i64, 6_i64, 12_i64),
(6_i64, 18_i64, 6_i64, 18_i64),
(6_i64, -18_i64, 6_i64, 18_i64),
(6_i64, 35_i64, 1_i64, 210_i64),
(6_i64, 1071_i64, 3_i64, 2142_i64),
(6_i64, 462_i64, 6_i64, 462_i64),
(6_i64, 2147483648_i64, 2_i64, 6442450944_i64),
(6_i64, 1099511627782_i64, 2_i64, 3298534883346_i64),
(
6_i64,
4611686018427387904_i64,
2_i64,
-4611686018427387904_i64,
),
(
6_i64,
-4611686018427387904_i64,
2_i64,
-4611686018427387904_i64,
),
(6_i64, 205891132094649_i64, 3_i64, 411782264189298_i64),
(
6_i64,
1000000000000000000_i64,
2_i64,
3000000000000000000_i64,
),
(6_i64, i64::MIN, 2_i64, i64::MIN),
(6_i64, 9223372036854775807_i64, 1_i64, -6_i64),
(6_i64, 7_i64, 1_i64, 42_i64),
(6_i64, 0_i64, 6_i64, 0_i64),
(-6_i64, 0_i64, 6_i64, 0_i64),
(-6_i64, 1_i64, 1_i64, 6_i64),
(-6_i64, -1_i64, 1_i64, 6_i64),
(-6_i64, 2_i64, 2_i64, 6_i64),
(-6_i64, -2_i64, 2_i64, 6_i64),
(-6_i64, 6_i64, 6_i64, 6_i64),
(-6_i64, -6_i64, 6_i64, 6_i64),
(-6_i64, 12_i64, 6_i64, 12_i64),
(-6_i64, 18_i64, 6_i64, 18_i64),
(-6_i64, -18_i64, 6_i64, 18_i64),
(-6_i64, 35_i64, 1_i64, 210_i64),
(-6_i64, 1071_i64, 3_i64, 2142_i64),
(-6_i64, 462_i64, 6_i64, 462_i64),
(-6_i64, 2147483648_i64, 2_i64, 6442450944_i64),
(-6_i64, 1099511627782_i64, 2_i64, 3298534883346_i64),
(
-6_i64,
4611686018427387904_i64,
2_i64,
-4611686018427387904_i64,
),
(
-6_i64,
-4611686018427387904_i64,
2_i64,
-4611686018427387904_i64,
),
(-6_i64, 205891132094649_i64, 3_i64, 411782264189298_i64),
(
-6_i64,
1000000000000000000_i64,
2_i64,
3000000000000000000_i64,
),
(-6_i64, i64::MIN, 2_i64, i64::MIN),
(-6_i64, 9223372036854775807_i64, 1_i64, -6_i64),
(-6_i64, 7_i64, 1_i64, 42_i64),
(-6_i64, 0_i64, 6_i64, 0_i64),
(12_i64, 0_i64, 12_i64, 0_i64),
(12_i64, 1_i64, 1_i64, 12_i64),
(12_i64, -1_i64, 1_i64, 12_i64),
(12_i64, 2_i64, 2_i64, 12_i64),
(12_i64, -2_i64, 2_i64, 12_i64),
(12_i64, 6_i64, 6_i64, 12_i64),
(12_i64, -6_i64, 6_i64, 12_i64),
(12_i64, 12_i64, 12_i64, 12_i64),
(12_i64, 18_i64, 6_i64, 36_i64),
(12_i64, -18_i64, 6_i64, 36_i64),
(12_i64, 35_i64, 1_i64, 420_i64),
(12_i64, 1071_i64, 3_i64, 4284_i64),
(12_i64, 462_i64, 6_i64, 924_i64),
(12_i64, 2147483648_i64, 4_i64, 6442450944_i64),
(12_i64, 1099511627782_i64, 2_i64, 6597069766692_i64),
(
12_i64,
4611686018427387904_i64,
4_i64,
-4611686018427387904_i64,
),
(
12_i64,
-4611686018427387904_i64,
4_i64,
-4611686018427387904_i64,
),
(12_i64, 205891132094649_i64, 3_i64, 823564528378596_i64),
(
12_i64,
1000000000000000000_i64,
4_i64,
3000000000000000000_i64,
),
(12_i64, i64::MIN, 4_i64, i64::MIN),
(12_i64, 9223372036854775807_i64, 1_i64, -12_i64),
(12_i64, 7_i64, 1_i64, 84_i64),
(12_i64, 0_i64, 12_i64, 0_i64),
(18_i64, 0_i64, 18_i64, 0_i64),
(18_i64, 1_i64, 1_i64, 18_i64),
(18_i64, -1_i64, 1_i64, 18_i64),
(18_i64, 2_i64, 2_i64, 18_i64),
(18_i64, -2_i64, 2_i64, 18_i64),
(18_i64, 6_i64, 6_i64, 18_i64),
(18_i64, -6_i64, 6_i64, 18_i64),
(18_i64, 12_i64, 6_i64, 36_i64),
(18_i64, 18_i64, 18_i64, 18_i64),
(18_i64, -18_i64, 18_i64, 18_i64),
(18_i64, 35_i64, 1_i64, 630_i64),
(18_i64, 1071_i64, 9_i64, 2142_i64),
(18_i64, 462_i64, 6_i64, 1386_i64),
(18_i64, 2147483648_i64, 2_i64, 19327352832_i64),
(18_i64, 1099511627782_i64, 2_i64, 9895604650038_i64),
(
18_i64,
4611686018427387904_i64,
2_i64,
4611686018427387904_i64,
),
(
18_i64,
-4611686018427387904_i64,
2_i64,
4611686018427387904_i64,
),
(18_i64, 205891132094649_i64, 9_i64, 411782264189298_i64),
(
18_i64,
1000000000000000000_i64,
2_i64,
9000000000000000000_i64,
),
(18_i64, i64::MIN, 2_i64, i64::MIN),
(18_i64, 9223372036854775807_i64, 1_i64, -18_i64),
(18_i64, 7_i64, 1_i64, 126_i64),
(18_i64, 0_i64, 18_i64, 0_i64),
(-18_i64, 0_i64, 18_i64, 0_i64),
(-18_i64, 1_i64, 1_i64, 18_i64),
(-18_i64, -1_i64, 1_i64, 18_i64),
(-18_i64, 2_i64, 2_i64, 18_i64),
(-18_i64, -2_i64, 2_i64, 18_i64),
(-18_i64, 6_i64, 6_i64, 18_i64),
(-18_i64, -6_i64, 6_i64, 18_i64),
(-18_i64, 12_i64, 6_i64, 36_i64),
(-18_i64, 18_i64, 18_i64, 18_i64),
(-18_i64, -18_i64, 18_i64, 18_i64),
(-18_i64, 35_i64, 1_i64, 630_i64),
(-18_i64, 1071_i64, 9_i64, 2142_i64),
(-18_i64, 462_i64, 6_i64, 1386_i64),
(-18_i64, 2147483648_i64, 2_i64, 19327352832_i64),
(-18_i64, 1099511627782_i64, 2_i64, 9895604650038_i64),
(
-18_i64,
4611686018427387904_i64,
2_i64,
4611686018427387904_i64,
),
(
-18_i64,
-4611686018427387904_i64,
2_i64,
4611686018427387904_i64,
),
(-18_i64, 205891132094649_i64, 9_i64, 411782264189298_i64),
(
-18_i64,
1000000000000000000_i64,
2_i64,
9000000000000000000_i64,
),
(-18_i64, i64::MIN, 2_i64, i64::MIN),
(-18_i64, 9223372036854775807_i64, 1_i64, -18_i64),
(-18_i64, 7_i64, 1_i64, 126_i64),
(-18_i64, 0_i64, 18_i64, 0_i64),
(35_i64, 0_i64, 35_i64, 0_i64),
(35_i64, 1_i64, 1_i64, 35_i64),
(35_i64, -1_i64, 1_i64, 35_i64),
(35_i64, 2_i64, 1_i64, 70_i64),
(35_i64, -2_i64, 1_i64, 70_i64),
(35_i64, 6_i64, 1_i64, 210_i64),
(35_i64, -6_i64, 1_i64, 210_i64),
(35_i64, 12_i64, 1_i64, 420_i64),
(35_i64, 18_i64, 1_i64, 630_i64),
(35_i64, -18_i64, 1_i64, 630_i64),
(35_i64, 35_i64, 35_i64, 35_i64),
(35_i64, 1071_i64, 7_i64, 5355_i64),
(35_i64, 462_i64, 7_i64, 2310_i64),
(35_i64, 2147483648_i64, 1_i64, 75161927680_i64),
(35_i64, 1099511627782_i64, 1_i64, 38482906972370_i64),
(
35_i64,
4611686018427387904_i64,
1_i64,
-4611686018427387904_i64,
),
(
35_i64,
-4611686018427387904_i64,
1_i64,
-4611686018427387904_i64,
),
(35_i64, 205891132094649_i64, 1_i64, 7206189623312715_i64),
(
35_i64,
1000000000000000000_i64,
5_i64,
7000000000000000000_i64,
),
(35_i64, i64::MIN, 1_i64, i64::MIN),
(
35_i64,
9223372036854775807_i64,
7_i64,
9223372036854775803_i64,
),
(35_i64, 7_i64, 7_i64, 35_i64),
(35_i64, 0_i64, 35_i64, 0_i64),
(1071_i64, 0_i64, 1071_i64, 0_i64),
(1071_i64, 1_i64, 1_i64, 1071_i64),
(1071_i64, -1_i64, 1_i64, 1071_i64),
(1071_i64, 2_i64, 1_i64, 2142_i64),
(1071_i64, -2_i64, 1_i64, 2142_i64),
(1071_i64, 6_i64, 3_i64, 2142_i64),
(1071_i64, -6_i64, 3_i64, 2142_i64),
(1071_i64, 12_i64, 3_i64, 4284_i64),
(1071_i64, 18_i64, 9_i64, 2142_i64),
(1071_i64, -18_i64, 9_i64, 2142_i64),
(1071_i64, 35_i64, 7_i64, 5355_i64),
(1071_i64, 1071_i64, 1071_i64, 1071_i64),
(1071_i64, 462_i64, 21_i64, 23562_i64),
(1071_i64, 2147483648_i64, 1_i64, 2299954987008_i64),
(1071_i64, 1099511627782_i64, 1_i64, 1177576953354522_i64),
(
1071_i64,
4611686018427387904_i64,
1_i64,
-4611686018427387904_i64,
),
(
1071_i64,
-4611686018427387904_i64,
1_i64,
-4611686018427387904_i64,
),
(1071_i64, 205891132094649_i64, 9_i64, 24501044719263231_i64),
(
1071_i64,
1000000000000000000_i64,
1_i64,
1088843724846006272_i64,
),
(1071_i64, i64::MIN, 1_i64, i64::MIN),
(
1071_i64,
9223372036854775807_i64,
7_i64,
9223372036854775655_i64,
),
(1071_i64, 7_i64, 7_i64, 1071_i64),
(1071_i64, 0_i64, 1071_i64, 0_i64),
(462_i64, 0_i64, 462_i64, 0_i64),
(462_i64, 1_i64, 1_i64, 462_i64),
(462_i64, -1_i64, 1_i64, 462_i64),
(462_i64, 2_i64, 2_i64, 462_i64),
(462_i64, -2_i64, 2_i64, 462_i64),
(462_i64, 6_i64, 6_i64, 462_i64),
(462_i64, -6_i64, 6_i64, 462_i64),
(462_i64, 12_i64, 6_i64, 924_i64),
(462_i64, 18_i64, 6_i64, 1386_i64),
(462_i64, -18_i64, 6_i64, 1386_i64),
(462_i64, 35_i64, 7_i64, 2310_i64),
(462_i64, 1071_i64, 21_i64, 23562_i64),
(462_i64, 462_i64, 462_i64, 462_i64),
(462_i64, 2147483648_i64, 2_i64, 496068722688_i64),
(462_i64, 1099511627782_i64, 2_i64, 253987186017642_i64),
(
462_i64,
4611686018427387904_i64,
2_i64,
-4611686018427387904_i64,
),
(
462_i64,
-4611686018427387904_i64,
2_i64,
-4611686018427387904_i64,
),
(462_i64, 205891132094649_i64, 3_i64, 31707234342575946_i64),
(
462_i64,
1000000000000000000_i64,
2_i64,
-8807672958224171008_i64,
),
(462_i64, i64::MIN, 2_i64, i64::MIN),
(462_i64, 9223372036854775807_i64, 7_i64, -66_i64),
(462_i64, 7_i64, 7_i64, 462_i64),
(462_i64, 0_i64, 462_i64, 0_i64),
(2147483648_i64, 0_i64, 2147483648_i64, 0_i64),
(2147483648_i64, 1_i64, 1_i64, 2147483648_i64),
(2147483648_i64, -1_i64, 1_i64, 2147483648_i64),
(2147483648_i64, 2_i64, 2_i64, 2147483648_i64),
(2147483648_i64, -2_i64, 2_i64, 2147483648_i64),
(2147483648_i64, 6_i64, 2_i64, 6442450944_i64),
(2147483648_i64, -6_i64, 2_i64, 6442450944_i64),
(2147483648_i64, 12_i64, 4_i64, 6442450944_i64),
(2147483648_i64, 18_i64, 2_i64, 19327352832_i64),
(2147483648_i64, -18_i64, 2_i64, 19327352832_i64),
(2147483648_i64, 35_i64, 1_i64, 75161927680_i64),
(2147483648_i64, 1071_i64, 1_i64, 2299954987008_i64),
(2147483648_i64, 462_i64, 2_i64, 496068722688_i64),
(
2147483648_i64,
2147483648_i64,
2147483648_i64,
2147483648_i64,
),
(2147483648_i64, 1099511627782_i64, 2_i64, 6442450944_i64),
(
2147483648_i64,
4611686018427387904_i64,
2147483648_i64,
4611686018427387904_i64,
),
(
2147483648_i64,
-4611686018427387904_i64,
2147483648_i64,
4611686018427387904_i64,
),
(
2147483648_i64,
205891132094649_i64,
1_i64,
-2169261277526884352_i64,
),
(
2147483648_i64,
1000000000000000000_i64,
262144_i64,
1645631272959082496_i64,
),
(2147483648_i64, i64::MIN, 2147483648_i64, i64::MIN),
(
2147483648_i64,
9223372036854775807_i64,
1_i64,
-2147483648_i64,
),
(2147483648_i64, 7_i64, 1_i64, 15032385536_i64),
(2147483648_i64, 0_i64, 2147483648_i64, 0_i64),
(1099511627782_i64, 0_i64, 1099511627782_i64, 0_i64),
(1099511627782_i64, 1_i64, 1_i64, 1099511627782_i64),
(1099511627782_i64, -1_i64, 1_i64, 1099511627782_i64),
(1099511627782_i64, 2_i64, 2_i64, 1099511627782_i64),
(1099511627782_i64, -2_i64, 2_i64, 1099511627782_i64),
(1099511627782_i64, 6_i64, 2_i64, 3298534883346_i64),
(1099511627782_i64, -6_i64, 2_i64, 3298534883346_i64),
(1099511627782_i64, 12_i64, 2_i64, 6597069766692_i64),
(1099511627782_i64, 18_i64, 2_i64, 9895604650038_i64),
(1099511627782_i64, -18_i64, 2_i64, 9895604650038_i64),
(1099511627782_i64, 35_i64, 1_i64, 38482906972370_i64),
(1099511627782_i64, 1071_i64, 1_i64, 1177576953354522_i64),
(1099511627782_i64, 462_i64, 2_i64, 253987186017642_i64),
(1099511627782_i64, 2147483648_i64, 2_i64, 6442450944_i64),
(
1099511627782_i64,
1099511627782_i64,
1099511627782_i64,
1099511627782_i64,
),
(
1099511627782_i64,
4611686018427387904_i64,
2_i64,
-4611686018427387904_i64,
),
(
1099511627782_i64,
-4611686018427387904_i64,
2_i64,
-4611686018427387904_i64,
),
(
1099511627782_i64,
205891132094649_i64,
1_i64,
-3855894324399123370_i64,
),
(
1099511627782_i64,
1000000000000000000_i64,
2_i64,
-2620492334958379008_i64,
),
(1099511627782_i64, i64::MIN, 2_i64, i64::MIN),
(
1099511627782_i64,
9223372036854775807_i64,
1_i64,
-1099511627782_i64,
),
(1099511627782_i64, 7_i64, 1_i64, 7696581394474_i64),
(1099511627782_i64, 0_i64, 1099511627782_i64, 0_i64),
(
4611686018427387904_i64,
0_i64,
4611686018427387904_i64,
0_i64,
),
(
4611686018427387904_i64,
1_i64,
1_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
-1_i64,
1_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
2_i64,
2_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
-2_i64,
2_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
6_i64,
2_i64,
-4611686018427387904_i64,
),
(
4611686018427387904_i64,
-6_i64,
2_i64,
-4611686018427387904_i64,
),
(
4611686018427387904_i64,
12_i64,
4_i64,
-4611686018427387904_i64,
),
(
4611686018427387904_i64,
18_i64,
2_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
-18_i64,
2_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
35_i64,
1_i64,
-4611686018427387904_i64,
),
(
4611686018427387904_i64,
1071_i64,
1_i64,
-4611686018427387904_i64,
),
(
4611686018427387904_i64,
462_i64,
2_i64,
-4611686018427387904_i64,
),
(
4611686018427387904_i64,
2147483648_i64,
2147483648_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
1099511627782_i64,
2_i64,
-4611686018427387904_i64,
),
(
4611686018427387904_i64,
4611686018427387904_i64,
4611686018427387904_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
-4611686018427387904_i64,
4611686018427387904_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
205891132094649_i64,
1_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
1000000000000000000_i64,
262144_i64,
4611686018427387904_i64,
),
(
4611686018427387904_i64,
i64::MIN,
4611686018427387904_i64,
i64::MIN,
),
(
4611686018427387904_i64,
9223372036854775807_i64,
1_i64,
-4611686018427387904_i64,
),
(
4611686018427387904_i64,
7_i64,
1_i64,
-4611686018427387904_i64,
),
(
4611686018427387904_i64,
0_i64,
4611686018427387904_i64,
0_i64,
),
(
-4611686018427387904_i64,
0_i64,
4611686018427387904_i64,
0_i64,
),
(
-4611686018427387904_i64,
1_i64,
1_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
-1_i64,
1_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
2_i64,
2_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
-2_i64,
2_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
6_i64,
2_i64,
-4611686018427387904_i64,
),
(
-4611686018427387904_i64,
-6_i64,
2_i64,
-4611686018427387904_i64,
),
(
-4611686018427387904_i64,
12_i64,
4_i64,
-4611686018427387904_i64,
),
(
-4611686018427387904_i64,
18_i64,
2_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
-18_i64,
2_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
35_i64,
1_i64,
-4611686018427387904_i64,
),
(
-4611686018427387904_i64,
1071_i64,
1_i64,
-4611686018427387904_i64,
),
(
-4611686018427387904_i64,
462_i64,
2_i64,
-4611686018427387904_i64,
),
(
-4611686018427387904_i64,
2147483648_i64,
2147483648_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
1099511627782_i64,
2_i64,
-4611686018427387904_i64,
),
(
-4611686018427387904_i64,
4611686018427387904_i64,
4611686018427387904_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
-4611686018427387904_i64,
4611686018427387904_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
205891132094649_i64,
1_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
1000000000000000000_i64,
262144_i64,
4611686018427387904_i64,
),
(
-4611686018427387904_i64,
i64::MIN,
4611686018427387904_i64,
i64::MIN,
),
(
-4611686018427387904_i64,
9223372036854775807_i64,
1_i64,
-4611686018427387904_i64,
),
(
-4611686018427387904_i64,
7_i64,
1_i64,
-4611686018427387904_i64,
),
(
-4611686018427387904_i64,
0_i64,
4611686018427387904_i64,
0_i64,
),
(205891132094649_i64, 0_i64, 205891132094649_i64, 0_i64),
(205891132094649_i64, 1_i64, 1_i64, 205891132094649_i64),
(205891132094649_i64, -1_i64, 1_i64, 205891132094649_i64),
(205891132094649_i64, 2_i64, 1_i64, 411782264189298_i64),
(205891132094649_i64, -2_i64, 1_i64, 411782264189298_i64),
(205891132094649_i64, 6_i64, 3_i64, 411782264189298_i64),
(205891132094649_i64, -6_i64, 3_i64, 411782264189298_i64),
(205891132094649_i64, 12_i64, 3_i64, 823564528378596_i64),
(205891132094649_i64, 18_i64, 9_i64, 411782264189298_i64),
(205891132094649_i64, -18_i64, 9_i64, 411782264189298_i64),
(205891132094649_i64, 35_i64, 1_i64, 7206189623312715_i64),
(205891132094649_i64, 1071_i64, 9_i64, 24501044719263231_i64),
(205891132094649_i64, 462_i64, 3_i64, 31707234342575946_i64),
(
205891132094649_i64,
2147483648_i64,
1_i64,
-2169261277526884352_i64,
),
(
205891132094649_i64,
1099511627782_i64,
1_i64,
-3855894324399123370_i64,
),
(
205891132094649_i64,
4611686018427387904_i64,
1_i64,
4611686018427387904_i64,
),
(
205891132094649_i64,
-4611686018427387904_i64,
1_i64,
4611686018427387904_i64,
),
(
205891132094649_i64,
205891132094649_i64,
205891132094649_i64,
205891132094649_i64,
),
(
205891132094649_i64,
1000000000000000000_i64,
1_i64,
-1463811497535471616_i64,
),
(205891132094649_i64, i64::MIN, 1_i64, i64::MIN),
(
205891132094649_i64,
9223372036854775807_i64,
1_i64,
9223166145722681159_i64,
),
(205891132094649_i64, 7_i64, 1_i64, 1441237924662543_i64),
(205891132094649_i64, 0_i64, 205891132094649_i64, 0_i64),
(
1000000000000000000_i64,
0_i64,
1000000000000000000_i64,
0_i64,
),
(
1000000000000000000_i64,
1_i64,
1_i64,
1000000000000000000_i64,
),
(
1000000000000000000_i64,
-1_i64,
1_i64,
1000000000000000000_i64,
),
(
1000000000000000000_i64,
2_i64,
2_i64,
1000000000000000000_i64,
),
(
1000000000000000000_i64,
-2_i64,
2_i64,
1000000000000000000_i64,
),
(
1000000000000000000_i64,
6_i64,
2_i64,
3000000000000000000_i64,
),
(
1000000000000000000_i64,
-6_i64,
2_i64,
3000000000000000000_i64,
),
(
1000000000000000000_i64,
12_i64,
4_i64,
3000000000000000000_i64,
),
(
1000000000000000000_i64,
18_i64,
2_i64,
9000000000000000000_i64,
),
(
1000000000000000000_i64,
-18_i64,
2_i64,
9000000000000000000_i64,
),
(
1000000000000000000_i64,
35_i64,
5_i64,
7000000000000000000_i64,
),
(
1000000000000000000_i64,
1071_i64,
1_i64,
1088843724846006272_i64,
),
(
1000000000000000000_i64,
462_i64,
2_i64,
-8807672958224171008_i64,
),
(
1000000000000000000_i64,
2147483648_i64,
262144_i64,
1645631272959082496_i64,
),
(
1000000000000000000_i64,
1099511627782_i64,
2_i64,
-2620492334958379008_i64,
),
(
1000000000000000000_i64,
4611686018427387904_i64,
262144_i64,
4611686018427387904_i64,
),
(
1000000000000000000_i64,
-4611686018427387904_i64,
262144_i64,
4611686018427387904_i64,
),
(
1000000000000000000_i64,
205891132094649_i64,
1_i64,
-1463811497535471616_i64,
),
(
1000000000000000000_i64,
1000000000000000000_i64,
1000000000000000000_i64,
1000000000000000000_i64,
),
(1000000000000000000_i64, i64::MIN, 262144_i64, i64::MIN),
(
1000000000000000000_i64,
9223372036854775807_i64,
1_i64,
-1000000000000000000_i64,
),
(
1000000000000000000_i64,
7_i64,
1_i64,
7000000000000000000_i64,
),
(
1000000000000000000_i64,
0_i64,
1000000000000000000_i64,
0_i64,
),
(i64::MIN, 0_i64, i64::MIN, 0_i64),
(i64::MIN, 1_i64, 1_i64, i64::MIN),
(i64::MIN, -1_i64, 1_i64, i64::MIN),
(i64::MIN, 2_i64, 2_i64, i64::MIN),
(i64::MIN, -2_i64, 2_i64, i64::MIN),
(i64::MIN, 6_i64, 2_i64, i64::MIN),
(i64::MIN, -6_i64, 2_i64, i64::MIN),
(i64::MIN, 12_i64, 4_i64, i64::MIN),
(i64::MIN, 18_i64, 2_i64, i64::MIN),
(i64::MIN, -18_i64, 2_i64, i64::MIN),
(i64::MIN, 35_i64, 1_i64, i64::MIN),
(i64::MIN, 1071_i64, 1_i64, i64::MIN),
(i64::MIN, 462_i64, 2_i64, i64::MIN),
(i64::MIN, 2147483648_i64, 2147483648_i64, i64::MIN),
(i64::MIN, 1099511627782_i64, 2_i64, i64::MIN),
(
i64::MIN,
4611686018427387904_i64,
4611686018427387904_i64,
i64::MIN,
),
(
i64::MIN,
-4611686018427387904_i64,
4611686018427387904_i64,
i64::MIN,
),
(i64::MIN, 205891132094649_i64, 1_i64, i64::MIN),
(i64::MIN, 1000000000000000000_i64, 262144_i64, i64::MIN),
(i64::MIN, i64::MIN, i64::MIN, i64::MIN),
(i64::MIN, 9223372036854775807_i64, 1_i64, i64::MIN),
(i64::MIN, 7_i64, 1_i64, i64::MIN),
(i64::MIN, 0_i64, i64::MIN, 0_i64),
(
9223372036854775807_i64,
0_i64,
9223372036854775807_i64,
0_i64,
),
(
9223372036854775807_i64,
1_i64,
1_i64,
9223372036854775807_i64,
),
(
9223372036854775807_i64,
-1_i64,
1_i64,
9223372036854775807_i64,
),
(9223372036854775807_i64, 2_i64, 1_i64, -2_i64),
(9223372036854775807_i64, -2_i64, 1_i64, -2_i64),
(9223372036854775807_i64, 6_i64, 1_i64, -6_i64),
(9223372036854775807_i64, -6_i64, 1_i64, -6_i64),
(9223372036854775807_i64, 12_i64, 1_i64, -12_i64),
(9223372036854775807_i64, 18_i64, 1_i64, -18_i64),
(9223372036854775807_i64, -18_i64, 1_i64, -18_i64),
(
9223372036854775807_i64,
35_i64,
7_i64,
9223372036854775803_i64,
),
(
9223372036854775807_i64,
1071_i64,
7_i64,
9223372036854775655_i64,
),
(9223372036854775807_i64, 462_i64, 7_i64, -66_i64),
(
9223372036854775807_i64,
2147483648_i64,
1_i64,
-2147483648_i64,
),
(
9223372036854775807_i64,
1099511627782_i64,
1_i64,
-1099511627782_i64,
),
(
9223372036854775807_i64,
4611686018427387904_i64,
1_i64,
-4611686018427387904_i64,
),
(
9223372036854775807_i64,
-4611686018427387904_i64,
1_i64,
-4611686018427387904_i64,
),
(
9223372036854775807_i64,
205891132094649_i64,
1_i64,
9223166145722681159_i64,
),
(
9223372036854775807_i64,
1000000000000000000_i64,
1_i64,
-1000000000000000000_i64,
),
(9223372036854775807_i64, i64::MIN, 1_i64, i64::MIN),
(
9223372036854775807_i64,
9223372036854775807_i64,
9223372036854775807_i64,
9223372036854775807_i64,
),
(
9223372036854775807_i64,
7_i64,
7_i64,
9223372036854775807_i64,
),
(
9223372036854775807_i64,
0_i64,
9223372036854775807_i64,
0_i64,
),
(7_i64, 0_i64, 7_i64, 0_i64),
(7_i64, 1_i64, 1_i64, 7_i64),
(7_i64, -1_i64, 1_i64, 7_i64),
(7_i64, 2_i64, 1_i64, 14_i64),
(7_i64, -2_i64, 1_i64, 14_i64),
(7_i64, 6_i64, 1_i64, 42_i64),
(7_i64, -6_i64, 1_i64, 42_i64),
(7_i64, 12_i64, 1_i64, 84_i64),
(7_i64, 18_i64, 1_i64, 126_i64),
(7_i64, -18_i64, 1_i64, 126_i64),
(7_i64, 35_i64, 7_i64, 35_i64),
(7_i64, 1071_i64, 7_i64, 1071_i64),
(7_i64, 462_i64, 7_i64, 462_i64),
(7_i64, 2147483648_i64, 1_i64, 15032385536_i64),
(7_i64, 1099511627782_i64, 1_i64, 7696581394474_i64),
(
7_i64,
4611686018427387904_i64,
1_i64,
-4611686018427387904_i64,
),
(
7_i64,
-4611686018427387904_i64,
1_i64,
-4611686018427387904_i64,
),
(7_i64, 205891132094649_i64, 1_i64, 1441237924662543_i64),
(
7_i64,
1000000000000000000_i64,
1_i64,
7000000000000000000_i64,
),
(7_i64, i64::MIN, 1_i64, i64::MIN),
(
7_i64,
9223372036854775807_i64,
7_i64,
9223372036854775807_i64,
),
(7_i64, 7_i64, 7_i64, 7_i64),
(7_i64, 0_i64, 7_i64, 0_i64),
(0_i64, 0_i64, 0_i64, 0_i64),
(0_i64, 1_i64, 1_i64, 0_i64),
(0_i64, -1_i64, 1_i64, 0_i64),
(0_i64, 2_i64, 2_i64, 0_i64),
(0_i64, -2_i64, 2_i64, 0_i64),
(0_i64, 6_i64, 6_i64, 0_i64),
(0_i64, -6_i64, 6_i64, 0_i64),
(0_i64, 12_i64, 12_i64, 0_i64),
(0_i64, 18_i64, 18_i64, 0_i64),
(0_i64, -18_i64, 18_i64, 0_i64),
(0_i64, 35_i64, 35_i64, 0_i64),
(0_i64, 1071_i64, 1071_i64, 0_i64),
(0_i64, 462_i64, 462_i64, 0_i64),
(0_i64, 2147483648_i64, 2147483648_i64, 0_i64),
(0_i64, 1099511627782_i64, 1099511627782_i64, 0_i64),
(
0_i64,
4611686018427387904_i64,
4611686018427387904_i64,
0_i64,
),
(
0_i64,
-4611686018427387904_i64,
4611686018427387904_i64,
0_i64,
),
(0_i64, 205891132094649_i64, 205891132094649_i64, 0_i64),
(
0_i64,
1000000000000000000_i64,
1000000000000000000_i64,
0_i64,
),
(0_i64, i64::MIN, i64::MIN, 0_i64),
(
0_i64,
9223372036854775807_i64,
9223372036854775807_i64,
0_i64,
),
(0_i64, 7_i64, 7_i64, 0_i64),
(0_i64, 0_i64, 0_i64, 0_i64),
];
for &(a, b, wg, wl) in CASES {
assert_eq!(gcd(a, b), wg, "gcd({a}, {b})");
assert_eq!(lcm(a, b), wl, "lcm({a}, {b})");
}
}
#[test]
fn unwrap_f64() {
let _report = Report;
{
let p: &[f64] = &[
0.0,
0.5235987755982988,
1.0471975511965976,
1.5707963267948966,
2.0943951023931953,
2.617993877991494,
3.141592653589793,
3.665191429188092,
4.1887902047863905,
4.71238898038469,
5.235987755982988,
5.759586531581287,
0.0,
0.5235987755982983,
1.0471975511965974,
1.5707963267948957,
2.094395102393195,
2.617993877991493,
3.141592653589793,
3.6651914291880914,
4.18879020478639,
4.71238898038469,
5.235987755982988,
5.759586531581286,
0.0,
];
let want: &[f64] = &[
0.0,
0.5235987755982988,
1.0471975511965976,
1.5707963267948966,
2.0943951023931953,
2.617993877991494,
3.141592653589793,
3.665191429188092,
4.1887902047863905,
4.71238898038469,
5.235987755982988,
5.759586531581287,
6.283185307179586,
6.8067840827778845,
7.330382858376184,
7.853981633974482,
8.377580409572781,
8.90117918517108,
9.42477796076938,
9.948376736367678,
10.471975511965976,
10.995574287564276,
11.519173063162574,
12.042771838760872,
12.566370614359172,
];
let got = unwrap(p, None, 6.283185307179586);
assert_eq!(got.len(), want.len(), "unwrap default");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap default", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[0.0, 0.78539816, 1.57079633, 5.49778714, 6.28318531];
let want: &[f64] = &[
0.0,
0.78539816,
1.57079633,
-0.7853981671795864,
2.8204141244714265e-09,
];
let got = unwrap(p, None, 6.283185307179586);
assert_eq!(got.len(), want.len(), "unwrap phase");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap phase", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[0.0, 1.0, 2.0, -1.0, 0.0];
let want: &[f64] = &[0.0, 1.0, 2.0, 3.0, 4.0];
let got = unwrap(p, None, 4.0);
assert_eq!(got.len(), want.len(), "unwrap period4");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap period4", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 1.0, 2.0, 3.0];
let want: &[f64] = &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0];
let got = unwrap(p, None, 6.0);
assert_eq!(got.len(), want.len(), "unwrap period6");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap period6", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[2.0, 3.0, 4.0, 5.0, 2.0, 3.0, 4.0, 5.0];
let want: &[f64] = &[2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0];
let got = unwrap(p, None, 4.0);
assert_eq!(got.len(), want.len(), "unwrap period4b");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap period4b", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[
-180.0, -140.0, -100.0, -60.0, -20.0, 20.0, 60.0, 100.0, 140.0, -180.0, -140.0, -100.0,
-60.0, -20.0, 20.0, 60.0, 100.0, 140.0, -180.0,
];
let want: &[f64] = &[
-180.0, -140.0, -100.0, -60.0, -20.0, 20.0, 60.0, 100.0, 140.0, 180.0, 220.0, 260.0,
300.0, 340.0, 380.0, 420.0, 460.0, 500.0, 540.0,
];
let got = unwrap(p, None, 360.0);
assert_eq!(got.len(), want.len(), "unwrap deg");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap deg", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[0.0, 3.0, 6.0, 0.5, 3.5];
let want: &[f64] = &[0.0, 3.0, 6.0, 6.783185307179586, 9.783185307179586];
let got = unwrap(p, Some(1.0), 6.283185307179586);
assert_eq!(got.len(), want.len(), "unwrap discont_small");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check(
"unwrap discont_small",
&format!("index {i}"),
g,
w,
1e-12,
0.0,
);
}
}
{
let p: &[f64] = &[0.0, 3.0, 6.0, 0.5, 3.5];
let want: &[f64] = &[0.0, 3.0, 6.0, 6.783185307179586, 9.783185307179586];
let got = unwrap(p, Some(5.0), 6.283185307179586);
assert_eq!(got.len(), want.len(), "unwrap discont_big");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check(
"unwrap discont_big",
&format!("index {i}"),
g,
w,
1e-12,
0.0,
);
}
}
{
let p: &[f64] = &[0.0, 1.0, f64::NAN, 7.0, 8.0];
let want: &[f64] = &[0.0, 1.0, f64::NAN, f64::NAN, f64::NAN];
let got = unwrap(p, None, 6.283185307179586);
assert_eq!(got.len(), want.len(), "unwrap nan_inside");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap nan_inside", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[0.0, f64::INFINITY, 1.0];
let want: &[f64] = &[0.0, f64::NAN, f64::NAN];
let got = unwrap(p, None, 6.283185307179586);
assert_eq!(got.len(), want.len(), "unwrap inf");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap inf", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[
0.0,
3.141592653589793,
6.283185307179586,
0.0,
-3.141592653589793,
];
let want: &[f64] = &[
0.0,
3.141592653589793,
6.283185307179586,
6.283185307179586,
3.141592653589793,
];
let got = unwrap(p, None, 6.283185307179586);
assert_eq!(got.len(), want.len(), "unwrap boundary");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap boundary", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[3.0];
let want: &[f64] = &[3.0];
let got = unwrap(p, None, 6.283185307179586);
assert_eq!(got.len(), want.len(), "unwrap single");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap single", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[];
let want: &[f64] = &[];
let got = unwrap(p, None, 6.283185307179586);
assert_eq!(got.len(), want.len(), "unwrap empty");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap empty", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
{
let p: &[f64] = &[-0.0, 0.0, -0.0];
let want: &[f64] = &[-0.0, 0.0, 0.0];
let got = unwrap(p, None, 6.283185307179586);
assert_eq!(got.len(), want.len(), "unwrap neg_zero");
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap neg_zero", &format!("index {i}"), g, w, 1e-12, 0.0);
}
}
}
#[test]
fn unwrap_f32() {
let _report = Report;
let p: &[f32] = &[0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0];
let want: &[f32] = &[0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0];
let got = unwrap(p, None, core::f32::consts::TAU);
for (i, (&g, &w)) in got.iter().zip(want).enumerate() {
check("unwrap f32", &format!("index {i}"), g, w, 1e-5, 1e-6);
}
}
#[test]
fn nan_to_num_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64, f64)] = &[
(f64::NAN, 0.0, -1.0, 2.0),
(
f64::INFINITY,
1.7976931348623157e+308,
5.0,
1.7976931348623157e+308,
),
(f64::NEG_INFINITY, -1.7976931348623157e+308, -5.0, -9.0),
(0.0, 0.0, 0.0, 0.0),
(-0.0, -0.0, -0.0, -0.0),
(1.0, 1.0, 1.0, 1.0),
(-1.0, -1.0, -1.0, -1.0),
(0.5, 0.5, 0.5, 0.5),
(-0.5, -0.5, -0.5, -0.5),
(1.5, 1.5, 1.5, 1.5),
(-1.5, -1.5, -1.5, -1.5),
(2.5, 2.5, 2.5, 2.5),
(-2.5, -2.5, -2.5, -2.5),
(3.0, 3.0, 3.0, 3.0),
(4.5, 4.5, 4.5, 4.5),
(-7.25, -7.25, -7.25, -7.25),
(8.0, 8.0, 8.0, 8.0),
(8.000001, 8.000001, 8.000001, 8.000001),
(100.0, 100.0, 100.0, 100.0),
(123456.789, 123456.789, 123456.789, 123456.789),
(1e+16, 1e+16, 1e+16, 1e+16),
(0.1, 0.1, 0.1, 0.1),
(-0.1, -0.1, -0.1, -0.1),
(1e-300, 1e-300, 1e-300, 1e-300),
(-1e-300, -1e-300, -1e-300, -1e-300),
(5e-324, 5e-324, 5e-324, 5e-324),
(-5e-324, -5e-324, -5e-324, -5e-324),
(
2.2250738585072014e-308,
2.2250738585072014e-308,
2.2250738585072014e-308,
2.2250738585072014e-308,
),
(1e+300, 1e+300, 1e+300, 1e+300),
(-1e+300, -1e+300, -1e+300, -1e+300),
(
1.7976931348623157e+308,
1.7976931348623157e+308,
1.7976931348623157e+308,
1.7976931348623157e+308,
),
(
-1.7976931348623157e+308,
-1.7976931348623157e+308,
-1.7976931348623157e+308,
-1.7976931348623157e+308,
),
];
for &(x, d, w2, w3) in CASES {
let s = format!("{x:?}");
check(
"nan_to_num default",
&s,
nan_to_num(x, 0.0, None, None),
d,
0.0,
0.0,
);
check(
"nan_to_num explicit",
&s,
nan_to_num(x, -1.0, Some(5.0), Some(-5.0)),
w2,
0.0,
0.0,
);
check(
"nan_to_num partial",
&s,
nan_to_num(x, 2.0, None, Some(-9.0)),
w3,
0.0,
0.0,
);
}
}
#[test]
fn nan_to_num_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32, f32)] = &[
(f32::NAN, 0.0, -1.0, 2.0),
(f32::INFINITY, 3.4028235e+38, 5.0, 3.4028235e+38),
(f32::NEG_INFINITY, -3.4028235e+38, -5.0, -9.0),
(0.0, 0.0, 0.0, 0.0),
(-0.0, -0.0, -0.0, -0.0),
(1.0, 1.0, 1.0, 1.0),
(-1.0, -1.0, -1.0, -1.0),
(0.5, 0.5, 0.5, 0.5),
(-0.5, -0.5, -0.5, -0.5),
(1.5, 1.5, 1.5, 1.5),
(-1.5, -1.5, -1.5, -1.5),
(2.5, 2.5, 2.5, 2.5),
(-2.5, -2.5, -2.5, -2.5),
(3.0, 3.0, 3.0, 3.0),
(4.5, 4.5, 4.5, 4.5),
(-7.25, -7.25, -7.25, -7.25),
(8.0, 8.0, 8.0, 8.0),
(100.0, 100.0, 100.0, 100.0),
(123456.79, 123456.79, 123456.79, 123456.79),
(1e+16, 1e+16, 1e+16, 1e+16),
(0.1, 0.1, 0.1, 0.1),
(-0.1, -0.1, -0.1, -0.1),
(1e-30, 1e-30, 1e-30, 1e-30),
(-1e-30, -1e-30, -1e-30, -1e-30),
(1e-45, 1e-45, 1e-45, 1e-45),
(-1e-45, -1e-45, -1e-45, -1e-45),
(1.1754944e-38, 1.1754944e-38, 1.1754944e-38, 1.1754944e-38),
(1e+30, 1e+30, 1e+30, 1e+30),
(-1e+30, -1e+30, -1e+30, -1e+30),
(3.4028235e+38, 3.4028235e+38, 3.4028235e+38, 3.4028235e+38),
(
-3.4028235e+38,
-3.4028235e+38,
-3.4028235e+38,
-3.4028235e+38,
),
(89.0, 89.0, 89.0, 89.0),
(88.0, 88.0, 88.0, 88.0),
];
for &(x, d, w2, w3) in CASES {
let s = format!("{x:?}");
check(
"nan_to_num default",
&s,
nan_to_num(x, 0.0, None, None),
d,
0.0,
0.0,
);
check(
"nan_to_num explicit",
&s,
nan_to_num(x, -1.0, Some(5.0), Some(-5.0)),
w2,
0.0,
0.0,
);
check(
"nan_to_num partial",
&s,
nan_to_num(x, 2.0, None, Some(-9.0)),
w3,
0.0,
0.0,
);
}
}
#[test]
fn ediff1d_cases() {
let _report = Report;
{
let a: &[i64] = &[1, 2, 4, 7, 11];
let end: &[i64] = &[];
let beg: &[i64] = &[];
let want: &[i64] = &[1, 2, 3, 4];
assert_eq!(ediff1d(a, end, beg), want, "ediff1d ints");
}
{
let a: &[i64] = &[1, 2, 4, 7, 11];
let end: &[i64] = &[99];
let beg: &[i64] = &[-5, -6];
let want: &[i64] = &[-5, -6, 1, 2, 3, 4, 99];
assert_eq!(ediff1d(a, end, beg), want, "ediff1d ints_end_begin");
}
{
let a: &[f64] = &[1.5, 1.0, 3.25, -2.0];
let end: &[f64] = &[];
let beg: &[f64] = &[];
let want: &[f64] = &[-0.5, 2.25, -5.25];
assert_eq!(ediff1d(a, end, beg), want, "ediff1d floats");
}
{
let a: &[f64] = &[1.5, 1.0, 3.25, -2.0];
let end: &[f64] = &[0.5, 0.25];
let beg: &[f64] = &[];
let want: &[f64] = &[-0.5, 2.25, -5.25, 0.5, 0.25];
assert_eq!(ediff1d(a, end, beg), want, "ediff1d floats_end");
}
{
let a: &[f64] = &[4.0];
let end: &[f64] = &[];
let beg: &[f64] = &[];
let want: &[f64] = &[];
assert_eq!(ediff1d(a, end, beg), want, "ediff1d single");
}
{
let a: &[f64] = &[];
let end: &[f64] = &[1.0];
let beg: &[f64] = &[2.0];
let want: &[f64] = &[2.0, 1.0];
assert_eq!(ediff1d(a, end, beg), want, "ediff1d empty");
}
}
#[test]
fn angle_f64() {
let _report = Report;
const CASES: &[(f64, f64, f64, f64)] = &[
(f64::NAN, f64::NAN, f64::NAN, f64::NAN),
(f64::NAN, f64::INFINITY, f64::NAN, f64::NAN),
(f64::NAN, f64::NEG_INFINITY, f64::NAN, f64::NAN),
(f64::NAN, 0.0, f64::NAN, f64::NAN),
(f64::NAN, -0.0, f64::NAN, f64::NAN),
(f64::NAN, 1.0, f64::NAN, f64::NAN),
(f64::NAN, -1.0, f64::NAN, f64::NAN),
(f64::NAN, 2.5, f64::NAN, f64::NAN),
(f64::NAN, -3.0, f64::NAN, f64::NAN),
(f64::NAN, 1e-300, f64::NAN, f64::NAN),
(f64::INFINITY, f64::NAN, f64::NAN, f64::NAN),
(f64::INFINITY, f64::INFINITY, 0.7853981633974483, 45.0),
(f64::INFINITY, f64::NEG_INFINITY, -0.7853981633974483, -45.0),
(f64::INFINITY, 0.0, 0.0, 0.0),
(f64::INFINITY, -0.0, -0.0, -0.0),
(f64::INFINITY, 1.0, 0.0, 0.0),
(f64::INFINITY, -1.0, -0.0, -0.0),
(f64::INFINITY, 2.5, 0.0, 0.0),
(f64::INFINITY, -3.0, -0.0, -0.0),
(f64::INFINITY, 1e-300, 0.0, 0.0),
(f64::NEG_INFINITY, f64::NAN, f64::NAN, f64::NAN),
(f64::NEG_INFINITY, f64::INFINITY, 2.356194490192345, 135.0),
(
f64::NEG_INFINITY,
f64::NEG_INFINITY,
-2.356194490192345,
-135.0,
),
(f64::NEG_INFINITY, 0.0, 3.141592653589793, 180.0),
(f64::NEG_INFINITY, -0.0, -3.141592653589793, -180.0),
(f64::NEG_INFINITY, 1.0, 3.141592653589793, 180.0),
(f64::NEG_INFINITY, -1.0, -3.141592653589793, -180.0),
(f64::NEG_INFINITY, 2.5, 3.141592653589793, 180.0),
(f64::NEG_INFINITY, -3.0, -3.141592653589793, -180.0),
(f64::NEG_INFINITY, 1e-300, 3.141592653589793, 180.0),
(0.0, f64::NAN, f64::NAN, f64::NAN),
(0.0, f64::INFINITY, 1.5707963267948966, 90.0),
(0.0, f64::NEG_INFINITY, -1.5707963267948966, -90.0),
(0.0, 0.0, 0.0, 0.0),
(0.0, -0.0, -0.0, -0.0),
(0.0, 1.0, 1.5707963267948966, 90.0),
(0.0, -1.0, -1.5707963267948966, -90.0),
(0.0, 2.5, 1.5707963267948966, 90.0),
(0.0, -3.0, -1.5707963267948966, -90.0),
(0.0, 1e-300, 1.5707963267948966, 90.0),
(-0.0, f64::NAN, f64::NAN, f64::NAN),
(-0.0, f64::INFINITY, 1.5707963267948966, 90.0),
(-0.0, f64::NEG_INFINITY, -1.5707963267948966, -90.0),
(-0.0, 0.0, 3.141592653589793, 180.0),
(-0.0, -0.0, -3.141592653589793, -180.0),
(-0.0, 1.0, 1.5707963267948966, 90.0),
(-0.0, -1.0, -1.5707963267948966, -90.0),
(-0.0, 2.5, 1.5707963267948966, 90.0),
(-0.0, -3.0, -1.5707963267948966, -90.0),
(-0.0, 1e-300, 1.5707963267948966, 90.0),
(1.0, f64::NAN, f64::NAN, f64::NAN),
(1.0, f64::INFINITY, 1.5707963267948966, 90.0),
(1.0, f64::NEG_INFINITY, -1.5707963267948966, -90.0),
(1.0, 0.0, 0.0, 0.0),
(1.0, -0.0, -0.0, -0.0),
(1.0, 1.0, 0.7853981633974483, 45.0),
(1.0, -1.0, -0.7853981633974483, -45.0),
(1.0, 2.5, 1.1902899496825317, 68.19859051364818),
(1.0, -3.0, -1.2490457723982544, -71.56505117707799),
(1.0, 1e-300, 1e-300, 5.729577951308232e-299),
(-1.0, f64::NAN, f64::NAN, f64::NAN),
(-1.0, f64::INFINITY, 1.5707963267948966, 90.0),
(-1.0, f64::NEG_INFINITY, -1.5707963267948966, -90.0),
(-1.0, 0.0, 3.141592653589793, 180.0),
(-1.0, -0.0, -3.141592653589793, -180.0),
(-1.0, 1.0, 2.356194490192345, 135.0),
(-1.0, -1.0, -2.356194490192345, -135.0),
(-1.0, 2.5, 1.9513027039072615, 111.80140948635182),
(-1.0, -3.0, -1.892546881191539, -108.43494882292202),
(-1.0, 1e-300, 3.141592653589793, 180.0),
(2.5, f64::NAN, f64::NAN, f64::NAN),
(2.5, f64::INFINITY, 1.5707963267948966, 90.0),
(2.5, f64::NEG_INFINITY, -1.5707963267948966, -90.0),
(2.5, 0.0, 0.0, 0.0),
(2.5, -0.0, -0.0, -0.0),
(2.5, 1.0, 0.3805063771123649, 21.80140948635181),
(2.5, -1.0, -0.3805063771123649, -21.80140948635181),
(2.5, 2.5, 0.7853981633974483, 45.0),
(2.5, -3.0, -0.8760580505981934, -50.19442890773481),
(2.5, 1e-300, 4e-301, 2.291831180523293e-299),
(-3.0, f64::NAN, f64::NAN, f64::NAN),
(-3.0, f64::INFINITY, 1.5707963267948966, 90.0),
(-3.0, f64::NEG_INFINITY, -1.5707963267948966, -90.0),
(-3.0, 0.0, 3.141592653589793, 180.0),
(-3.0, -0.0, -3.141592653589793, -180.0),
(-3.0, 1.0, 2.819842099193151, 161.565051177078),
(-3.0, -1.0, -2.819842099193151, -161.565051177078),
(-3.0, 2.5, 2.44685437739309, 140.19442890773482),
(-3.0, -3.0, -2.356194490192345, -135.0),
(-3.0, 1e-300, 3.141592653589793, 180.0),
(1e-300, f64::NAN, f64::NAN, f64::NAN),
(1e-300, f64::INFINITY, 1.5707963267948966, 90.0),
(1e-300, f64::NEG_INFINITY, -1.5707963267948966, -90.0),
(1e-300, 0.0, 0.0, 0.0),
(1e-300, -0.0, -0.0, -0.0),
(1e-300, 1.0, 1.5707963267948966, 90.0),
(1e-300, -1.0, -1.5707963267948966, -90.0),
(1e-300, 2.5, 1.5707963267948966, 90.0),
(1e-300, -3.0, -1.5707963267948966, -90.0),
(1e-300, 1e-300, 0.7853981633974483, 45.0),
];
for &(re, im, w, wd) in CASES {
let s = format!("{re:?}, {im:?}");
check("angle", &s, angle(re, im), w, 1e-6, 0.0);
check("angle_deg", &s, angle_deg(re, im), wd, 1e-6, 0.0);
}
}
#[test]
fn angle_f32() {
let _report = Report;
const CASES: &[(f32, f32, f32, f32)] = &[
(f32::NAN, f32::NAN, f32::NAN, f32::NAN),
(f32::NAN, f32::INFINITY, f32::NAN, f32::NAN),
(f32::NAN, f32::NEG_INFINITY, f32::NAN, f32::NAN),
(f32::NAN, 0.0, f32::NAN, f32::NAN),
(f32::NAN, -0.0, f32::NAN, f32::NAN),
(f32::NAN, 1.0, f32::NAN, f32::NAN),
(f32::NAN, -1.0, f32::NAN, f32::NAN),
(f32::NAN, 2.5, f32::NAN, f32::NAN),
(f32::NAN, -3.0, f32::NAN, f32::NAN),
(f32::NAN, 1e-30, f32::NAN, f32::NAN),
(f32::INFINITY, f32::NAN, f32::NAN, f32::NAN),
(f32::INFINITY, f32::INFINITY, 0.7853982, 45.0),
(f32::INFINITY, f32::NEG_INFINITY, -0.7853982, -45.0),
(f32::INFINITY, 0.0, 0.0, 0.0),
(f32::INFINITY, -0.0, -0.0, -0.0),
(f32::INFINITY, 1.0, 0.0, 0.0),
(f32::INFINITY, -1.0, -0.0, -0.0),
(f32::INFINITY, 2.5, 0.0, 0.0),
(f32::INFINITY, -3.0, -0.0, -0.0),
(f32::INFINITY, 1e-30, 0.0, 0.0),
(f32::NEG_INFINITY, f32::NAN, f32::NAN, f32::NAN),
(f32::NEG_INFINITY, f32::INFINITY, 2.3561945, 135.0),
(f32::NEG_INFINITY, f32::NEG_INFINITY, -2.3561945, -135.0),
(f32::NEG_INFINITY, 0.0, 3.1415927, 180.0),
(f32::NEG_INFINITY, -0.0, -3.1415927, -180.0),
(f32::NEG_INFINITY, 1.0, 3.1415927, 180.0),
(f32::NEG_INFINITY, -1.0, -3.1415927, -180.0),
(f32::NEG_INFINITY, 2.5, 3.1415927, 180.0),
(f32::NEG_INFINITY, -3.0, -3.1415927, -180.0),
(f32::NEG_INFINITY, 1e-30, 3.1415927, 180.0),
(0.0, f32::NAN, f32::NAN, f32::NAN),
(0.0, f32::INFINITY, 1.5707964, 90.0),
(0.0, f32::NEG_INFINITY, -1.5707964, -90.0),
(0.0, 0.0, 0.0, 0.0),
(0.0, -0.0, -0.0, -0.0),
(0.0, 1.0, 1.5707964, 90.0),
(0.0, -1.0, -1.5707964, -90.0),
(0.0, 2.5, 1.5707964, 90.0),
(0.0, -3.0, -1.5707964, -90.0),
(0.0, 1e-30, 1.5707964, 90.0),
(-0.0, f32::NAN, f32::NAN, f32::NAN),
(-0.0, f32::INFINITY, 1.5707964, 90.0),
(-0.0, f32::NEG_INFINITY, -1.5707964, -90.0),
(-0.0, 0.0, 3.1415927, 180.0),
(-0.0, -0.0, -3.1415927, -180.0),
(-0.0, 1.0, 1.5707964, 90.0),
(-0.0, -1.0, -1.5707964, -90.0),
(-0.0, 2.5, 1.5707964, 90.0),
(-0.0, -3.0, -1.5707964, -90.0),
(-0.0, 1e-30, 1.5707964, 90.0),
(1.0, f32::NAN, f32::NAN, f32::NAN),
(1.0, f32::INFINITY, 1.5707964, 90.0),
(1.0, f32::NEG_INFINITY, -1.5707964, -90.0),
(1.0, 0.0, 0.0, 0.0),
(1.0, -0.0, -0.0, -0.0),
(1.0, 1.0, 0.7853982, 45.0),
(1.0, -1.0, -0.7853982, -45.0),
(1.0, 2.5, 1.19029, 68.19859),
(1.0, -3.0, -1.2490457, -71.56505),
(1.0, 1e-30, 1e-30, 5.729578e-29),
(-1.0, f32::NAN, f32::NAN, f32::NAN),
(-1.0, f32::INFINITY, 1.5707964, 90.0),
(-1.0, f32::NEG_INFINITY, -1.5707964, -90.0),
(-1.0, 0.0, 3.1415927, 180.0),
(-1.0, -0.0, -3.1415927, -180.0),
(-1.0, 1.0, 2.3561945, 135.0),
(-1.0, -1.0, -2.3561945, -135.0),
(-1.0, 2.5, 1.9513026, 111.80141),
(-1.0, -3.0, -1.8925469, -108.43495),
(-1.0, 1e-30, 3.1415927, 180.0),
(2.5, f32::NAN, f32::NAN, f32::NAN),
(2.5, f32::INFINITY, 1.5707964, 90.0),
(2.5, f32::NEG_INFINITY, -1.5707964, -90.0),
(2.5, 0.0, 0.0, 0.0),
(2.5, -0.0, -0.0, -0.0),
(2.5, 1.0, 0.38050637, 21.801409),
(2.5, -1.0, -0.38050637, -21.801409),
(2.5, 2.5, 0.7853982, 45.0),
(2.5, -3.0, -0.87605804, -50.194427),
(2.5, 1e-30, 4e-31, 2.2918312e-29),
(-3.0, f32::NAN, f32::NAN, f32::NAN),
(-3.0, f32::INFINITY, 1.5707964, 90.0),
(-3.0, f32::NEG_INFINITY, -1.5707964, -90.0),
(-3.0, 0.0, 3.1415927, 180.0),
(-3.0, -0.0, -3.1415927, -180.0),
(-3.0, 1.0, 2.819842, 161.56505),
(-3.0, -1.0, -2.819842, -161.56505),
(-3.0, 2.5, 2.4468544, 140.19443),
(-3.0, -3.0, -2.3561945, -135.0),
(-3.0, 1e-30, 3.1415927, 180.0),
(1e-30, f32::NAN, f32::NAN, f32::NAN),
(1e-30, f32::INFINITY, 1.5707964, 90.0),
(1e-30, f32::NEG_INFINITY, -1.5707964, -90.0),
(1e-30, 0.0, 0.0, 0.0),
(1e-30, -0.0, -0.0, -0.0),
(1e-30, 1.0, 1.5707964, 90.0),
(1e-30, -1.0, -1.5707964, -90.0),
(1e-30, 2.5, 1.5707964, 90.0),
(1e-30, -3.0, -1.5707964, -90.0),
(1e-30, 1e-30, 0.7853982, 45.0),
];
for &(re, im, w, wd) in CASES {
let s = format!("{re:?}, {im:?}");
check("angle", &s, angle(re, im), w, 1e-6, 0.0);
check("angle_deg", &s, angle_deg(re, im), wd, 1e-6, 0.0);
}
}
#[test]
fn angle_real_input_uses_positive_zero_imag() {
let _report = Report;
const CASES: &[(f64, f64)] = &[
(0.0, 0.0),
(-0.0, 3.141592653589793),
(1.0, 0.0),
(-1.0, 3.141592653589793),
(f64::NAN, f64::NAN),
];
for &(x, want) in CASES {
check(
"angle(real)",
&format!("{x:?}"),
angle(x, 0.0),
want,
1e-15,
0.0,
);
}
}
#[test]
fn real_if_close_f64() {
let _report = Report;
let cases: Vec<(Vec<f64>, f64, bool)> = vec![
(vec![1e-14, 5e-15], 100.0, true),
(vec![1e-13, 0.0], 100.0, false),
(vec![1e-13, 0.0], 1000.0, true),
(vec![0.0, -0.0], 100.0, true),
(vec![], 100.0, true),
(vec![f64::NAN], 100.0, false),
(vec![1e-05], 0.0001, true),
(vec![1e-05], 1e-06, false),
(vec![2.2e-14], 100.0, true),
(vec![2.3e-14], 100.0, false),
(vec![1e-06], 100.0, false),
(vec![1e-06], 10000.0, false),
(vec![f64::INFINITY], 100.0, false),
(vec![2e-05], 1000000.0, false),
(vec![0.001], 1.0, true),
(vec![0.5], 2.0, false),
];
for (imag, tol, want) in cases {
assert_eq!(
real_if_close_ok(&imag, tol),
want,
"real_if_close({imag:?}, tol={tol:?})"
);
}
}
#[test]
fn real_if_close_f32() {
let _report = Report;
let cases: Vec<(Vec<f32>, f32, bool)> = vec![
(vec![1e-14, 5e-15], 100.0, true),
(vec![1e-13, 0.0], 100.0, true),
(vec![1e-13, 0.0], 1000.0, true),
(vec![0.0, -0.0], 100.0, true),
(vec![], 100.0, true),
(vec![f32::NAN], 100.0, false),
(vec![1e-05], 1e-04, true),
(vec![1e-05], 1e-06, false),
(vec![2.2e-14], 100.0, true),
(vec![2.3e-14], 100.0, true),
(vec![1e-06], 100.0, true),
(vec![1e-06], 10000.0, true),
(vec![f32::INFINITY], 100.0, false),
(vec![2e-05], 1e+06, true),
(vec![0.001], 1.0, true),
(vec![0.5], 2.0, false),
];
for (imag, tol, want) in cases {
assert_eq!(
real_if_close_ok(&imag, tol),
want,
"real_if_close({imag:?}, tol={tol:?})"
);
}
}