Skip to content

Commit faff175

Browse files
committed
some some int-to-float and float-to-float cast tests from wasm test suite
1 parent 5db01f7 commit faff175

File tree

1 file changed

+56
-14
lines changed

1 file changed

+56
-14
lines changed

tests/run-pass/float.rs

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ fn casts() {
7676
// f32 -> u32
7777
assert_eq::<u32>(0.0f32 as u32, 0);
7878
assert_eq::<u32>(-0.0f32 as u32, 0);
79-
assert_eq::<u32>(/*0x1p-149*/ f32::from_bits(0x00000001) as u32, 0);
79+
assert_eq::<u32>(/*0x1p-149*/ f32::from_bits(0x1) as u32, 0);
8080
assert_eq::<u32>(/*-0x1p-149*/ f32::from_bits(0x80000001) as u32, 0);
8181
assert_eq::<u32>(/*0x1.19999ap+0*/ f32::from_bits(0x3f8ccccd) as u32, 1);
8282
assert_eq::<u32>(1.9f32 as u32, 1);
@@ -161,21 +161,63 @@ fn casts() {
161161
assert_eq::<u64>((-f64::NAN) as u64, 0);
162162

163163
// int -> f32
164-
assert_eq(127i8 as f32, 127.0f32);
165-
assert_eq(i128::MIN as f32, -170141183460469231731687303715884105728.0f32);
166-
assert_eq(u128::MAX as f32, f32::INFINITY); // saturation
164+
assert_eq::<f32>(127i8 as f32, 127.0);
165+
assert_eq::<f32>(2147483647i32 as f32, 2147483648.0);
166+
assert_eq::<f32>((-2147483648i32) as f32, -2147483648.0);
167+
assert_eq::<f32>(1234567890i32 as f32, /*0x1.26580cp+30*/ f32::from_bits(0x4e932c06));
168+
assert_eq::<f32>(16777217i32 as f32, 16777216.0);
169+
assert_eq::<f32>((-16777217i32) as f32, -16777216.0);
170+
assert_eq::<f32>(16777219i32 as f32, 16777220.0);
171+
assert_eq::<f32>((-16777219i32) as f32, -16777220.0);
172+
assert_eq::<f32>(0x7fffff4000000001i64 as f32, /*0x1.fffffep+62*/ f32::from_bits(0x5effffff));
173+
assert_eq::<f32>(0x8000004000000001u64 as i64 as f32, /*-0x1.fffffep+62*/ f32::from_bits(0xdeffffff));
174+
assert_eq::<f32>(0x0020000020000001i64 as f32, /*0x1.000002p+53*/ f32::from_bits(0x5a000001));
175+
assert_eq::<f32>(0xffdfffffdfffffffu64 as i64 as f32, /*-0x1.000002p+53*/ f32::from_bits(0xda000001));
176+
assert_eq::<f32>(i128::MIN as f32, -170141183460469231731687303715884105728.0f32);
177+
assert_eq::<f32>(u128::MAX as f32, f32::INFINITY); // saturation
167178

168179
// int -> f64
169-
assert_eq(i16::MIN as f64, -32768.0f64);
170-
assert_eq(u128::MAX as f64, 340282366920938463463374607431768211455.0f64); // even that fits...
171-
172-
// f32 <-> f64
173-
assert_eq(5.0f64 as f32, 5.0f32);
174-
assert_eq(5.0f32 as f64, 5.0f64);
175-
assert_eq(f64::MAX as f32, f32::INFINITY);
176-
assert_eq(f64::MIN as f32, f32::NEG_INFINITY);
177-
assert_eq(f32::INFINITY as f64, f64::INFINITY);
178-
assert_eq(f32::NEG_INFINITY as f64, f64::NEG_INFINITY);
180+
assert_eq::<f64>(127i8 as f64, 127.0);
181+
assert_eq::<f64>(i16::MIN as f64, -32768.0f64);
182+
assert_eq::<f64>(2147483647i32 as f64, 2147483647.0);
183+
assert_eq::<f64>(-2147483648i32 as f64, -2147483648.0);
184+
assert_eq::<f64>(987654321i32 as f64, 987654321.0);
185+
assert_eq::<f64>(9223372036854775807i64 as f64, 9223372036854775807.0);
186+
assert_eq::<f64>(-9223372036854775808i64 as f64, -9223372036854775808.0);
187+
assert_eq::<f64>(4669201609102990i64 as f64, 4669201609102990.0); // Feigenbaum (?)
188+
assert_eq::<f64>(9007199254740993i64 as f64, 9007199254740992.0);
189+
assert_eq::<f64>(-9007199254740993i64 as f64, -9007199254740992.0);
190+
assert_eq::<f64>(9007199254740995i64 as f64, 9007199254740996.0);
191+
assert_eq::<f64>(-9007199254740995i64 as f64, -9007199254740996.0);
192+
assert_eq::<f64>(u128::MAX as f64, 340282366920938463463374607431768211455.0f64); // even that fits...
193+
194+
// f32 -> f64
195+
assert_eq::<u64>((0.0f32 as f64).to_bits(), 0.0f64.to_bits());
196+
assert_eq::<u64>(((-0.0f32) as f64).to_bits(), (-0.0f64).to_bits());
197+
assert_eq::<f64>(5.0f32 as f64, 5.0f64);
198+
assert_eq::<f64>(/*0x1p-149*/ f32::from_bits(0x1) as f64, /*0x1p-149*/ f64::from_bits(0x36a0000000000000));
199+
assert_eq::<f64>(/*-0x1p-149*/ f32::from_bits(0x80000001) as f64, /*-0x1p-149*/ f64::from_bits(0xb6a0000000000000));
200+
assert_eq::<f64>(/*0x1.fffffep+127*/ f32::from_bits(0x7f7fffff) as f64, /*0x1.fffffep+127*/ f64::from_bits(0x47efffffe0000000));
201+
assert_eq::<f64>(/*-0x1.fffffep+127*/ (-f32::from_bits(0x7f7fffff)) as f64, /*-0x1.fffffep+127*/ -f64::from_bits(0x47efffffe0000000));
202+
assert_eq::<f64>(/*0x1p-119*/ f32::from_bits(0x4000000) as f64, /*0x1p-119*/ f64::from_bits(0x3880000000000000));
203+
assert_eq::<f64>(/*0x1.8f867ep+125*/ f32::from_bits(0x7e47c33f) as f64, 6.6382536710104395e+37);
204+
assert_eq::<f64>(f32::INFINITY as f64, f64::INFINITY);
205+
assert_eq::<f64>(f32::NEG_INFINITY as f64, f64::NEG_INFINITY);
206+
207+
// f64 -> f32
208+
assert_eq::<u32>((0.0f64 as f32).to_bits(), 0.0f32.to_bits());
209+
assert_eq::<u32>(((-0.0f64) as f32).to_bits(), (-0.0f32).to_bits());
210+
assert_eq::<f32>(5.0f64 as f32, 5.0f32);
211+
assert_eq::<f32>(/*0x0.0000000000001p-1022*/ f64::from_bits(0x1) as f32, 0.0);
212+
assert_eq::<f32>(/*-0x0.0000000000001p-1022*/ (-f64::from_bits(0x1)) as f32, -0.0);
213+
214+
assert_eq::<f32>(/*0x1.fffffe0000000p-127*/ f64::from_bits(0x380fffffe0000000) as f32, /*0x1p-149*/ f32::from_bits(0x800000));
215+
assert_eq::<f32>(/*0x1.4eae4f7024c7p+108*/ f64::from_bits(0x46b4eae4f7024c70) as f32, /*0x1.4eae5p+108*/ f32::from_bits(0x75a75728));
216+
217+
assert_eq::<f32>(f64::MAX as f32, f32::INFINITY);
218+
assert_eq::<f32>(f64::MIN as f32, f32::NEG_INFINITY);
219+
assert_eq::<f32>(f64::INFINITY as f32, f32::INFINITY);
220+
assert_eq::<f32>(f64::NEG_INFINITY as f32, f32::NEG_INFINITY);
179221
}
180222

181223
fn ops() {

0 commit comments

Comments
 (0)