NumberTests.cs 2.4 KB

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