|
8 | 8 | @testset "FP8" begin |
9 | 9 |
|
10 | 10 | @testset "E4M3" begin |
11 | | - E4M3 = Microfloat(1, 4, 3, MX) |
| 11 | + @test Microfloats.bias(MX_E4M3) == 7 |
12 | 12 |
|
13 | | - @test Microfloats.bias(E4M3) == 7 |
14 | | - |
15 | | - @test isfinite(reinterpret(E4M3, 0b0_1111_000)) |
16 | | - @test isfinite(reinterpret(E4M3, 0b1_1111_000)) |
| 13 | + @test isfinite(reinterpret(MX_E4M3, 0b0_1111_000)) |
| 14 | + @test isfinite(reinterpret(MX_E4M3, 0b1_1111_000)) |
17 | 15 |
|
18 | 16 | for i in 0b001:0b110 |
19 | | - @test isfinite(reinterpret(E4M3, 0b0_1111_000 | i)) |
20 | | - @test isfinite(reinterpret(E4M3, 0b1_1111_000 | i)) |
| 17 | + @test isfinite(reinterpret(MX_E4M3, 0b0_1111_000 | i)) |
| 18 | + @test isfinite(reinterpret(MX_E4M3, 0b1_1111_000 | i)) |
21 | 19 | end |
22 | 20 |
|
23 | | - @test isnan(reinterpret(E4M3, 0b0_1111_111)) |
24 | | - @test isnan(reinterpret(E4M3, 0b1_1111_111)) |
| 21 | + @test isnan(reinterpret(MX_E4M3, 0b0_1111_111)) |
| 22 | + @test isnan(reinterpret(MX_E4M3, 0b1_1111_111)) |
25 | 23 |
|
26 | | - @test iszero(reinterpret(E4M3, 0b0_0000_000)) |
27 | | - @test iszero(reinterpret(E4M3, 0b1_0000_000)) |
| 24 | + @test iszero(reinterpret(MX_E4M3, 0b0_0000_000)) |
| 25 | + @test iszero(reinterpret(MX_E4M3, 0b1_0000_000)) |
28 | 26 |
|
29 | | - @test reinterpret(E4M3, 0b0_1111_110) == 2^8 * 1.75 |
30 | | - @test reinterpret(E4M3, 0b1_1111_110) == -2^8 * 1.75 |
| 27 | + @test reinterpret(MX_E4M3, 0b0_1111_110) == 2^8 * 1.75 == floatmax(MX_E4M3) |
| 28 | + @test reinterpret(MX_E4M3, 0b1_1111_110) == -2^8 * 1.75 == -floatmax(MX_E4M3) |
31 | 29 |
|
32 | | - @test reinterpret(E4M3, 0b0_0001_000) == 2^-6 |
33 | | - @test reinterpret(E4M3, 0b1_0001_000) == -2^-6 |
| 30 | + @test reinterpret(MX_E4M3, 0b0_0001_000) == 2^-6 == floatmin(MX_E4M3) |
| 31 | + @test reinterpret(MX_E4M3, 0b1_0001_000) == -2^-6 == -floatmin(MX_E4M3) |
34 | 32 |
|
35 | | - @test reinterpret(E4M3, 0b0_0000_111) == 2^-6 * 0.875 |
36 | | - @test reinterpret(E4M3, 0b1_0000_111) == -2^-6 * 0.875 |
| 33 | + @test reinterpret(MX_E4M3, 0b0_0000_111) == 2^-6 * 0.875 == prevfloat(floatmin(MX_E4M3)) |
| 34 | + @test reinterpret(MX_E4M3, 0b1_0000_111) == -2^-6 * 0.875 == -prevfloat(floatmin(MX_E4M3)) |
37 | 35 |
|
38 | | - @test reinterpret(E4M3, 0b0_0000_001) == 2^-9 |
39 | | - @test reinterpret(E4M3, 0b1_0000_001) == -2^-9 |
| 36 | + @test reinterpret(MX_E4M3, 0b0_0000_001) == 2^-9 == nextfloat(zero(MX_E4M3)) |
| 37 | + @test reinterpret(MX_E4M3, 0b1_0000_001) == -2^-9 == -nextfloat(zero(MX_E4M3)) |
40 | 38 | end |
41 | 39 |
|
42 | 40 | @testset "E5M2" begin |
43 | | - E5M2 = Microfloat(1, 5, 2) |
44 | | - |
45 | | - @test Microfloats.bias(E5M2) == 15 |
| 41 | + @test Microfloats.bias(MX_E5M2) == 15 |
46 | 42 |
|
47 | | - @test reinterpret(UInt8, E5M2(Inf)) == 0b0_11111_00 |
48 | | - @test reinterpret(UInt8, E5M2(-Inf)) == 0b1_11111_00 |
| 43 | + @test reinterpret(UInt8, MX_E5M2(Inf)) == 0b0_11111_00 |
| 44 | + @test reinterpret(UInt8, MX_E5M2(-Inf)) == 0b1_11111_00 |
49 | 45 |
|
50 | 46 | for i in 0b01:0b11 |
51 | | - @test isnan(reinterpret(E5M2, 0b0_11111_00 | i)) |
52 | | - @test isnan(reinterpret(E5M2, 0b1_11111_00 | i)) |
| 47 | + @test isnan(reinterpret(MX_E5M2, 0b0_11111_00 | i)) |
| 48 | + @test isnan(reinterpret(MX_E5M2, 0b1_11111_00 | i)) |
53 | 49 | end |
54 | 50 |
|
55 | | - @test iszero(reinterpret(E5M2, 0b0_00000_00)) |
56 | | - @test iszero(reinterpret(E5M2, 0b1_00000_00)) |
| 51 | + @test iszero(reinterpret(MX_E5M2, 0b0_00000_00)) |
| 52 | + @test iszero(reinterpret(MX_E5M2, 0b1_00000_00)) |
57 | 53 |
|
58 | | - @test reinterpret(E5M2, 0b0_11110_11) == 2^15 * 1.75 |
59 | | - @test reinterpret(E5M2, 0b1_11110_11) == -2^15 * 1.75 |
60 | | - @test nextfloat(reinterpret(E5M2, 0b0_11110_11)) == Inf |
61 | | - @test prevfloat(reinterpret(E5M2, 0b1_11110_11)) == -Inf |
| 54 | + @test reinterpret(MX_E5M2, 0b0_11110_11) == 2^15 * 1.75 == floatmax(MX_E5M2) |
| 55 | + @test reinterpret(MX_E5M2, 0b1_11110_11) == -2^15 * 1.75 == -floatmax(MX_E5M2) |
| 56 | + @test nextfloat(reinterpret(MX_E5M2, 0b0_11110_11)) == Inf |
| 57 | + @test prevfloat(reinterpret(MX_E5M2, 0b1_11110_11)) == -Inf |
62 | 58 |
|
63 | | - @test reinterpret(E5M2, 0b0_00001_00) == 2^-14 |
64 | | - @test reinterpret(E5M2, 0b1_00001_00) == -2^-14 |
| 59 | + @test reinterpret(MX_E5M2, 0b0_00001_00) == 2^-14 == floatmin(MX_E5M2) |
| 60 | + @test reinterpret(MX_E5M2, 0b1_00001_00) == -2^-14 == -floatmin(MX_E5M2) |
65 | 61 |
|
66 | | - @test reinterpret(E5M2, 0b0_00000_11) == 2^-14 * 0.75 |
67 | | - @test reinterpret(E5M2, 0b1_00000_11) == -2^-14 * 0.75 |
68 | | - @test reinterpret(E5M2, 0b0_00000_01) == 2^-16 |
69 | | - @test reinterpret(E5M2, 0b1_00000_01) == -2^-16 |
| 62 | + @test reinterpret(MX_E5M2, 0b0_00000_11) == 2^-14 * 0.75 == prevfloat(floatmin(MX_E5M2)) |
| 63 | + @test reinterpret(MX_E5M2, 0b1_00000_11) == -2^-14 * 0.75 == -prevfloat(floatmin(MX_E5M2)) |
| 64 | + |
| 65 | + @test reinterpret(MX_E5M2, 0b0_00000_01) == 2^-16 == nextfloat(zero(MX_E5M2)) |
| 66 | + @test reinterpret(MX_E5M2, 0b1_00000_01) == -2^-16 == -nextfloat(zero(MX_E5M2)) |
70 | 67 | end |
71 | 68 |
|
72 | 69 | end |
73 | 70 |
|
74 | 71 | @testset "FP6" begin |
75 | 72 |
|
76 | 73 | @testset "E2M3" begin |
77 | | - E2M3 = Microfloat(1, 2, 3, MX) |
78 | | - |
79 | | - @test Microfloats.bias(E2M3) == 1 |
| 74 | + @test Microfloats.bias(MX_E2M3) == 1 |
80 | 75 |
|
81 | | - @test isfinite(reinterpret(E2M3, 0b0_11_000)) |
82 | | - @test isfinite(reinterpret(E2M3, 0b1_11_000)) |
| 76 | + @test isfinite(reinterpret(MX_E2M3, 0b0_11_000)) |
| 77 | + @test isfinite(reinterpret(MX_E2M3, 0b1_11_000)) |
83 | 78 |
|
84 | 79 | for i in 0b001:0b111 |
85 | | - @test isfinite(reinterpret(E2M3, 0b0_11_000 | i << 2)) |
86 | | - @test isfinite(reinterpret(E2M3, 0b1_11_000 | i << 2)) |
| 80 | + @test isfinite(reinterpret(MX_E2M3, 0b0_11_000 | i << 2)) |
| 81 | + @test isfinite(reinterpret(MX_E2M3, 0b1_11_000 | i << 2)) |
87 | 82 | end |
88 | 83 |
|
89 | | - @test iszero(reinterpret(E2M3, 0b0_00_000)) |
90 | | - @test iszero(reinterpret(E2M3, 0b1_00_000)) |
| 84 | + @test iszero(reinterpret(MX_E2M3, 0b0_00_000)) |
| 85 | + @test iszero(reinterpret(MX_E2M3, 0b1_00_000)) |
91 | 86 |
|
92 | | - @test reinterpret(E2M3, 0b0_11_111) == 2^2 * 1.875 |
93 | | - @test reinterpret(E2M3, 0b1_11_111) == -2^2 * 1.875 |
| 87 | + @test reinterpret(MX_E2M3, 0b0_11_111) == 2^2 * 1.875 == floatmax(MX_E2M3) |
| 88 | + @test reinterpret(MX_E2M3, 0b1_11_111) == -2^2 * 1.875 == -floatmax(MX_E2M3) |
94 | 89 |
|
95 | | - @test reinterpret(E2M3, 0b0_01_000) == 2^0 * 1.0 |
96 | | - @test reinterpret(E2M3, 0b1_01_000) == -2^0 * 1.0 |
| 90 | + @test reinterpret(MX_E2M3, 0b0_01_000) == 2^0 * 1.0 == floatmin(MX_E2M3) |
| 91 | + @test reinterpret(MX_E2M3, 0b1_01_000) == -2^0 * 1.0 == -floatmin(MX_E2M3) |
97 | 92 |
|
98 | | - @test reinterpret(E2M3, 0b0_00_111) == 2^0 * 0.875 |
99 | | - @test reinterpret(E2M3, 0b1_00_111) == -2^0 * 0.875 |
100 | | - |
101 | | - @test reinterpret(E2M3, 0b0_00_001) == 2^0 * 0.125 |
102 | | - @test reinterpret(E2M3, 0b1_00_001) == -2^0 * 0.125 |
| 93 | + @test reinterpret(MX_E2M3, 0b0_00_111) == 2^0 * 0.875 == prevfloat(floatmin(MX_E2M3)) |
| 94 | + @test reinterpret(MX_E2M3, 0b1_00_111) == -2^0 * 0.875 == -prevfloat(floatmin(MX_E2M3)) |
103 | 95 |
|
| 96 | + @test reinterpret(MX_E2M3, 0b0_00_001) == 2^0 * 0.125 == nextfloat(zero(MX_E2M3)) |
| 97 | + @test reinterpret(MX_E2M3, 0b1_00_001) == -2^0 * 0.125 == -nextfloat(zero(MX_E2M3)) |
104 | 98 | end |
105 | 99 |
|
106 | 100 | @testset "E3M2" begin |
107 | | - E3M2 = Microfloat(1, 3, 2, MX) |
108 | | - |
109 | | - @test Microfloats.bias(E3M2) == 3 |
| 101 | + @test Microfloats.bias(MX_E3M2) == 3 |
110 | 102 |
|
111 | | - @test isfinite(reinterpret(E3M2, 0b0_111_00)) |
112 | | - @test isfinite(reinterpret(E3M2, 0b1_111_00)) |
| 103 | + @test isfinite(reinterpret(MX_E3M2, 0b0_111_00)) |
| 104 | + @test isfinite(reinterpret(MX_E3M2, 0b1_111_00)) |
113 | 105 |
|
114 | 106 | for i in 0b01:0b11 |
115 | | - @test isfinite(reinterpret(E3M2, 0b0_111_00 | i << 2)) |
116 | | - @test isfinite(reinterpret(E3M2, 0b1_111_00 | i << 2)) |
| 107 | + @test isfinite(reinterpret(MX_E3M2, 0b0_111_00 | i << 2)) |
| 108 | + @test isfinite(reinterpret(MX_E3M2, 0b1_111_00 | i << 2)) |
117 | 109 | end |
118 | 110 |
|
119 | | - @test iszero(reinterpret(E3M2, 0b0_000_00)) |
120 | | - @test iszero(reinterpret(E3M2, 0b1_000_00)) |
| 111 | + @test iszero(reinterpret(MX_E3M2, 0b0_000_00)) |
| 112 | + @test iszero(reinterpret(MX_E3M2, 0b1_000_00)) |
121 | 113 |
|
122 | | - @test reinterpret(E3M2, 0b0_111_11) == 2^4 * 1.75 |
123 | | - @test reinterpret(E3M2, 0b1_111_11) == -2^4 * 1.75 |
| 114 | + @test reinterpret(MX_E3M2, 0b0_111_11) == 2^4 * 1.75 == floatmax(MX_E3M2) |
| 115 | + @test reinterpret(MX_E3M2, 0b1_111_11) == -2^4 * 1.75 == -floatmax(MX_E3M2) |
124 | 116 |
|
125 | | - @test reinterpret(E3M2, 0b0_001_00) == 2^-2 * 1.0 |
126 | | - @test reinterpret(E3M2, 0b1_001_00) == -2^-2 * 1.0 |
| 117 | + @test reinterpret(MX_E3M2, 0b0_001_00) == 2^-2 * 1.0 == floatmin(MX_E3M2) |
| 118 | + @test reinterpret(MX_E3M2, 0b1_001_00) == -2^-2 * 1.0 == -floatmin(MX_E3M2) |
127 | 119 |
|
128 | | - @test reinterpret(E3M2, 0b0_000_11) == 2^-2 * 0.75 |
129 | | - @test reinterpret(E3M2, 0b1_000_11) == -2^-2 * 0.75 |
| 120 | + @test reinterpret(MX_E3M2, 0b0_000_11) == 2^-2 * 0.75 == prevfloat(floatmin(MX_E3M2)) |
| 121 | + @test reinterpret(MX_E3M2, 0b1_000_11) == -2^-2 * 0.75 == -prevfloat(floatmin(MX_E3M2)) |
130 | 122 |
|
131 | | - @test reinterpret(E3M2, 0b0_000_01) == 2^-2 * 0.25 |
132 | | - @test reinterpret(E3M2, 0b1_000_01) == -2^-2 * 0.25 |
| 123 | + @test reinterpret(MX_E3M2, 0b0_000_01) == 2^-2 * 0.25 == nextfloat(zero(MX_E3M2)) |
| 124 | + @test reinterpret(MX_E3M2, 0b1_000_01) == -2^-2 * 0.25 == -nextfloat(zero(MX_E3M2)) |
133 | 125 | end |
134 | 126 |
|
135 | 127 | end |
136 | 128 |
|
137 | 129 | @testset "FP4" begin |
138 | 130 |
|
139 | 131 | @testset "E2M1" begin |
140 | | - E2M1 = Microfloat(1, 2, 1, MX) |
| 132 | + @test Microfloats.bias(MX_E2M1) == 1 |
141 | 133 |
|
142 | | - @test Microfloats.bias(E2M1) == 1 |
| 134 | + @test isfinite(reinterpret(MX_E2M1, 0b0_11_0)) |
| 135 | + @test isfinite(reinterpret(MX_E2M1, 0b1_11_0)) |
143 | 136 |
|
144 | | - @test isfinite(reinterpret(E2M1, 0b0_11_0)) |
145 | | - @test isfinite(reinterpret(E2M1, 0b1_11_0)) |
| 137 | + @test isfinite(reinterpret(MX_E2M1, 0b0_11_1)) |
| 138 | + @test isfinite(reinterpret(MX_E2M1, 0b1_11_1)) |
146 | 139 |
|
147 | | - @test isfinite(reinterpret(E2M1, 0b0_11_1)) |
148 | | - @test isfinite(reinterpret(E2M1, 0b1_11_1)) |
| 140 | + @test iszero(reinterpret(MX_E2M1, 0b0_00_0)) |
| 141 | + @test iszero(reinterpret(MX_E2M1, 0b1_00_0)) |
149 | 142 |
|
150 | | - @test iszero(reinterpret(E2M1, 0b0_00_0)) |
151 | | - @test iszero(reinterpret(E2M1, 0b1_00_0)) |
| 143 | + @test reinterpret(MX_E2M1, 0b0_11_1) == 2^2 * 1.5 == floatmax(MX_E2M1) |
| 144 | + @test reinterpret(MX_E2M1, 0b1_11_1) == -2^2 * 1.5 == -floatmax(MX_E2M1) |
152 | 145 |
|
153 | | - @test reinterpret(E2M1, 0b0_11_1) == 2^2 * 1.5 |
154 | | - @test reinterpret(E2M1, 0b1_11_1) == -2^2 * 1.5 |
| 146 | + @test reinterpret(MX_E2M1, 0b0_01_0) == 2^0 * 1.0 == floatmin(MX_E2M1) |
| 147 | + @test reinterpret(MX_E2M1, 0b1_01_0) == -2^0 * 1.0 == -floatmin(MX_E2M1) |
155 | 148 |
|
156 | | - @test reinterpret(E2M1, 0b0_01_0) == 2^0 * 1.0 |
157 | | - @test reinterpret(E2M1, 0b1_01_0) == -2^0 * 1.0 |
158 | | - |
159 | | - @test reinterpret(E2M1, 0b0_00_1) == 2^0 * 0.5 |
160 | | - @test reinterpret(E2M1, 0b1_00_1) == -2^0 * 0.5 |
| 149 | + @test reinterpret(MX_E2M1, 0b0_00_1) == 2^0 * 0.5 == nextfloat(zero(MX_E2M1)) |
| 150 | + @test reinterpret(MX_E2M1, 0b1_00_1) == -2^0 * 0.5 == -nextfloat(zero(MX_E2M1)) |
161 | 151 | end |
162 | 152 |
|
163 | 153 | end |
|
168 | 158 |
|
169 | 159 | # arithmetic not yet supported for unsigned microfloats |
170 | 160 | @testset "E8M0" begin |
171 | | - E8M0 = Microfloat(0, 8, 0, MX) |
172 | | - |
173 | | - @test Microfloats.bias(E8M0) == 127 |
| 161 | + @test Microfloats.bias(MX_E8M0) == 127 |
174 | 162 |
|
175 | 163 | #@test floatmax(E8M0) == floatmax(Float32) / 2 |
176 | 164 |
|
177 | | - @test !isfinite(reinterpret(E8M0, 0b11111111)) |
| 165 | + @test !isfinite(reinterpret(MX_E8M0, 0b11111111)) |
178 | 166 |
|
179 | | - @test isnan(reinterpret(E8M0, 0b11111111)) |
| 167 | + @test isnan(reinterpret(MX_E8M0, 0b11111111)) |
180 | 168 |
|
181 | | - @test iszero(reinterpret(E8M0, 0b00000000)) |
| 169 | + @test iszero(reinterpret(MX_E8M0, 0b00000000)) |
182 | 170 | end |
183 | 171 |
|
184 | 172 | end |
|
0 commit comments