TypedArrayInteropTests.cs 5.4 KB

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