TypeConverterTests.cs 2.6 KB

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