mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-13 01:21:38 -07:00
Fix and subsume test_issue_2087 into strconv test suite
The full "infinity" strings were expected to be partial consumes, but this is not the case. That has been fixed and the relevant extra tests from that file have been added to this test suite. Fixes #2670
This commit is contained in:
@@ -4,6 +4,56 @@ import "core:math"
|
||||
import "core:strconv"
|
||||
import "core:testing"
|
||||
|
||||
@(test)
|
||||
test_float :: proc(t: ^testing.T) {
|
||||
n: int
|
||||
f: f64
|
||||
ok: bool
|
||||
|
||||
f, ok = strconv.parse_f64("1.2", &n)
|
||||
testing.expect_value(t, f, 1.2)
|
||||
testing.expect_value(t, n, 3)
|
||||
testing.expect_value(t, ok, true)
|
||||
|
||||
f, ok = strconv.parse_f64("1.2a", &n)
|
||||
testing.expect_value(t, f, 1.2)
|
||||
testing.expect_value(t, n, 3)
|
||||
testing.expect_value(t, ok, false)
|
||||
|
||||
f, ok = strconv.parse_f64("+", &n)
|
||||
testing.expect_value(t, f, 0)
|
||||
testing.expect_value(t, n, 0)
|
||||
testing.expect_value(t, ok, false)
|
||||
|
||||
f, ok = strconv.parse_f64("-", &n)
|
||||
testing.expect_value(t, f, 0)
|
||||
testing.expect_value(t, n, 0)
|
||||
testing.expect_value(t, ok, false)
|
||||
|
||||
}
|
||||
|
||||
@(test)
|
||||
test_nan :: proc(t: ^testing.T) {
|
||||
n: int
|
||||
f: f64
|
||||
ok: bool
|
||||
|
||||
f, ok = strconv.parse_f64("nan", &n)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.NaN)
|
||||
testing.expect_value(t, n, 3)
|
||||
testing.expect_value(t, ok, true)
|
||||
|
||||
f, ok = strconv.parse_f64("nAN", &n)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.NaN)
|
||||
testing.expect_value(t, n, 3)
|
||||
testing.expect_value(t, ok, true)
|
||||
|
||||
f, ok = strconv.parse_f64("Nani", &n)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.NaN)
|
||||
testing.expect_value(t, n, 3)
|
||||
testing.expect_value(t, ok, false)
|
||||
}
|
||||
|
||||
@(test)
|
||||
test_infinity :: proc(t: ^testing.T) {
|
||||
pos_inf := math.inf_f64(+1)
|
||||
@@ -19,14 +69,17 @@ test_infinity :: proc(t: ^testing.T) {
|
||||
testing.expect_value(t, f, pos_inf)
|
||||
testing.expect_value(t, n, 3)
|
||||
testing.expect_value(t, ok, true)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.Inf)
|
||||
} else if i == 8 { // "infinity"
|
||||
testing.expect_value(t, f, pos_inf)
|
||||
testing.expect_value(t, n, 8)
|
||||
testing.expect_value(t, ok, true)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.Inf)
|
||||
} else { // invalid substring
|
||||
testing.expect_value(t, f, 0)
|
||||
testing.expect_value(t, n, 0)
|
||||
testing.expect_value(t, ok, false)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.Zero)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,14 +91,17 @@ test_infinity :: proc(t: ^testing.T) {
|
||||
testing.expect_value(t, f, pos_inf)
|
||||
testing.expect_value(t, n, 4)
|
||||
testing.expect_value(t, ok, true)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.Inf)
|
||||
} else if i == 9 { // "+infinity"
|
||||
testing.expect_value(t, f, pos_inf)
|
||||
testing.expect_value(t, n, 9)
|
||||
testing.expect_value(t, ok, true)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.Inf)
|
||||
} else { // invalid substring
|
||||
testing.expect_value(t, f, 0)
|
||||
testing.expect_value(t, n, 0)
|
||||
testing.expect_value(t, ok, false)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.Zero)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,14 +113,17 @@ test_infinity :: proc(t: ^testing.T) {
|
||||
testing.expect_value(t, f, neg_inf)
|
||||
testing.expect_value(t, n, 4)
|
||||
testing.expect_value(t, ok, true)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.Neg_Inf)
|
||||
} else if i == 9 { // "-infinity"
|
||||
testing.expect_value(t, f, neg_inf)
|
||||
testing.expect_value(t, n, 9)
|
||||
testing.expect_value(t, ok, true)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.Neg_Inf)
|
||||
} else { // invalid substring
|
||||
testing.expect_value(t, f, 0)
|
||||
testing.expect_value(t, n, 0)
|
||||
testing.expect_value(t, ok, false)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.Zero)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,5 +134,6 @@ test_infinity :: proc(t: ^testing.T) {
|
||||
testing.expect_value(t, f, pos_inf)
|
||||
testing.expect_value(t, n, 8)
|
||||
testing.expect_value(t, ok, true)
|
||||
testing.expect_value(t, math.classify(f), math.Float_Class.Inf)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
// Tests issue #2087 https://github.com/odin-lang/Odin/issues/2087
|
||||
package test_issues
|
||||
|
||||
import "core:math"
|
||||
import "core:strconv"
|
||||
import "core:testing"
|
||||
|
||||
@(test)
|
||||
test_parse_float :: proc(t: ^testing.T) {
|
||||
{
|
||||
f, ok := strconv.parse_f64("1.2")
|
||||
testing.expect(t, ok && f == 1.2, "expected f64(1.2), fully consumed")
|
||||
f, ok = strconv.parse_f64("1.2a")
|
||||
testing.expect(t, !ok && f == 1.2, "expected f64(1.2), partially consumed")
|
||||
f, ok = strconv.parse_f64("+")
|
||||
testing.expect(t, !ok && f == 0.0, "expected f64(0.0), with ok=false")
|
||||
f, ok = strconv.parse_f64("-")
|
||||
testing.expect(t, !ok && f == 0.0, "expected f64(0.0), with ok=false")
|
||||
|
||||
|
||||
f, ok = strconv.parse_f64("inf")
|
||||
testing.expect(t, ok && math.classify(f) == math.Float_Class.Inf, "expected f64(+inf), fully consumed")
|
||||
f, ok = strconv.parse_f64("+inf")
|
||||
testing.expect(t, ok && math.classify(f) == math.Float_Class.Inf, "expected f64(+inf), fully consumed")
|
||||
f, ok = strconv.parse_f64("-inf")
|
||||
testing.expect(t, ok && math.classify(f) == math.Float_Class.Neg_Inf, "expected f64(-inf), fully consumed")
|
||||
f, ok = strconv.parse_f64("inFinity")
|
||||
testing.expect(t, !ok && math.classify(f) == math.Float_Class.Inf, "expected f64(+inf), partially consumed")
|
||||
f, ok = strconv.parse_f64("+InFinity")
|
||||
testing.expect(t, !ok && math.classify(f) == math.Float_Class.Inf, "expected f64(+inf), partially consumed")
|
||||
f, ok = strconv.parse_f64("-InfiniTy")
|
||||
testing.expect(t, !ok && math.classify(f) == math.Float_Class.Neg_Inf, "expected f64(-inf), partially consumed")
|
||||
f, ok = strconv.parse_f64("nan")
|
||||
testing.expect(t, ok && math.classify(f) == math.Float_Class.NaN, "expected f64(nan), fully consumed")
|
||||
f, ok = strconv.parse_f64("nAN")
|
||||
testing.expect(t, ok && math.classify(f) == math.Float_Class.NaN, "expected f64(nan), fully consumed")
|
||||
}
|
||||
{
|
||||
f, ok := strconv.parse_f32("1.2")
|
||||
testing.expect(t, ok && f == 1.2, "expected f32(1.2), fully consumed")
|
||||
|
||||
f, ok = strconv.parse_f32("1.2a")
|
||||
testing.expect(t, !ok && f == 1.2, "expected f32(1.2), partially consumed")
|
||||
|
||||
f, ok = strconv.parse_f32("inf")
|
||||
testing.expect(t, ok && math.classify(f) == math.Float_Class.Inf, "expected f32(+inf), fully consumed")
|
||||
f, ok = strconv.parse_f32("+inf")
|
||||
testing.expect(t, ok && math.classify(f) == math.Float_Class.Inf, "expected f32(+inf), fully consumed")
|
||||
f, ok = strconv.parse_f32("-inf")
|
||||
testing.expect(t, ok && math.classify(f) == math.Float_Class.Neg_Inf, "expected f32(-inf), fully consumed")
|
||||
f, ok = strconv.parse_f32("inFinity")
|
||||
testing.expect(t, !ok && math.classify(f) == math.Float_Class.Inf, "expected f32(+inf), partially consumed")
|
||||
f, ok = strconv.parse_f32("+InFinity")
|
||||
testing.expect(t, !ok && math.classify(f) == math.Float_Class.Inf, "expected f32(+inf), partially consumed")
|
||||
f, ok = strconv.parse_f32("-InfiniTy")
|
||||
testing.expect(t, !ok && math.classify(f) == math.Float_Class.Neg_Inf, "expected f32(-inf), partially consumed")
|
||||
f, ok = strconv.parse_f32("nan")
|
||||
testing.expect(t, ok && math.classify(f) == math.Float_Class.NaN, "expected f32(nan), fully consumed")
|
||||
f, ok = strconv.parse_f32("nAN")
|
||||
testing.expect(t, ok && math.classify(f) == math.Float_Class.NaN, "expected f32(nan), fully consumed")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user