this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

cue: fix 0/0

Should be error, not NaN.

Closes #84

Change-Id: I061b7e32b069c1fea3123fb981a4eddf87c61910
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/3044
Reviewed-by: Marcel van Lohuizen <mpvl@google.com>

authored by

Marcel van Lohuizen and committed by
Marcel van Lohuizen
34988fab 18637dba

+25 -10
+9 -6
cue/binop.go
··· 956 956 case opMul: 957 957 _, _ = ctx.Mul(&n.v, &x.v, &y.v) 958 958 case opQuo: 959 - cond, _ := ctx.Quo(&n.v, &x.v, &y.v) 959 + cond, err := ctx.Quo(&n.v, &x.v, &y.v) 960 + if err != nil { 961 + return ctx.mkErr(src, err.Error()) 962 + } 960 963 if cond.DivisionByZero() { 961 - return ctx.mkErr(src, "divide by zero") 964 + return ctx.mkErr(src, "division by zero") 962 965 } 963 966 _, _, _ = ctx.Reduce(&n.v, &n.v) 964 967 n.k = floatKind 965 968 case opIDiv: 966 969 if y.v.IsZero() { 967 - return ctx.mkErr(src, "divide by zero") 970 + return ctx.mkErr(src, "division by zero") 968 971 } 969 972 intOp(ctx, n, (*big.Int).Div, x, y) 970 973 case opIMod: 971 974 if y.v.IsZero() { 972 - return ctx.mkErr(src, "divide by zero") 975 + return ctx.mkErr(src, "division by zero") 973 976 } 974 977 intOp(ctx, n, (*big.Int).Mod, x, y) 975 978 case opIQuo: 976 979 if y.v.IsZero() { 977 - return ctx.mkErr(src, "divide by zero") 980 + return ctx.mkErr(src, "division by zero") 978 981 } 979 982 intOp(ctx, n, (*big.Int).Quo, x, y) 980 983 case opIRem: 981 984 if y.v.IsZero() { 982 - return ctx.mkErr(src, "divide by zero") 985 + return ctx.mkErr(src, "division by zero") 983 986 } 984 987 intOp(ctx, n, (*big.Int).Rem, x, y) 985 988 }
+12 -3
cue/resolve_test.go
··· 137 137 div1: 2.0 / 3 * 6 // 4 138 138 div2: 2 / 3 * 6 // 4 139 139 divZero: 1.0 / 0 140 + div00: 0 / 0 140 141 b: 1 != 4 142 + 143 + idiv00: 0 div 0 144 + imod00: 0 mod 0 145 + iquo00: 0 quo 0 146 + irem00: 0 rem 0 141 147 142 148 v1: 1.0T/2.0 143 149 v2: 2.0 == 2 ··· 159 165 `sum: 1, ` + 160 166 `div1: 4.00000000000000000000000, ` + 161 167 `div2: 4.00000000000000000000000, ` + 162 - `divZero: _|_((1.0 / 0):divide by zero), ` + 168 + `divZero: _|_((1.0 / 0):division by zero), ` + 169 + `div00: _|_((0 / 0):division undefined), ` + 163 170 `b: true, ` + 171 + `idiv00: _|_((0 div 0):division by zero), ` + 172 + `imod00: _|_((0 mod 0):division by zero), ` + 173 + `iquo00: _|_((0 quo 0):division by zero), ` + 174 + `irem00: _|_((0 rem 0):division by zero), ` + 164 175 `v1: 5e+11, ` + 165 176 `v2: true, ` + 166 177 `v3: 0.666666666666666666666667, ` + ··· 205 216 m4: -5 mod -2 // 1 206 217 me1: 2.0 mod 1 207 218 me2: 2 mod 1.0 208 - 209 - // TODO: handle divide by zero 210 219 `, 211 220 out: `<0>{q1: 2, q2: -2, q3: -2, q4: 2, ` + 212 221 `qe1: _|_((2.0 quo 1):invalid operation 2.0 quo 1 (mismatched types float and int)), ` +
+4 -1
cue/types_test.go
··· 342 342 float64: 0, 343 343 prec: 2, 344 344 fmt: 'f', 345 - err: "divide by zero", 345 + err: "division by zero", 346 346 kind: BottomKind, 347 347 }, { 348 348 value: "1.797693134862315708145274237317043567982e+308", ··· 1754 1754 }, { 1755 1755 value: `3.0e100`, 1756 1756 json: `3.0E+100`, 1757 + }, { 1758 + value: `0/0`, 1759 + err: "division undefined", 1757 1760 }, { 1758 1761 value: `[]`, 1759 1762 json: `[]`,