use crate::types::{U0F128, U1F127, U2F126, U3F125};
pub const TAU: U3F125 = U3F125::from_bits(0xC90F_DAA2_2168_C234_C4C6_628B_80DC_1CD1);
pub const FRAC_TAU_2: U2F126 = U2F126::from_bits(0xC90F_DAA2_2168_C234_C4C6_628B_80DC_1CD1);
pub const FRAC_TAU_3: U2F126 = U2F126::from_bits(0x860A_91C1_6B9B_2C23_2DD9_9707_AB3D_688B);
pub const FRAC_TAU_4: U1F127 = U1F127::from_bits(0xC90F_DAA2_2168_C234_C4C6_628B_80DC_1CD1);
pub const FRAC_TAU_6: U1F127 = U1F127::from_bits(0x860A_91C1_6B9B_2C23_2DD9_9707_AB3D_688B);
pub const FRAC_TAU_8: U0F128 = U0F128::from_bits(0xC90F_DAA2_2168_C234_C4C6_628B_80DC_1CD1);
pub const FRAC_TAU_12: U0F128 = U0F128::from_bits(0x860A_91C1_6B9B_2C23_2DD9_9707_AB3D_688B);
pub const FRAC_1_TAU: U0F128 = U0F128::from_bits(0x28BE_60DB_9391_054A_7F09_D5F4_7D4D_3770);
pub const FRAC_2_TAU: U0F128 = U0F128::from_bits(0x517C_C1B7_2722_0A94_FE13_ABE8_FA9A_6EE0);
pub const FRAC_4_TAU: U0F128 = U0F128::from_bits(0xA2F9_836E_4E44_1529_FC27_57D1_F534_DDC0);
pub const PI: U2F126 = U2F126::from_bits(0xC90F_DAA2_2168_C234_C4C6_628B_80DC_1CD1);
pub const FRAC_PI_2: U1F127 = U1F127::from_bits(0xC90F_DAA2_2168_C234_C4C6_628B_80DC_1CD1);
pub const FRAC_PI_3: U1F127 = U1F127::from_bits(0x860A_91C1_6B9B_2C23_2DD9_9707_AB3D_688B);
pub const FRAC_PI_4: U0F128 = U0F128::from_bits(0xC90F_DAA2_2168_C234_C4C6_628B_80DC_1CD1);
pub const FRAC_PI_6: U0F128 = U0F128::from_bits(0x860A_91C1_6B9B_2C23_2DD9_9707_AB3D_688B);
pub const FRAC_PI_8: U0F128 = U0F128::from_bits(0x6487_ED51_10B4_611A_6263_3145_C06E_0E68);
pub const FRAC_1_PI: U0F128 = U0F128::from_bits(0x517C_C1B7_2722_0A94_FE13_ABE8_FA9A_6EE0);
pub const FRAC_2_PI: U0F128 = U0F128::from_bits(0xA2F9_836E_4E44_1529_FC27_57D1_F534_DDC0);
pub const FRAC_2_SQRT_PI: U1F127 = U1F127::from_bits(0x906E_BA82_14DB_688D_71D4_8A7F_6BFE_C344);
pub const SQRT_2: U1F127 = U1F127::from_bits(0xB504_F333_F9DE_6484_597D_89B3_754A_BE9F);
pub const FRAC_1_SQRT_2: U0F128 = U0F128::from_bits(0xB504_F333_F9DE_6484_597D_89B3_754A_BE9F);
pub const E: U2F126 = U2F126::from_bits(0xADF8_5458_A2BB_4A9A_AFDC_5620_273D_3CF1);
pub const LOG2_10: U2F126 = U2F126::from_bits(0xD49A_784B_CD1B_8AFE_492B_F6FF_4DAF_DB4C);
pub const LOG2_E: U1F127 = U1F127::from_bits(0xB8AA_3B29_5C17_F0BB_BE87_FED0_691D_3E88);
pub const LOG10_2: U0F128 = U0F128::from_bits(0x4D10_4D42_7DE7_FBCC_47C4_ACD6_05BE_48BC);
pub const LOG10_E: U0F128 = U0F128::from_bits(0x6F2D_EC54_9B94_38CA_9AAD_D557_D699_EE19);
pub const LN_2: U0F128 = U0F128::from_bits(0xB172_17F7_D1CF_79AB_C9E3_B398_03F2_F6AF);
pub const LN_10: U2F126 = U2F126::from_bits(0x935D_8DDD_AAA8_AC16_EA56_D62B_82D3_0A28);
#[cfg(test)]
#[allow(clippy::cognitive_complexity, clippy::float_cmp)]
mod tests {
use crate::{consts::*, traits::FromFixed};
use core::{f32, f64};
#[cfg(feature = "f16")]
#[test]
fn cmp_f16() {
use half::{self, f16};
assert_eq!(f16::from_fixed(TAU), f16::from_f32(f32::consts::PI * 2.0));
assert_eq!(f16::from_fixed(FRAC_TAU_2), f16::PI);
assert_eq!(
f16::from_fixed(FRAC_TAU_3),
f16::from_f32(f32::consts::FRAC_PI_3 * 2.0)
);
assert_eq!(f16::from_fixed(FRAC_TAU_4), f16::FRAC_PI_2);
assert_eq!(f16::from_fixed(FRAC_TAU_6), f16::FRAC_PI_3);
assert_eq!(f16::from_fixed(FRAC_TAU_8), f16::FRAC_PI_4);
assert_eq!(f16::from_fixed(FRAC_TAU_12), f16::FRAC_PI_6);
assert_eq!(
f16::from_fixed(FRAC_1_TAU),
f16::from_f32(f32::consts::FRAC_1_PI * 0.5)
);
assert_eq!(f16::from_fixed(FRAC_2_TAU), f16::FRAC_1_PI);
assert_eq!(f16::from_fixed(FRAC_4_TAU), f16::FRAC_2_PI);
assert_eq!(f16::from_fixed(PI), f16::PI);
assert_eq!(f16::from_fixed(FRAC_PI_2), f16::FRAC_PI_2);
assert_eq!(f16::from_fixed(FRAC_PI_3), f16::FRAC_PI_3);
assert_eq!(f16::from_fixed(FRAC_PI_4), f16::FRAC_PI_4);
assert_eq!(f16::from_fixed(FRAC_PI_6), f16::FRAC_PI_6);
assert_eq!(f16::from_fixed(FRAC_PI_8), f16::FRAC_PI_8);
assert_eq!(f16::from_fixed(FRAC_1_PI), f16::FRAC_1_PI);
assert_eq!(f16::from_fixed(FRAC_2_PI), f16::FRAC_2_PI);
assert_eq!(f16::from_fixed(FRAC_2_SQRT_PI), f16::FRAC_2_SQRT_PI);
assert_eq!(f16::from_fixed(SQRT_2), f16::SQRT_2);
assert_eq!(f16::from_fixed(FRAC_1_SQRT_2), f16::FRAC_1_SQRT_2);
assert_eq!(f16::from_fixed(E), f16::E);
assert_eq!(f16::from_fixed(LOG2_E), f16::LOG2_E);
assert_eq!(f16::from_fixed(LOG10_E), f16::LOG10_E);
assert_eq!(f16::from_fixed(LN_2), f16::LN_2);
assert_eq!(f16::from_fixed(LN_10), f16::LN_10);
}
#[cfg(feature = "f16")]
#[test]
fn cmp_bf16() {
use half::{self, bf16};
assert_eq!(bf16::from_fixed(TAU), bf16::from_f32(f32::consts::PI * 2.0));
assert_eq!(bf16::from_fixed(FRAC_TAU_2), bf16::PI);
assert_eq!(
bf16::from_fixed(FRAC_TAU_3),
bf16::from_f32(f32::consts::FRAC_PI_3 * 2.0)
);
assert_eq!(bf16::from_fixed(FRAC_TAU_4), bf16::FRAC_PI_2);
assert_eq!(bf16::from_fixed(FRAC_TAU_6), bf16::FRAC_PI_3);
assert_eq!(bf16::from_fixed(FRAC_TAU_8), bf16::FRAC_PI_4);
assert_eq!(bf16::from_fixed(FRAC_TAU_12), bf16::FRAC_PI_6);
assert_eq!(
bf16::from_fixed(FRAC_1_TAU),
bf16::from_f32(f32::consts::FRAC_1_PI * 0.5)
);
assert_eq!(bf16::from_fixed(FRAC_2_TAU), bf16::FRAC_1_PI);
assert_eq!(bf16::from_fixed(FRAC_4_TAU), bf16::FRAC_2_PI);
assert_eq!(bf16::from_fixed(PI), bf16::PI);
assert_eq!(bf16::from_fixed(FRAC_PI_2), bf16::FRAC_PI_2);
assert_eq!(bf16::from_fixed(FRAC_PI_3), bf16::FRAC_PI_3);
assert_eq!(bf16::from_fixed(FRAC_PI_4), bf16::FRAC_PI_4);
assert_eq!(bf16::from_fixed(FRAC_PI_6), bf16::FRAC_PI_6);
assert_eq!(bf16::from_fixed(FRAC_PI_8), bf16::FRAC_PI_8);
assert_eq!(bf16::from_fixed(FRAC_1_PI), bf16::FRAC_1_PI);
assert_eq!(bf16::from_fixed(FRAC_2_PI), bf16::FRAC_2_PI);
assert_eq!(bf16::from_fixed(FRAC_2_SQRT_PI), bf16::FRAC_2_SQRT_PI);
assert_eq!(bf16::from_fixed(SQRT_2), bf16::SQRT_2);
assert_eq!(bf16::from_fixed(FRAC_1_SQRT_2), bf16::FRAC_1_SQRT_2);
assert_eq!(bf16::from_fixed(E), bf16::E);
assert_eq!(bf16::from_fixed(LOG2_E), bf16::LOG2_E);
assert_eq!(bf16::from_fixed(LOG10_E), bf16::LOG10_E);
assert_eq!(bf16::from_fixed(LN_2), bf16::LN_2);
assert_eq!(bf16::from_fixed(LN_10), bf16::LN_10);
}
#[test]
fn cmp_f32() {
assert_eq!(f32::from_fixed(TAU), f32::consts::PI * 2.0);
assert_eq!(f32::from_fixed(FRAC_TAU_2), f32::consts::PI);
assert_eq!(f32::from_fixed(FRAC_TAU_3), f32::consts::FRAC_PI_3 * 2.0);
assert_eq!(f32::from_fixed(FRAC_TAU_4), f32::consts::FRAC_PI_2);
assert_eq!(f32::from_fixed(FRAC_TAU_6), f32::consts::FRAC_PI_3);
assert_eq!(f32::from_fixed(FRAC_TAU_8), f32::consts::FRAC_PI_4);
assert_eq!(f32::from_fixed(FRAC_TAU_12), f32::consts::FRAC_PI_6);
assert_eq!(f32::from_fixed(FRAC_1_TAU), f32::consts::FRAC_1_PI * 0.5);
assert_eq!(f32::from_fixed(FRAC_2_TAU), f32::consts::FRAC_1_PI);
assert_eq!(f32::from_fixed(FRAC_4_TAU), f32::consts::FRAC_2_PI);
assert_eq!(f32::from_fixed(PI), f32::consts::PI);
assert_eq!(f32::from_fixed(FRAC_PI_2), f32::consts::FRAC_PI_2);
assert_eq!(f32::from_fixed(FRAC_PI_3), f32::consts::FRAC_PI_3);
assert_eq!(f32::from_fixed(FRAC_PI_4), f32::consts::FRAC_PI_4);
assert_eq!(f32::from_fixed(FRAC_PI_6), f32::consts::FRAC_PI_6);
assert_eq!(f32::from_fixed(FRAC_PI_8), f32::consts::FRAC_PI_8);
assert_eq!(f32::from_fixed(FRAC_1_PI), f32::consts::FRAC_1_PI);
assert_eq!(f32::from_fixed(FRAC_2_PI), f32::consts::FRAC_2_PI);
assert_eq!(f32::from_fixed(FRAC_2_SQRT_PI), f32::consts::FRAC_2_SQRT_PI);
assert_eq!(f32::from_fixed(SQRT_2), f32::consts::SQRT_2);
assert_eq!(f32::from_fixed(FRAC_1_SQRT_2), f32::consts::FRAC_1_SQRT_2);
assert_eq!(f32::from_fixed(E), f32::consts::E);
assert_eq!(f32::from_fixed(LOG2_E), f32::consts::LOG2_E);
assert_eq!(f32::from_fixed(LOG10_E), f32::consts::LOG10_E);
assert_eq!(f32::from_fixed(LN_2), f32::consts::LN_2);
assert_eq!(f32::from_fixed(LN_10), f32::consts::LN_10);
}
#[test]
fn cmp_f64() {
assert_eq!(f64::from_fixed(TAU), f64::consts::PI * 2.0);
assert_eq!(f64::from_fixed(FRAC_TAU_2), f64::consts::PI);
assert_eq!(f64::from_fixed(FRAC_TAU_3), f64::consts::FRAC_PI_3 * 2.0);
assert_eq!(f64::from_fixed(FRAC_TAU_4), f64::consts::FRAC_PI_2);
assert_eq!(f64::from_fixed(FRAC_TAU_6), f64::consts::FRAC_PI_3);
assert_eq!(f64::from_fixed(FRAC_TAU_8), f64::consts::FRAC_PI_4);
assert_eq!(f64::from_fixed(FRAC_TAU_12), f64::consts::FRAC_PI_6);
assert_eq!(f64::from_fixed(FRAC_1_TAU), f64::consts::FRAC_1_PI * 0.5);
assert_eq!(f64::from_fixed(FRAC_2_TAU), f64::consts::FRAC_1_PI);
assert_eq!(f64::from_fixed(FRAC_4_TAU), f64::consts::FRAC_2_PI);
assert_eq!(f64::from_fixed(PI), f64::consts::PI);
assert_eq!(f64::from_fixed(FRAC_PI_2), f64::consts::FRAC_PI_2);
assert_eq!(f64::from_fixed(FRAC_PI_3), f64::consts::FRAC_PI_3);
assert_eq!(f64::from_fixed(FRAC_PI_4), f64::consts::FRAC_PI_4);
assert_eq!(f64::from_fixed(FRAC_PI_6), f64::consts::FRAC_PI_6);
assert_eq!(f64::from_fixed(FRAC_PI_8), f64::consts::FRAC_PI_8);
assert_eq!(f64::from_fixed(FRAC_1_PI), f64::consts::FRAC_1_PI);
assert_eq!(f64::from_fixed(FRAC_2_PI), f64::consts::FRAC_2_PI);
assert_eq!(f64::from_fixed(FRAC_2_SQRT_PI), f64::consts::FRAC_2_SQRT_PI);
assert_eq!(f64::from_fixed(SQRT_2), f64::consts::SQRT_2);
assert_eq!(f64::from_fixed(FRAC_1_SQRT_2), f64::consts::FRAC_1_SQRT_2);
assert_eq!(f64::from_fixed(E), f64::consts::E);
assert_eq!(f64::from_fixed(LOG2_E), f64::consts::LOG2_E);
assert_eq!(f64::from_fixed(LOG10_E), f64::consts::LOG10_E);
assert_eq!(f64::from_fixed(LN_2), f64::consts::LN_2);
assert_eq!(f64::from_fixed(LN_10), f64::consts::LN_10);
}
}