BigIntTests.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System.Numerics;
  2. using Jint.Native;
  3. namespace Jint.Tests.Runtime;
  4. public class BigIntTests
  5. {
  6. [Theory]
  7. [InlineData("a = a + b;", "146")]
  8. [InlineData("a = a - b;", "100")]
  9. [InlineData("a = a * b;", "2829")]
  10. [InlineData("a = a / b;", "5")]
  11. [InlineData("a = a % b;", "8")]
  12. [InlineData("a += b;", "146")]
  13. [InlineData("a -= b;", "100")]
  14. [InlineData("a *= b;", "2829")]
  15. [InlineData("a /= b;", "5")]
  16. [InlineData("a %= b;", "8")]
  17. public void BasicOperations(string statement, string expected)
  18. {
  19. var outputValues = new List<JsValue>();
  20. var engine = new Engine()
  21. .SetValue("log", outputValues.Add);
  22. engine.Evaluate("let a = 123n; let b = 23n;");
  23. engine.Evaluate(statement);
  24. engine.Evaluate("log(a)");
  25. Assert.True(outputValues[0].IsBigInt(), "The type of the value is expected to stay BigInt");
  26. Assert.Equal(expected, outputValues[0].ToString());
  27. }
  28. [Theory]
  29. [InlineData("let right = 123n;")]
  30. [InlineData("let right = BigInt(123);")]
  31. [InlineData("let right = BigInt('123');")]
  32. public void ObjectIsReturnsTrueForSameBigInts(string statement)
  33. {
  34. // Arrange
  35. var engine = new Engine();
  36. engine.SetValue("left", new JsBigInt(new BigInteger(123)));
  37. engine.Evaluate(statement);
  38. // Act
  39. var result = engine.Evaluate("Object.is(left, right);");
  40. // Assert
  41. Assert.True(result.AsBoolean());
  42. }
  43. [Theory]
  44. [InlineData("let right = false;")]
  45. [InlineData("let right = 'test';")]
  46. [InlineData("let right = 123;")]
  47. [InlineData("let right = 321n;")]
  48. [InlineData("let right = BigInt('321');")]
  49. public void ObjectIsReturnsFalseDifferentComparisonsWithBigInt(string statement)
  50. {
  51. // Arrange
  52. var engine = new Engine();
  53. engine.SetValue("left", new JsBigInt(new BigInteger(123)));
  54. engine.Evaluate(statement);
  55. // Act
  56. var result = engine.Evaluate("Object.is(left, right);");
  57. // Assert
  58. Assert.False(result.AsBoolean());
  59. }
  60. }