StructuredClone-array-buffer-views.html 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <script src="../include.js"></script>
  2. <script>
  3. const TYPED_ARRAYS = [
  4. Uint8Array,
  5. Uint8ClampedArray,
  6. Uint16Array,
  7. Uint32Array,
  8. Int8Array,
  9. Int16Array,
  10. Int32Array,
  11. Float32Array,
  12. Float64Array,
  13. ];
  14. const BIGINT_TYPED_ARRAYS = [BigUint64Array, BigInt64Array];
  15. test(() => {
  16. TYPED_ARRAYS.forEach(T => {
  17. const a = new T([30, 40, 50, 60]);
  18. let b = structuredClone(a)
  19. if (!a.every((value, index) => value === b[index]))
  20. println("FAIL")
  21. println(`${b[Symbol.toStringTag]} ${b}`)
  22. });
  23. BIGINT_TYPED_ARRAYS.forEach(T => {
  24. const a = new T([30n, 40n, 50n, 60n]);
  25. let b = structuredClone(a)
  26. if (!a.every((value, index) => value === b[index]))
  27. println("FAIL")
  28. println(`${b[Symbol.toStringTag]} ${b}`)
  29. });
  30. // Test DataView clone
  31. let a = new ArrayBuffer(64);
  32. for(let i = 0; i < a.byteLength; ++i) {
  33. a[i] = i;
  34. }
  35. let view = new DataView(a);
  36. let view2 = structuredClone(view);
  37. if (view.buffer === view2.buffer)
  38. println("FAIL: Buffer not deep copied");
  39. for (let i = 0; i < view.byteLength; ++i) {
  40. if (!view[i] === view2[i])
  41. println("FAIL: Data not copied")
  42. }
  43. println(`${view2[Symbol.toStringTag]} ${view2}`)
  44. });
  45. </script>