Skip to content

Commit 126a4c4

Browse files
authored
fix(stdlib): correct the behavior of float pow opperations (#2366)
1 parent 461e182 commit 126a4c4

File tree

4 files changed

+36
-36
lines changed

4 files changed

+36
-36
lines changed

compiler/test/stdlib/float32.test.gr

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,30 +80,30 @@ assert 0.0f ** 3.0f == 0.0f
8080
assert 0.0f ** 2.0f == 0.0f
8181
assert 0.0f ** 1.0f == 0.0f
8282
assert 0.0f ** 0.5f == 0.0f
83-
assert Float32.isNaN(0.0f ** 0.0f)
84-
assert Float32.isNaN(0.0f ** -0.0f)
83+
assert 0.0f ** 0.0f == 1.0f
84+
assert 0.0f ** -0.0f == 1.0f
8585
assert 0.0f ** -0.5f == Infinityf
8686
assert 0.0f ** -1.0f == Infinityf
8787
assert 0.0f ** -Infinityf == Infinityf
8888
assert Float32.isNaN(-0.0f ** NaNf)
8989
assert -0.0f ** Infinityf == 0.0f
9090
assert -0.0f ** 3.0f == -0.0f
9191
assert -0.0f ** 0.5f == 0.0f
92-
assert Float32.isNaN(-0.0f ** 0.0f)
93-
assert Float32.isNaN(-0.0f ** -0.0f)
92+
assert -0.0f ** 0.0f == 1.0f
93+
assert -0.0f ** -0.0f == 1.0f
9494
assert -0.0f ** -0.5f == Infinityf
9595
assert -0.0f ** -1.0f == -Infinityf
9696
assert -0.0f ** -2.0f == Infinityf
9797
assert -0.0f ** -3.0f == -Infinityf
9898
assert -0.0f ** -4.0f == Infinityf
9999
assert -0.0f ** -Infinityf == Infinityf
100-
assert Float32.isNaN(NaNf ** 0.0f)
101-
assert Float32.isNaN(Infinityf ** 0.0f)
102-
assert Float32.isNaN(-Infinityf ** 0.0f)
103-
assert Float32.isNaN(1.0f ** 0.0f)
104-
assert Float32.isNaN(-1.0f ** 0.0f)
105-
assert Float32.isNaN(-0.5f ** 0.0f)
106-
assert Float32.isNaN(NaNf ** -0.0f)
100+
assert NaNf ** 0.0f == 1.0f
101+
assert Infinityf ** 0.0f == 1.0f
102+
assert -Infinityf ** 0.0f == 1.0f
103+
assert 1.0f ** 0.0f == 1.0f
104+
assert -1.0f ** 0.0f == 1.0f
105+
assert -0.5f ** 0.0f == 1.0f
106+
assert NaNf ** -0.0f == 1.0f
107107
assert 300.0f ** 1.0f == 300.0f
108108

109109
assert 5.0f > 4.0f

compiler/test/stdlib/float64.test.gr

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -92,30 +92,30 @@ assert 0.0d ** 3.0d == 0.0d
9292
assert 0.0d ** 2.0d == 0.0d
9393
assert 0.0d ** 1.0d == 0.0d
9494
assert 0.0d ** 0.5d == 0.0d
95-
assert Float64.isNaN(0.0d ** 0.0d)
96-
assert Float64.isNaN(0.0d ** -0.0d)
95+
assert 0.0d ** 0.0d == 1.0d
96+
assert 0.0d ** -0.0d == 1.0d
9797
assert 0.0d ** -0.5d == Infinityd
9898
assert 0.0d ** -1.0d == Infinityd
9999
assert 0.0d ** -Infinityd == Infinityd
100100
assert Float64.isNaN(-0.0d ** NaNd)
101101
assert -0.0d ** Infinityd == 0.0d
102102
assert -0.0d ** 3.0d == -0.0d
103103
assert -0.0d ** 0.5d == 0.0d
104-
assert Float64.isNaN(-0.0d ** 0.0d)
105-
assert Float64.isNaN(-0.0d ** -0.0d)
104+
assert -0.0d ** 0.0d == 1.0d
105+
assert -0.0d ** -0.0d == 1.0d
106106
assert -0.0d ** -0.5d == Infinityd
107107
assert -0.0d ** -1.0d == -Infinityd
108108
assert -0.0d ** -2.0d == Infinityd
109109
assert -0.0d ** -3.0d == -Infinityd
110110
assert -0.0d ** -4.0d == Infinityd
111111
assert -0.0d ** -Infinityd == Infinityd
112-
assert Float64.isNaN(NaNd ** 0.0d)
113-
assert Float64.isNaN(Infinityd ** 0.0d)
114-
assert Float64.isNaN(-Infinityd ** 0.0d)
115-
assert Float64.isNaN(1.0d ** 0.0d)
116-
assert Float64.isNaN(-1.0d ** 0.0d)
117-
assert Float64.isNaN(-0.5d ** 0.0d)
118-
assert Float64.isNaN(NaNd ** -0.0d)
112+
assert NaNd ** 0.0d == 1.0d
113+
assert Infinityd ** 0.0d == 1.0d
114+
assert -Infinityd ** 0.0d == 1.0d
115+
assert 1.0d ** 0.0d == 1.0d
116+
assert -1.0d ** 0.0d == 1.0d
117+
assert -0.5d ** 0.0d == 1.0d
118+
assert NaNd ** -0.0d == 1.0d
119119
assert 300.0d ** 1.0d == 300.0d
120120

121121
assert 5.0d > 4.0d

compiler/test/stdlib/number.test.gr

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ assert 0.0 ** 3.0 == 0.0
122122
assert 0.0 ** 2.0 == 0.0
123123
assert 0.0 ** 1.0 == 0.0
124124
assert 0.0 ** 0.5 == 0.0
125-
assert Number.isNaN(0.0 ** 0.0)
126-
assert Number.isNaN(0.0 ** -0.0)
125+
assert 0.0 ** 0.0 == 1.0
126+
assert 0.0 ** -0.0 == 1.0
127127
assert 0.0 ** -0.5 == Infinity
128128
assert 0.0 ** -1.0 == Infinity
129129
assert 0.0 ** -2.0 == Infinity
@@ -136,21 +136,21 @@ assert -0.0 ** 3.0 == -0.0
136136
assert -0.0 ** 2.0 == 0.0
137137
assert -0.0 ** 1.0 == -0.0
138138
assert -0.0 ** 0.5 == 0.0
139-
assert Number.isNaN(-0.0 ** 0.0)
140-
assert Number.isNaN(-0.0 ** -0.0)
139+
assert -0.0 ** 0.0 == 1.0
140+
assert -0.0 ** -0.0 == 1.0
141141
assert -0.0 ** -0.5 == Infinity
142142
assert -0.0 ** -1.0 == -Infinity
143143
assert -0.0 ** -2.0 == Infinity
144144
assert -0.0 ** -3.0 == -Infinity
145145
assert -0.0 ** -4.0 == Infinity
146146
assert -0.0 ** -Infinity == Infinity
147-
assert Number.isNaN(NaN ** 0.0)
148-
assert Number.isNaN(Infinity ** 0.0)
149-
assert Number.isNaN(-Infinity ** 0.0)
150-
assert Number.isNaN(1.0 ** 0.0)
151-
assert Number.isNaN(-1.0 ** 0.0)
152-
assert Number.isNaN(-0.5 ** 0.0)
153-
assert Number.isNaN(NaN ** -0.0)
147+
assert NaN ** 0.0 == 1.0
148+
assert Infinity ** 0.0 == 1.0
149+
assert -Infinity ** 0.0 == 1.0
150+
assert 1.0 ** 0.0 == 1.0
151+
assert -1.0 ** 0.0 == 1.0
152+
assert -0.5 ** 0.0 == 1.0
153+
assert NaN ** -0.0 == 1.0
154154
assert 1 ** 1 == 1
155155
assert 2 ** 1 == 2
156156
assert 300 ** 1 == 300
@@ -172,8 +172,8 @@ assert -1 ** 1.0 == -1.0
172172
assert -2.0 ** 1 == -2.0
173173
assert -300 ** 1.0 == -300.0
174174
assert 0.0 ** 1 == 0.0
175-
assert Number.isNaN(1 ** 0.0)
176-
assert Number.isNaN(0.0 ** 0)
175+
assert 1.0 ** 0.0 == 1.0
176+
assert 0.0 ** 0 == 1.0
177177
assert 1 ** 5.0 == 1.0
178178
assert 5.0 ** 5 == 3125.0
179179
assert -1.0 ** 1 == -1.0

stdlib/runtime/numbers.gr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2943,7 +2943,7 @@ provide let powf = (x: WasmF64, y: WasmF64) => {
29432943
} else if (y == 1.0W) {
29442944
return x
29452945
} else if (y == 0.0W) {
2946-
return NaNW
2946+
return 1.0W
29472947
}
29482948
}
29492949
// Full calculation

0 commit comments

Comments
 (0)