Commit 5a8b6149fb

Andreas Reischuck <andreas.reischuck@hicknhack-software.com>
2022-05-27 04:05:53
add more corner case tests to float_parse (#11727)
also drop some unused constants Co-authored-by: Andrew Kelley <andrew@ziglang.org>
1 parent 41162ed
Changed files (2)
lib
std
lib/std/fmt/parse_float/parse_float.zig
@@ -1,7 +1,5 @@
 const std = @import("std");
 const parse = @import("parse.zig");
-const parseNumber = parse.parseNumber;
-const parseInfOrNan = parse.parseInfOrNan;
 const convertFast = @import("convert_fast.zig").convertFast;
 const convertEiselLemire = @import("convert_eisel_lemire.zig").convertEiselLemire;
 const convertSlow = @import("convert_slow.zig").convertSlow;
lib/std/fmt/parse_float.zig
@@ -57,6 +57,16 @@ test "fmt.parseFloat" {
         try expect(approxEqAbs(T, try parseFloat(T, "1e-2"), 0.01, epsilon));
         try expect(approxEqAbs(T, try parseFloat(T, "1234e-2"), 12.34, epsilon));
 
+        try expect(approxEqAbs(T, try parseFloat(T, "1."), 1, epsilon));
+        try expect(approxEqAbs(T, try parseFloat(T, "0."), 0, epsilon));
+        try expect(approxEqAbs(T, try parseFloat(T, ".1"), 0.1, epsilon));
+        try expect(approxEqAbs(T, try parseFloat(T, ".0"), 0, epsilon));
+        try expect(approxEqAbs(T, try parseFloat(T, ".1e-1"), 0.01, epsilon));
+
+        try expectError(error.InvalidCharacter, parseFloat(T, ".")); // At least one digit is required.
+        try expectError(error.InvalidCharacter, parseFloat(T, ".e1")); // At least one digit is required.
+        try expectError(error.InvalidCharacter, parseFloat(T, "0.e")); // At least one digit is required.
+
         try expect(approxEqAbs(T, try parseFloat(T, "123142.1"), 123142.1, epsilon));
         try expect(approxEqAbs(T, try parseFloat(T, "-123142.1124"), @as(T, -123142.1124), epsilon));
         try expect(approxEqAbs(T, try parseFloat(T, "0.7062146892655368"), @as(T, 0.7062146892655368), epsilon));