TypeConverterTests.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using Jint.Native;
  2. using Jint.Runtime;
  3. namespace Jint.Tests.Runtime
  4. {
  5. public class TypeConverterTests
  6. {
  7. public static readonly IEnumerable<object[]> ConvertNumberToInt32AndUint32TestData = new TheoryData<double, int>()
  8. {
  9. { 0.0, 0 },
  10. { -0.0, 0 },
  11. { double.Epsilon, 0 },
  12. { 0.5, 0 },
  13. { -0.5, 0 },
  14. { 0.9999999999999999, 0 },
  15. { 1.0, 1 },
  16. { 1.5, 1 },
  17. { 10.0, 10 },
  18. { -12.3, -12 },
  19. { 1485772.6, 1485772 },
  20. { -984737183.8, -984737183 },
  21. { Math.Pow(2, 31) - 1.0, int.MaxValue },
  22. { Math.Pow(2, 31) - 0.5, int.MaxValue },
  23. { Math.Pow(2, 32) - 1.0, -1 },
  24. { Math.Pow(2, 32) - 0.5, -1 },
  25. { Math.Pow(2, 32), 0 },
  26. { -Math.Pow(2, 32), 0 },
  27. { -Math.Pow(2, 32) - 0.5, 0 },
  28. { Math.Pow(2, 32) + 1.0, 1 },
  29. { Math.Pow(2, 45) + 17.56, 17 },
  30. { Math.Pow(2, 45) - 17.56, -18 },
  31. { -Math.Pow(2, 45) + 17.56, 18 },
  32. { Math.Pow(2, 51) + 17.5, 17 },
  33. { Math.Pow(2, 51) - 17.5, -18 },
  34. { Math.Pow(2, 53) - 1.0, -1 },
  35. { -Math.Pow(2, 53) + 1.0, 1 },
  36. { Math.Pow(2, 53), 0 },
  37. { -Math.Pow(2, 53), 0 },
  38. { Math.Pow(2, 53) + 12.0, 12 },
  39. { -Math.Pow(2, 53) - 12.0, -12 },
  40. { (Math.Pow(2, 53) - 1.0) * Math.Pow(2, 1), -2 },
  41. { -(Math.Pow(2, 53) - 1.0) * Math.Pow(2, 3), 8 },
  42. { -(Math.Pow(2, 53) - 1.0) * Math.Pow(2, 11), 1 << 11 },
  43. { (Math.Pow(2, 53) - 1.0) * Math.Pow(2, 20), -(1 << 20) },
  44. { (Math.Pow(2, 53) - 1.0) * Math.Pow(2, 31), int.MinValue },
  45. { -(Math.Pow(2, 53) - 1.0) * Math.Pow(2, 31), int.MinValue },
  46. { (Math.Pow(2, 53) - 1.0) * Math.Pow(2, 32), 0 },
  47. { -(Math.Pow(2, 53) - 1.0) * Math.Pow(2, 32), 0 },
  48. { (Math.Pow(2, 53) - 1.0) * Math.Pow(2, 36), 0 },
  49. { double.MaxValue, 0 },
  50. { double.MinValue, 0 },
  51. { double.PositiveInfinity, 0 },
  52. { double.NegativeInfinity, 0 },
  53. { double.NaN, 0 },
  54. };
  55. [Theory]
  56. [MemberData(nameof(ConvertNumberToInt32AndUint32TestData))]
  57. public void ConvertNumberToInt32AndUint32(double value, int expectedResult)
  58. {
  59. JsValue jsval = value;
  60. Assert.Equal(expectedResult, TypeConverter.ToInt32(jsval));
  61. Assert.Equal((uint)expectedResult, TypeConverter.ToUint32(jsval));
  62. }
  63. }
  64. }