Skip to content

Commit bd73b5a

Browse files
authored
Fix DivideOp: change resulting type to float64 (#272)
1 parent 848ff39 commit bd73b5a

File tree

3 files changed

+166
-102
lines changed

3 files changed

+166
-102
lines changed

expr_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1449,6 +1449,66 @@ func TestIssue154(t *testing.T) {
14491449
}
14501450
}
14511451

1452+
func TestIssue270(t *testing.T) {
1453+
env := map[string]interface{}{
1454+
"int8": int8(1),
1455+
"int16": int16(3),
1456+
"int32": int32(5),
1457+
"int64": int64(7),
1458+
"uint8": uint8(11),
1459+
"uint16": uint16(13),
1460+
"uint32": uint32(17),
1461+
"uint64": uint64(19),
1462+
"int8a": uint(23),
1463+
"int8b": uint(29),
1464+
"int16a": uint(31),
1465+
"int16b": uint(37),
1466+
"int32a": uint(41),
1467+
"int32b": uint(43),
1468+
"int64a": uint(47),
1469+
"int64b": uint(53),
1470+
"uint8a": uint(59),
1471+
"uint8b": uint(61),
1472+
"uint16a": uint(67),
1473+
"uint16b": uint(71),
1474+
"uint32a": uint(73),
1475+
"uint32b": uint(79),
1476+
"uint64a": uint(83),
1477+
"uint64b": uint(89),
1478+
"float32a": float32(97),
1479+
"float32b": float32(101),
1480+
"float64a": float64(103),
1481+
"float64b": float64(107),
1482+
}
1483+
for _, each := range []struct {
1484+
input string
1485+
}{
1486+
{"int8 / int16"},
1487+
{"int32 / int64"},
1488+
{"uint8 / uint16"},
1489+
{"uint32 / uint64"},
1490+
{"int8 / uint64"},
1491+
{"int64 / uint8"},
1492+
{"int8a / int8b"},
1493+
{"int16a / int16b"},
1494+
{"int32a / int32b"},
1495+
{"int64a / int64b"},
1496+
{"uint8a / uint8b"},
1497+
{"uint16a / uint16b"},
1498+
{"uint32a / uint32b"},
1499+
{"uint64a / uint64b"},
1500+
{"float32a / float32b"},
1501+
{"float64a / float64b"},
1502+
} {
1503+
p, err := expr.Compile(each.input, expr.Env(env))
1504+
require.NoError(t, err)
1505+
1506+
out, err := expr.Run(p, env)
1507+
require.NoError(t, err)
1508+
require.IsType(t, float64(0), out)
1509+
}
1510+
}
1511+
14521512
// Mock types
14531513
type mockEnv struct {
14541514
Any interface{}

vm/runtime/generate/main.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ func cases(op string, noFloat bool) string {
6666
t = "float64"
6767
}
6868
echo(`case %v:`, b)
69+
if op == "/" {
70+
echo(`return float64(x) / float64(y)`)
71+
continue
72+
}
6973
if i == j {
7074
echo(`return x %v y`, op)
7175
}

0 commit comments

Comments
 (0)