-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathFloatTest.v3
71 lines (64 loc) · 2.41 KB
/
FloatTest.v3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Copyright 2019 Ben L. Titzer. All rights reserved.
// See LICENSE for details of Apache 2.0 license.
def T = UnitTests.register;
def X_ = void(
T("float:f32", test_f32),
T("float:f64", test_f64),
()
);
def assert_f32(t: Tester, sign: int, exp: int, mantissa: u32, expected: u32) {
var got = Floats.f32_bits(sign, exp, mantissa);
if (got != expected) t.fail2("expected f32:0x%x, got f32:0x%x", expected, got);
}
def assert_f64(t: Tester, sign: int, exp: int, mantissa: u64, expected: u64) {
var got = Floats.f64_bits(sign, exp, mantissa);
if (got != expected) t.fail2("expected f64:0x%x, got f64:0x%x", expected, got);
}
def test_f32(t: Tester) {
def T = assert_f32(t, _, _, _, _);
T(0, 0, 0, 0x3F800000);
T(1, 0, 0, 0xBF800000);
T(0, 5, 0, 0x42000000);
T(1, 5, 0, 0xC2000000);
T(0, 15, 0xAAAAAAAA, 0x47555555);
T(0, 16, 0xAAAAAAAA, 0x47D55555);
T(0, 16, 0xCCCCCCCC, 0x47E66666);
T(0, 100, 0x01234567, 0x718091A2);
T(0, 100, 0x70123456, 0x71B8091A);
T(0, 127, 0x11111111, 0x7F088888);
T(0, 128, 0x11111111, 0x7F800000);
T(0, 129, 0x11111111, 0x7f800000);
T(0, 1000, 0x22222222, 0x7f800000);
T(1, 129, 0x13371337, 0xff800000);
T(1, 1000, 0x44224466, 0xff800000);
}
def test_f64(t: Tester) {
def T = assert_f64(t, _, _, _, _);
T(0, 0, 0, 0x3FF0000000000000);
T(1, 0, 0, 0xBFF0000000000000);
T(0, 5, 0, 0x4040000000000000);
T(1, 5, 0, 0xC040000000000000);
T(0, 25, 0xAAAAAAAA, 0x41800000000AAAAA);
T(0, 25, 0xAAAAAAAABBBBBBBB, 0x418AAAAAAAABBBBB);
T(0, 26, 0xAAAAAAAA, 0x41900000000AAAAA);
T(0, 26, 0xAAAAAAAABBBBBBBB, 0x419AAAAAAAABBBBB);
T(1, 226, 0xCCCCCCCC, 0xCE100000000CCCCC);
T(0, 1000, 0x44224466, 0x7E70000000044224);
T(0, 1010, 0xa44224466, 0x7F10000000A44224);
T(0, 1020, 0xba44224466, 0x7FB000000BA44224);
T(0, 1021, 0xcba44224466, 0x7FC00000CBA44224);
T(0, 1022, 0xdcba44224466, 0x7FD0000DCBA44224);
T(0, 1023, 0xef0aa44224466, 0x7FE000EF0AA44224);
T(0, 1024, 0x44224466, 0x7FF0000000000000);
T(0, 1025, 0x44224466, 0x7FF0000000000000);
T(0, 9000, 0x88888888, 0x7FF0000000000000);
T(1, 1000, 0x44224466, 0xFE70000000044224);
T(1, 1010, 0xa44224466, 0xFF10000000A44224);
T(1, 1020, 0xba44224466, 0xFFB000000BA44224);
T(1, 1021, 0xcba44224466, 0xFFC00000CBA44224);
T(1, 1022, 0xdcba44224466, 0xFFD0000DCBA44224);
T(1, 1023, 0xef0aa44224466, 0xFFE000EF0AA44224);
T(1, 1024, 0x44224466, 0xFFF0000000000000);
T(1, 1025, 0x44224466, 0xFFF0000000000000);
T(1, 9000, 0x88888888, 0xFFF0000000000000);
}