| ... | @@ -339,7 +339,7 @@ fn caseInEql(a: []const u8, b: []const u8) bool { | ... | @@ -339,7 +339,7 @@ fn caseInEql(a: []const u8, b: []const u8) bool { |
| 339 | } | 339 | } |
| 340 | | 340 | |
| 341 | pub fn parseFloat(comptime T: type, s: []const u8) !T { | 341 | pub fn parseFloat(comptime T: type, s: []const u8) !T { |
| 342 | if (s.len == 0) { | 342 | if (s.len == 0 or (s.len == 1 and (s[0] == '+' or s[0] == '-'))) { |
| 343 | return error.InvalidCharacter; | 343 | return error.InvalidCharacter; |
| 344 | } | 344 | } |
| 345 | | 345 | |
| ... | @@ -379,6 +379,8 @@ test "fmt.parseFloat" { | ... | @@ -379,6 +379,8 @@ test "fmt.parseFloat" { |
| 379 | testing.expectError(error.InvalidCharacter, parseFloat(T, "")); | 379 | testing.expectError(error.InvalidCharacter, parseFloat(T, "")); |
| 380 | testing.expectError(error.InvalidCharacter, parseFloat(T, " 1")); | 380 | testing.expectError(error.InvalidCharacter, parseFloat(T, " 1")); |
| 381 | testing.expectError(error.InvalidCharacter, parseFloat(T, "1abc")); | 381 | testing.expectError(error.InvalidCharacter, parseFloat(T, "1abc")); |
| | 382 | testing.expectError(error.InvalidCharacter, parseFloat(T, "+")); |
| | 383 | testing.expectError(error.InvalidCharacter, parseFloat(T, "-")); |
| 382 | | 384 | |
| 383 | expectEqual(try parseFloat(T, "0"), 0.0); | 385 | expectEqual(try parseFloat(T, "0"), 0.0); |
| 384 | expectEqual(try parseFloat(T, "0"), 0.0); | 386 | expectEqual(try parseFloat(T, "0"), 0.0); |