return;
}
+ // The non digit character inside the number
byte val = utf8FormattedNumber[i];
if (val == '.')
{
i++;
+
+ while (i < utf8FormattedNumber.Length && JsonHelpers.IsDigit(utf8FormattedNumber[i]))
+ {
+ i++;
+ }
+
+ if (utf8FormattedNumber.Length < i)
+ {
+ throw new ArgumentException(SR.RequiredDigitNotFoundEndOfData, nameof(utf8FormattedNumber));
+ }
}
- else if (val == 'e' || val == 'E')
+
+ if (i == utf8FormattedNumber.Length)
+ {
+ return;
+ }
+
+ val = utf8FormattedNumber[i];
+
+ if (val == 'e' || val == 'E')
{
i++;
- if (i >= utf8FormattedNumber.Length)
+ if (utf8FormattedNumber.Length <= i)
{
- throw new ArgumentException(
- SR.RequiredDigitNotFoundEndOfData,
- nameof(utf8FormattedNumber));
+ throw new ArgumentException(SR.RequiredDigitNotFoundEndOfData, nameof(utf8FormattedNumber));
}
val = utf8FormattedNumber[i];
nameof(utf8FormattedNumber));
}
- if (i >= utf8FormattedNumber.Length)
+ if (utf8FormattedNumber.Length <= i)
{
- throw new ArgumentException(
- SR.RequiredDigitNotFoundEndOfData,
- nameof(utf8FormattedNumber));
+ throw new ArgumentException(SR.RequiredDigitNotFoundEndOfData, nameof(utf8FormattedNumber));
}
while (i < utf8FormattedNumber.Length && JsonHelpers.IsDigit(utf8FormattedNumber[i]))
}
[Theory]
- [InlineData(false)]
- [InlineData(true)]
- public static void WriteNumberScientific(bool indented)
+ [InlineData("1e6", false)]
+ [InlineData("1e6", true)]
+ [InlineData("1e+6", false)]
+ [InlineData("1e+6", true)]
+ [InlineData("1e-6", false)]
+ [InlineData("1e-6", true)]
+ [InlineData("-1e6", false)]
+ [InlineData("-1e6", true)]
+ [InlineData("-1e+6", true)]
+ [InlineData("-1e+6", true)]
+ [InlineData("-1e-6", false)]
+ [InlineData("-1e-6", true)]
+ public static void WriteNumberScientific(string value, bool indented)
+ {
+ WriteSimpleValue(indented, value);
+ }
+
+ [Theory]
+ [InlineData("5.012e-20", false)]
+ [InlineData("5.012e-20", true)]
+ [InlineData("5.012e20", false)]
+ [InlineData("5.012e20", true)]
+ [InlineData("5.012e+20", false)]
+ [InlineData("5.012e+20", true)]
+ [InlineData("-5.012e-20", false)]
+ [InlineData("-5.012e-20", true)]
+ [InlineData("-5.012e20", false)]
+ [InlineData("-5.012e20", true)]
+ [InlineData("-5.012e+20", false)]
+ [InlineData("-5.012e+20", true)]
+ public static void WriteNumberDecimalScientific(string value, bool indented)
{
- WriteSimpleValue(indented, "1e6");
+ WriteSimpleValue(indented, value);
}
[Theory]