TypedArrayInteropTests.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using Xunit;
  2. namespace Jint.Tests.Runtime
  3. {
  4. public class TypedArrayInteropTests
  5. {
  6. [Fact]
  7. public void CanInteropWithInt8()
  8. {
  9. var engine = new Engine();
  10. var source = new sbyte[] { 42, 12 };
  11. engine.SetValue("testSubject", engine.Realm.Intrinsics.Int8Array.Construct(source));
  12. ValidateCreatedTypeArray(engine, "Int8Array");
  13. var fromEngine = engine.GetValue("testSubject");
  14. Assert.True(fromEngine.IsInt8Array());
  15. Assert.Equal(source, fromEngine.AsInt8Array());
  16. }
  17. [Fact]
  18. public void CanInteropWithUint8()
  19. {
  20. var engine = new Engine();
  21. var source = new byte[] { 42, 12 };
  22. engine.SetValue("testSubject", engine.Realm.Intrinsics.Uint8Array.Construct(source));
  23. ValidateCreatedTypeArray(engine, "Uint8Array");
  24. var fromEngine = engine.GetValue("testSubject");
  25. Assert.True(fromEngine.IsUint8Array());
  26. Assert.Equal(source, fromEngine.AsUint8Array());
  27. }
  28. [Fact]
  29. public void CanInteropWithUint8Clamped()
  30. {
  31. var engine = new Engine();
  32. var source = new byte[] { 42, 12 };
  33. engine.SetValue("testSubject", engine.Realm.Intrinsics.Uint8ClampedArray.Construct(source));
  34. ValidateCreatedTypeArray(engine, "Uint8ClampedArray");
  35. var fromEngine = engine.GetValue("testSubject");
  36. Assert.True(fromEngine.IsUint8ClampedArray());
  37. Assert.Equal(source, fromEngine.AsUint8ClampedArray());
  38. }
  39. [Fact]
  40. public void CanInteropWithInt16()
  41. {
  42. var engine = new Engine();
  43. var source = new short[] { 42, 12 };
  44. engine.SetValue("testSubject", engine.Realm.Intrinsics.Int16Array.Construct(source));
  45. ValidateCreatedTypeArray(engine, "Int16Array");
  46. var fromEngine = engine.GetValue("testSubject");
  47. Assert.True(fromEngine.IsInt16Array());
  48. Assert.Equal(source, fromEngine.AsInt16Array());
  49. }
  50. [Fact]
  51. public void CanInteropWithUint16()
  52. {
  53. var engine = new Engine();
  54. var source = new ushort[] { 42, 12 };
  55. engine.SetValue("testSubject", engine.Realm.Intrinsics.Uint16Array.Construct(source));
  56. ValidateCreatedTypeArray(engine, "Uint16Array");
  57. var fromEngine = engine.GetValue("testSubject");
  58. Assert.True(fromEngine.IsUint16Array());
  59. Assert.Equal(source, fromEngine.AsUint16Array());
  60. }
  61. [Fact]
  62. public void CanInteropWithInt32()
  63. {
  64. var engine = new Engine();
  65. var source = new[] { 42, 12 };
  66. engine.SetValue("testSubject", engine.Realm.Intrinsics.Int32Array.Construct(source));
  67. ValidateCreatedTypeArray(engine, "Int32Array");
  68. var fromEngine = engine.GetValue("testSubject");
  69. Assert.True(fromEngine.IsInt32Array());
  70. Assert.Equal(source, fromEngine.AsInt32Array());
  71. }
  72. [Fact]
  73. public void CanInteropWithUint32()
  74. {
  75. var engine = new Engine();
  76. var source = new uint[] { 42, 12 };
  77. engine.SetValue("testSubject", engine.Realm.Intrinsics.Uint32Array.Construct(source));
  78. ValidateCreatedTypeArray(engine, "Uint32Array");
  79. var fromEngine = engine.GetValue("testSubject");
  80. Assert.True(fromEngine.IsUint32Array());
  81. Assert.Equal(source, fromEngine.AsUint32Array());
  82. }
  83. [Fact]
  84. public void CanInteropWithBigInt64()
  85. {
  86. var engine = new Engine();
  87. var source = new long[] { 42, 12 };
  88. engine.SetValue("testSubject", engine.Realm.Intrinsics.BigInt64Array.Construct(source));
  89. ValidateCreatedBigIntegerTypeArray(engine, "BigInt64Array");
  90. var fromEngine = engine.GetValue("testSubject");
  91. Assert.True(fromEngine.IsBigInt64Array());
  92. Assert.Equal(source, fromEngine.AsBigInt64Array());
  93. }
  94. [Fact]
  95. public void CanInteropWithBigUint64()
  96. {
  97. var engine = new Engine();
  98. var source = new ulong[] { 42, 12 };
  99. engine.SetValue("testSubject", engine.Realm.Intrinsics.BigUint64Array.Construct(source));
  100. ValidateCreatedBigIntegerTypeArray(engine, "BigUint64Array");
  101. var fromEngine = engine.GetValue("testSubject");
  102. Assert.True(fromEngine.IsBigUint64Array());
  103. Assert.Equal(source, fromEngine.AsBigUint64Array());
  104. }
  105. private static void ValidateCreatedTypeArray(Engine engine, string arrayName)
  106. {
  107. Assert.Equal(arrayName, engine.Evaluate("testSubject.constructor.name").AsString());
  108. Assert.Equal(2, engine.Evaluate("testSubject.length").AsNumber());
  109. Assert.Equal(42, engine.Evaluate("testSubject[0]").AsNumber());
  110. Assert.Equal(12, engine.Evaluate("testSubject[1]").AsNumber());
  111. }
  112. private static void ValidateCreatedBigIntegerTypeArray(Engine engine, string arrayName)
  113. {
  114. Assert.Equal(arrayName, engine.Evaluate("testSubject.constructor.name").AsString());
  115. Assert.Equal(2, engine.Evaluate("testSubject.length").AsNumber());
  116. Assert.Equal(42, engine.Evaluate("testSubject[0]").AsBigInt());
  117. Assert.Equal(12, engine.Evaluate("testSubject[1]").AsBigInt());
  118. }
  119. }
  120. }