2 prim::{PrimFloat, PrimUInt},
3 traits::{Context, Float, Make},
8 VecF: Float<PrimFloat = PrimF> + Make<Context = Ctx>,
9 PrimF: PrimFloat<BitsType = PrimU>,
15 VecF::from_bits(x.to_bits() & ctx.make(!PrimF::SIGN_FIELD_MASK))
20 VecF: Float<PrimFloat = PrimF> + Make<Context = Ctx>,
21 PrimF: PrimFloat<BitsType = PrimU>,
28 let mag_bits = mag.to_bits() & ctx.make(!PrimF::SIGN_FIELD_MASK);
29 let sign_bit = sign.to_bits() & ctx.make(PrimF::SIGN_FIELD_MASK);
30 VecF::from_bits(mag_bits | sign_bit)
38 scalar::{Scalar, Value},
44 should_panic(expected = "f16 feature is not enabled")
47 for bits in 0..=u16::MAX {
48 let v = F16::from_bits(bits);
49 let expected = v.abs();
50 let result = abs(Scalar, Value(v)).0;
51 assert_eq!(expected.to_bits(), result.to_bits());
57 for bits in (0..=u32::MAX).step_by(10001) {
58 let v = f32::from_bits(bits);
59 let expected = v.abs();
60 let result = abs(Scalar, Value(v)).0;
61 assert_eq!(expected.to_bits(), result.to_bits());
67 for bits in (0..=u64::MAX).step_by(100_000_000_000_001) {
68 let v = f64::from_bits(bits);
69 let expected = v.abs();
70 let result = abs(Scalar, Value(v)).0;
71 assert_eq!(expected.to_bits(), result.to_bits());
78 should_panic(expected = "f16 feature is not enabled")
80 fn test_copy_sign_f16() {
82 fn check(mag_bits: u16, sign_bits: u16) {
83 let mag = F16::from_bits(mag_bits);
84 let sign = F16::from_bits(sign_bits);
85 let expected = mag.copysign(sign);
86 let result = copy_sign(Scalar, Value(mag), Value(sign)).0;
87 assert_eq!(expected.to_bits(), result.to_bits());
89 for mag_low_bits in 0..16 {
90 for mag_high_bits in 0..16 {
91 for sign_low_bits in 0..16 {
92 for sign_high_bits in 0..16 {
94 mag_low_bits | (mag_high_bits << (16 - 4)),
95 sign_low_bits | (sign_high_bits << (16 - 4)),
104 fn test_copy_sign_f32() {
106 fn check(mag_bits: u32, sign_bits: u32) {
107 let mag = f32::from_bits(mag_bits);
108 let sign = f32::from_bits(sign_bits);
109 let expected = mag.copysign(sign);
110 let result = copy_sign(Scalar, Value(mag), Value(sign)).0;
111 assert_eq!(expected.to_bits(), result.to_bits());
113 for mag_low_bits in 0..16 {
114 for mag_high_bits in 0..16 {
115 for sign_low_bits in 0..16 {
116 for sign_high_bits in 0..16 {
118 mag_low_bits | (mag_high_bits << (32 - 4)),
119 sign_low_bits | (sign_high_bits << (32 - 4)),
128 fn test_copy_sign_f64() {
130 fn check(mag_bits: u64, sign_bits: u64) {
131 let mag = f64::from_bits(mag_bits);
132 let sign = f64::from_bits(sign_bits);
133 let expected = mag.copysign(sign);
134 let result = copy_sign(Scalar, Value(mag), Value(sign)).0;
135 assert_eq!(expected.to_bits(), result.to_bits());
137 for mag_low_bits in 0..16 {
138 for mag_high_bits in 0..16 {
139 for sign_low_bits in 0..16 {
140 for sign_high_bits in 0..16 {
142 mag_low_bits | (mag_high_bits << (64 - 4)),
143 sign_low_bits | (sign_high_bits << (64 - 4)),