diff --git a/src/Microsoft.ML.Core/Utilities/DoubleParser.cs b/src/Microsoft.ML.Core/Utilities/DoubleParser.cs index 529d4016dc..51bd49129b 100644 --- a/src/Microsoft.ML.Core/Utilities/DoubleParser.cs +++ b/src/Microsoft.ML.Core/Utilities/DoubleParser.cs @@ -145,6 +145,7 @@ public static Result Parse(ReadOnlySpan span, out Single value, OptionFlag value = default(Single); return Result.Error; } + ichEnd += ich; // Make sure everything was consumed. while (ichEnd < span.Length) @@ -197,6 +198,7 @@ public static Result Parse(ReadOnlySpan span, out Double value, OptionFlag value = default(Double); return Result.Error; } + ichEnd += ich; // Make sure everything was consumed. while (ichEnd < span.Length) diff --git a/test/Microsoft.ML.Core.Tests/UnitTests/DoubleParserTests.cs b/test/Microsoft.ML.Core.Tests/UnitTests/DoubleParserTests.cs new file mode 100644 index 0000000000..81c8180d34 --- /dev/null +++ b/test/Microsoft.ML.Core.Tests/UnitTests/DoubleParserTests.cs @@ -0,0 +1,55 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Microsoft.ML.Internal.Utilities; +using Microsoft.ML.TestFramework; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.ML.Core.Tests.UnitTests +{ + public class DoubleParserTests : BaseTestClass + { + public DoubleParserTests(ITestOutputHelper output) + : base(output) + { + } + + [Fact] + public void Parse_WithLeadingAndTrailingWhitespace_ReturnsGood() + { + var result = DoubleParser.Parse(" 1.234 ".AsSpan(), out double value); + + Assert.Equal(DoubleParser.Result.Good, result); + Assert.Equal(1.234, value); + } + + [Fact] + public void Parse_WithoutWhitespace_ReturnsGood() + { + var result = DoubleParser.Parse("1.234".AsSpan(), out double value); + + Assert.Equal(DoubleParser.Result.Good, result); + Assert.Equal(1.234, value); + } + + [Fact] + public void Parse_WithTrailingGarbageCharacter_ReturnsExtra() + { + var result = DoubleParser.Parse("1.234x".AsSpan(), out double value); + + Assert.Equal(DoubleParser.Result.Extra, result); + } + + [Fact] + public void Parse_Single_WithLeadingAndTrailingWhitespace_ReturnsGood() + { + var result = DoubleParser.Parse(" 1.234 ".AsSpan(), out float value); + + Assert.Equal(DoubleParser.Result.Good, result); + Assert.Equal(1.234f, value); + } + } +}