NumberTests.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Jint.Runtime;
  2. namespace Jint.Tests.Runtime
  3. {
  4. public class NumberTests
  5. {
  6. private readonly Engine _engine;
  7. public NumberTests()
  8. {
  9. _engine = new Engine()
  10. .SetValue("log", new Action<object>(Console.WriteLine))
  11. .SetValue("assert", new Action<bool>(Assert.True))
  12. .SetValue("equal", new Action<object, object>(Assert.Equal));
  13. }
  14. private void RunTest(string source)
  15. {
  16. _engine.Execute(source);
  17. }
  18. [Theory]
  19. [InlineData(1, "3.0e+0")]
  20. [InlineData(50, "3.00000000000000000000000000000000000000000000000000e+0")]
  21. [InlineData(100, "3.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0")]
  22. public void ToExponential(int fractionDigits, string result)
  23. {
  24. var value = _engine.Evaluate($"(3).toExponential({fractionDigits}).toString()").AsString();
  25. Assert.Equal(result, value);
  26. }
  27. [Theory]
  28. [InlineData(1, "3.0")]
  29. [InlineData(50, "3.00000000000000000000000000000000000000000000000000")]
  30. [InlineData(99, "3.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]
  31. public void ToFixed(int fractionDigits, string result)
  32. {
  33. var value = _engine.Evaluate($"(3).toFixed({fractionDigits}).toString()").AsString();
  34. Assert.Equal(result, value);
  35. }
  36. [Fact]
  37. public void ToFixedWith100FractionDigitsThrows()
  38. {
  39. var ex = Assert.Throws<JavaScriptException>(() => _engine.Evaluate($"(3).toFixed(100)"));
  40. Assert.Equal("100 fraction digits is not supported due to .NET format specifier limitation", ex.Message);
  41. }
  42. [Theory]
  43. [InlineData(1, "3")]
  44. [InlineData(50, "3.0000000000000000000000000000000000000000000000000")]
  45. [InlineData(100, "3.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]
  46. public void ToPrecision(int fractionDigits, string result)
  47. {
  48. var value = _engine.Evaluate($"(3).toPrecision({fractionDigits}).toString()").AsString();
  49. Assert.Equal(result, value);
  50. }
  51. }
  52. }