aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFeoramund <161657516+Feoramund@users.noreply.github.com>2024-06-04 18:50:08 -0400
committerFeoramund <161657516+Feoramund@users.noreply.github.com>2024-06-04 18:55:13 -0400
commit25feff3eb4c3845e6da4e8e56010301e316b2dd9 (patch)
treefda8a6b7d3d5dca11ffa4e53e6affb45d0016906 /tests
parent1fc6ff91b205836fad0fb30b36bfd042e381aa19 (diff)
Permit parsing of incomplete `infinity` but do not return true
To clarify, `parse_f64` will indeed take `infi` to mean `+Inf` and return that as the value, but it will not return `ok = true`. It treats it as `inf` followed by any other trailing character. `parse_f64_prefix` is the lenient one which will return true so long as it finds some meaningful value.
Diffstat (limited to 'tests')
-rw-r--r--tests/core/strconv/test_core_strconv.odin45
1 files changed, 18 insertions, 27 deletions
diff --git a/tests/core/strconv/test_core_strconv.odin b/tests/core/strconv/test_core_strconv.odin
index ed4adaf01..6b70654cc 100644
--- a/tests/core/strconv/test_core_strconv.odin
+++ b/tests/core/strconv/test_core_strconv.odin
@@ -62,18 +62,15 @@ test_infinity :: proc(t: ^testing.T) {
n: int
s := "infinity"
- for i in 1 ..< len(s) + 1 {
+ for i in 0 ..< len(s) + 1 {
ss := s[:i]
f, ok := strconv.parse_f64(ss, &n)
- if i == 3 { // "inf"
+ if i >= 3 { // "inf" .. "infinity"
+ expected_n := 8 if i == 8 else 3
+ expected_ok := i == 3 || i == 8
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, n, expected_n)
+ testing.expect_value(t, ok, expected_ok)
testing.expect_value(t, math.classify(f), math.Float_Class.Inf)
} else { // invalid substring
testing.expect_value(t, f, 0)
@@ -84,18 +81,15 @@ test_infinity :: proc(t: ^testing.T) {
}
s = "+infinity"
- for i in 1 ..< len(s) + 1 {
+ for i in 0 ..< len(s) + 1 {
ss := s[:i]
f, ok := strconv.parse_f64(ss, &n)
- if i == 4 { // "+inf"
- 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"
+ if i >= 4 { // "+inf" .. "+infinity"
+ expected_n := 9 if i == 9 else 4
+ expected_ok := i == 4 || i == 9
testing.expect_value(t, f, pos_inf)
- testing.expect_value(t, n, 9)
- testing.expect_value(t, ok, true)
+ testing.expect_value(t, n, expected_n)
+ testing.expect_value(t, ok, expected_ok)
testing.expect_value(t, math.classify(f), math.Float_Class.Inf)
} else { // invalid substring
testing.expect_value(t, f, 0)
@@ -106,18 +100,15 @@ test_infinity :: proc(t: ^testing.T) {
}
s = "-infinity"
- for i in 1 ..< len(s) + 1 {
+ for i in 0 ..< len(s) + 1 {
ss := s[:i]
f, ok := strconv.parse_f64(ss, &n)
- if i == 4 { // "-inf"
- 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"
+ if i >= 4 { // "-inf" .. "infinity"
+ expected_n := 9 if i == 9 else 4
+ expected_ok := i == 4 || i == 9
testing.expect_value(t, f, neg_inf)
- testing.expect_value(t, n, 9)
- testing.expect_value(t, ok, true)
+ testing.expect_value(t, n, expected_n)
+ testing.expect_value(t, ok, expected_ok)
testing.expect_value(t, math.classify(f), math.Float_Class.Neg_Inf)
} else { // invalid substring
testing.expect_value(t, f, 0)