quickwin 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.en.md +204 -204
  2. package/README.md +203 -203
  3. package/examples/PdfCanvas.tsx +83 -83
  4. package/examples/exec_server.ts +35 -35
  5. package/examples/pdf_preview2.ts +375 -375
  6. package/examples/pdf_viewer.tsx +279 -279
  7. package/examples/test_gallery.tsx +285 -285
  8. package/examples/test_react_lazy.tsx +63 -63
  9. package/examples/test_react_listbox.tsx +71 -71
  10. package/examples/test_root_window.tsx +41 -41
  11. package/examples/test_tab.tsx +75 -75
  12. package/examples/tray_demo.tsx +81 -81
  13. package/lib/assert.ts +6 -6
  14. package/lib/cache-utils.ts +40 -40
  15. package/lib/dumpRects.ts +25 -25
  16. package/lib/fetch.ts +502 -502
  17. package/lib/http-common.ts +399 -399
  18. package/lib/http-server.ts +424 -424
  19. package/lib/polyfill.ts +171 -171
  20. package/lib/react-qw/components/index.ts +17 -17
  21. package/lib/react-qw/index.ts +90 -90
  22. package/lib/react-qw/jsx.d.ts +34 -34
  23. package/lib/react-qw/layout.ts +111 -111
  24. package/lib/react-qw/props.ts +36 -36
  25. package/lib/react-qw/reconciler.ts +373 -373
  26. package/lib/stream.ts +21 -21
  27. package/lib/text-codec.ts +171 -171
  28. package/lib/text-measure.ts +54 -54
  29. package/lib/url.ts +201 -201
  30. package/lib/vendor/web-streams/ponyfill.d.mts +829 -829
  31. package/lib/vendor/web-streams/ponyfill.mjs +8 -8
  32. package/lib/websocket.js +8 -0
  33. package/lib/websocket.ts +563 -555
  34. package/package.json +50 -44
  35. package/qwin-nowasm-x86.exe +0 -0
  36. package/qwin-nowasm.exe +0 -0
  37. package/qwin-x86.exe +0 -0
  38. package/qwin.exe +0 -0
  39. package/test/run.ts +96 -96
  40. package/test/test_basic.ts +9 -9
  41. package/test/test_basic_fetch.ts +33 -33
  42. package/test/test_brotli.ts +52 -52
  43. package/test/test_fetch_cache.ts +187 -187
  44. package/test/test_ffi.ts +174 -174
  45. package/test/test_frame_encoding.ts +132 -132
  46. package/test/test_helper.ts +80 -80
  47. package/test/test_http_import.ts +74 -74
  48. package/test/test_http_server.ts +136 -136
  49. package/test/test_import_dir.ts +5 -5
  50. package/test/test_ipv6.ts +129 -129
  51. package/test/test_meta_url.ts +4 -4
  52. package/test/test_mupdf_render.ts +74 -74
  53. package/test/test_mupdf_twice.ts +81 -81
  54. package/test/test_mupdf_wasm.ts +30 -30
  55. package/test/test_net_event.ts +55 -55
  56. package/test/test_net_fetch.ts +238 -238
  57. package/test/test_net_websocket.ts +164 -164
  58. package/test/test_polyfill.ts +159 -159
  59. package/test/test_url.ts +183 -183
  60. package/test/test_wasm_basic.ts +73 -73
  61. package/test/test_wasm_import_global.ts +45 -45
  62. package/test/test_wasm_sjlj.ts +125 -125
  63. package/test/test_wasm_types.ts +124 -124
  64. package/test/test_worker.ts +24 -24
  65. package/test/test_worker_fetch.ts +27 -27
  66. package/test/test_worker_net.ts +54 -54
  67. package/test/test_worker_wasm_concurrent.ts +45 -45
  68. package/test/worker_fetch.ts +13 -13
  69. package/test/worker_helper.ts +1 -1
  70. package/test/worker_http.ts +20 -20
  71. package/test/worker_import_lib.ts +13 -13
  72. package/test/worker_module.ts +17 -17
  73. package/test/worker_wasm_concurrent.ts +22 -22
  74. package/tsconfig.json +27 -27
  75. package/vendor/mupdf-wasm/mupdf-wasm.d.ts +571 -571
  76. package/vendor/mupdf-wasm/mupdf-wasm.js +2749 -2749
  77. package/vendor/mupdf-wasm/mupdf.d.ts +939 -939
  78. package/vendor/mupdf-wasm/mupdf.js +3317 -3317
@@ -1,125 +1,125 @@
1
- import { Tester, readWasmFile } from './test_helper.js'
2
-
3
- class EmscriptenEH {}
4
- class EmscriptenSjLj extends EmscriptenEH {}
5
-
6
- export const suite = {
7
- name: 'wasm-sjlj',
8
- run: (t: Tester) => {
9
- ;(globalThis as any).EmscriptenEH = EmscriptenEH
10
- ;(globalThis as any).EmscriptenSjLj = EmscriptenSjLj
11
-
12
- const buf = readWasmFile('./sjlj.wasm')
13
- if (!buf) { t.fail++; return }
14
-
15
- t.section('Module')
16
- var mod: WebAssembly.Module | null = null
17
- try {
18
- mod = new WebAssembly.Module(buf)
19
- t.check('Module created', true, mod instanceof WebAssembly.Module)
20
- } catch (e) { t.fail++; return }
21
-
22
- t.section('Instance with SjLj imports')
23
- var inst: WebAssembly.Instance | null = null
24
- var threwBit = 0
25
-
26
- function getWasmTableEntry(index: number): Function {
27
- const table = inst!.exports['__indirect_function_table'] as { get(index: number): Function }
28
- const fn = table.get(index)
29
- return fn as Function
30
- }
31
-
32
- function _setThrew(val: number, _v: number): void {
33
- if (threwBit === 0) {
34
- threwBit = val
35
- }
36
- }
37
-
38
- function invoke_ii(index: number, a1: number): number {
39
- try {
40
- return getWasmTableEntry(index)(a1)
41
- } catch (e) {
42
- if (!(e instanceof EmscriptenEH)) throw e
43
- _setThrew(1, 0)
44
- return 0
45
- }
46
- }
47
-
48
- try {
49
- inst = new WebAssembly.Instance(mod, {
50
- env: {
51
- throw_longjmp: () => { throw new EmscriptenSjLj },
52
- invoke_ii: invoke_ii,
53
- }
54
- })
55
- t.check('Instance created', true, inst instanceof WebAssembly.Instance)
56
- } catch (e) {
57
- t.fail++
58
- return
59
- }
60
-
61
- t.section('identity (no throw)')
62
- try {
63
- threwBit = 0
64
- const result = (inst.exports as { identity: (x: number) => number }).identity(42)
65
- t.check('identity(42) = 42', 42, result)
66
- } catch (e) { t.fail++ }
67
-
68
- t.section('invoke_ii with no-throw function')
69
- try {
70
- threwBit = 0
71
- const result = (inst.exports as { test_no_throw: () => number }).test_no_throw()
72
- t.check('test_no_throw() returns 10', 10, result)
73
- t.check('threwBit is 0', 0, threwBit)
74
- } catch (e) { t.fail++ }
75
-
76
- t.section('invoke_ii with throwing function')
77
- try {
78
- threwBit = 0
79
- const result = (inst.exports as { test_throw: () => number }).test_throw()
80
- t.check('test_throw() detects threwBit', true, result !== 0)
81
- t.check('threwBit is set', true, threwBit !== 0)
82
- } catch (e) { t.fail++ }
83
-
84
- t.section('nested invoke (invoke_ii calls invoke_ii)')
85
- try {
86
- threwBit = 0
87
- const result = (inst.exports as { test_nested_invoke: () => number }).test_nested_invoke()
88
- t.check('test_nested_invoke() detects threwBit', true, result !== 0)
89
- t.check('threwBit is set', true, threwBit !== 0)
90
- } catch (e) { t.fail++ }
91
-
92
- t.section('setjmp_test pattern')
93
- try {
94
- threwBit = 0
95
- const result = (inst.exports as { setjmp_test: (x: number) => number }).setjmp_test(0)
96
- t.check('setjmp_test detects throw', -1, result)
97
- t.check('threwBit is set', true, threwBit !== 0)
98
- } catch (e) { t.fail++ }
99
-
100
- t.section('setjmp/longjmp: a(x) normal path')
101
- try {
102
- threwBit = 0
103
- const result = (inst.exports as { a: (x: number) => number }).a(5)
104
- t.check('a(5) returns 10 (b returns x*2)', 10, result)
105
- t.check('threwBit is 0', 0, threwBit)
106
- } catch (e) { t.fail++ }
107
-
108
- t.section('setjmp/longjmp: a(x) longjmp path')
109
- try {
110
- threwBit = 0
111
- const result = (inst.exports as { a: (x: number) => number }).a(-1)
112
- t.check('a(-1) returns -1 (longjmp caught)', -1, result)
113
- t.check('threwBit is set', true, threwBit !== 0)
114
- } catch (e) { t.fail++ }
115
-
116
- t.section('EmscriptenSjLj instanceof check')
117
- try {
118
- const exc = new EmscriptenSjLj()
119
- t.check('instanceof EmscriptenEH', true, exc instanceof EmscriptenEH)
120
- t.check('instanceof EmscriptenSjLj', true, exc instanceof EmscriptenSjLj)
121
- const regularErr = new Error('test')
122
- t.check('Error not instanceof EmscriptenEH', false, regularErr instanceof EmscriptenEH)
123
- } catch (e) { t.fail++ }
124
- }
125
- }
1
+ import { Tester, readWasmFile } from './test_helper.js'
2
+
3
+ class EmscriptenEH {}
4
+ class EmscriptenSjLj extends EmscriptenEH {}
5
+
6
+ export const suite = {
7
+ name: 'wasm-sjlj',
8
+ run: (t: Tester) => {
9
+ ;(globalThis as any).EmscriptenEH = EmscriptenEH
10
+ ;(globalThis as any).EmscriptenSjLj = EmscriptenSjLj
11
+
12
+ const buf = readWasmFile('./sjlj.wasm')
13
+ if (!buf) { t.fail++; return }
14
+
15
+ t.section('Module')
16
+ var mod: WebAssembly.Module | null = null
17
+ try {
18
+ mod = new WebAssembly.Module(buf)
19
+ t.check('Module created', true, mod instanceof WebAssembly.Module)
20
+ } catch (e) { t.fail++; return }
21
+
22
+ t.section('Instance with SjLj imports')
23
+ var inst: WebAssembly.Instance | null = null
24
+ var threwBit = 0
25
+
26
+ function getWasmTableEntry(index: number): Function {
27
+ const table = inst!.exports['__indirect_function_table'] as { get(index: number): Function }
28
+ const fn = table.get(index)
29
+ return fn as Function
30
+ }
31
+
32
+ function _setThrew(val: number, _v: number): void {
33
+ if (threwBit === 0) {
34
+ threwBit = val
35
+ }
36
+ }
37
+
38
+ function invoke_ii(index: number, a1: number): number {
39
+ try {
40
+ return getWasmTableEntry(index)(a1)
41
+ } catch (e) {
42
+ if (!(e instanceof EmscriptenEH)) throw e
43
+ _setThrew(1, 0)
44
+ return 0
45
+ }
46
+ }
47
+
48
+ try {
49
+ inst = new WebAssembly.Instance(mod, {
50
+ env: {
51
+ throw_longjmp: () => { throw new EmscriptenSjLj },
52
+ invoke_ii: invoke_ii,
53
+ }
54
+ })
55
+ t.check('Instance created', true, inst instanceof WebAssembly.Instance)
56
+ } catch (e) {
57
+ t.fail++
58
+ return
59
+ }
60
+
61
+ t.section('identity (no throw)')
62
+ try {
63
+ threwBit = 0
64
+ const result = (inst.exports as { identity: (x: number) => number }).identity(42)
65
+ t.check('identity(42) = 42', 42, result)
66
+ } catch (e) { t.fail++ }
67
+
68
+ t.section('invoke_ii with no-throw function')
69
+ try {
70
+ threwBit = 0
71
+ const result = (inst.exports as { test_no_throw: () => number }).test_no_throw()
72
+ t.check('test_no_throw() returns 10', 10, result)
73
+ t.check('threwBit is 0', 0, threwBit)
74
+ } catch (e) { t.fail++ }
75
+
76
+ t.section('invoke_ii with throwing function')
77
+ try {
78
+ threwBit = 0
79
+ const result = (inst.exports as { test_throw: () => number }).test_throw()
80
+ t.check('test_throw() detects threwBit', true, result !== 0)
81
+ t.check('threwBit is set', true, threwBit !== 0)
82
+ } catch (e) { t.fail++ }
83
+
84
+ t.section('nested invoke (invoke_ii calls invoke_ii)')
85
+ try {
86
+ threwBit = 0
87
+ const result = (inst.exports as { test_nested_invoke: () => number }).test_nested_invoke()
88
+ t.check('test_nested_invoke() detects threwBit', true, result !== 0)
89
+ t.check('threwBit is set', true, threwBit !== 0)
90
+ } catch (e) { t.fail++ }
91
+
92
+ t.section('setjmp_test pattern')
93
+ try {
94
+ threwBit = 0
95
+ const result = (inst.exports as { setjmp_test: (x: number) => number }).setjmp_test(0)
96
+ t.check('setjmp_test detects throw', -1, result)
97
+ t.check('threwBit is set', true, threwBit !== 0)
98
+ } catch (e) { t.fail++ }
99
+
100
+ t.section('setjmp/longjmp: a(x) normal path')
101
+ try {
102
+ threwBit = 0
103
+ const result = (inst.exports as { a: (x: number) => number }).a(5)
104
+ t.check('a(5) returns 10 (b returns x*2)', 10, result)
105
+ t.check('threwBit is 0', 0, threwBit)
106
+ } catch (e) { t.fail++ }
107
+
108
+ t.section('setjmp/longjmp: a(x) longjmp path')
109
+ try {
110
+ threwBit = 0
111
+ const result = (inst.exports as { a: (x: number) => number }).a(-1)
112
+ t.check('a(-1) returns -1 (longjmp caught)', -1, result)
113
+ t.check('threwBit is set', true, threwBit !== 0)
114
+ } catch (e) { t.fail++ }
115
+
116
+ t.section('EmscriptenSjLj instanceof check')
117
+ try {
118
+ const exc = new EmscriptenSjLj()
119
+ t.check('instanceof EmscriptenEH', true, exc instanceof EmscriptenEH)
120
+ t.check('instanceof EmscriptenSjLj', true, exc instanceof EmscriptenSjLj)
121
+ const regularErr = new Error('test')
122
+ t.check('Error not instanceof EmscriptenEH', false, regularErr instanceof EmscriptenEH)
123
+ } catch (e) { t.fail++ }
124
+ }
125
+ }
@@ -1,124 +1,124 @@
1
- import { Tester, readWasmFile } from './test_helper.js'
2
-
3
- export const suite = {
4
- name: 'wasm-types',
5
- run: (t: Tester) => {
6
- const buf = readWasmFile('./types.wasm')
7
- if (!buf) { t.fail++; return }
8
- const m = new WebAssembly.Module(buf)
9
- const i = new WebAssembly.Instance<{
10
- add_i32: (a: number, b: number) => number
11
- add_i64: (a: number, b: number) => number
12
- factorial_i64: (n: number) => number
13
- add_f32: (a: number, b: number) => number
14
- add_f64: (a: number, b: number) => number
15
- sqrt_f64: (x: number) => number
16
- mixed_args: (a: number, b: number, c: number, d: number) => number
17
- write_memory: (offset: number, value: number) => void
18
- read_memory: (offset: number) => number
19
- read_mut_global: () => number
20
- memory: WebAssembly.Memory
21
- const_i32: WebAssembly.Global
22
- const_f64: WebAssembly.Global
23
- mutable_i32: WebAssembly.Global
24
- }>(m)
25
- const e = i.exports
26
-
27
- t.section('i32')
28
- t.check('add_i32(10, 20)', 30, e.add_i32(10, 20))
29
- t.check('add_i32(-5, 3)', -2, e.add_i32(-5, 3))
30
-
31
- t.section('i64')
32
- t.check('add_i64(100, 200)', 300, e.add_i64(100, 200))
33
- t.check('add_i64(10000000000, 20000000000)', 30000000000, e.add_i64(10000000000, 20000000000))
34
- t.check('add_i64(-10000000000, 5000000000)', -5000000000, e.add_i64(-10000000000, 5000000000))
35
- t.check('factorial_i64(5)', 120, e.factorial_i64(5))
36
- t.check('factorial_i64(10)', 3628800, e.factorial_i64(10))
37
-
38
- t.section('f32')
39
- t.check('add_f32(1.5, 2.5)', 4.0, e.add_f32(1.5, 2.5))
40
- t.check('add_f32(-1.0, 1.0)', 0.0, e.add_f32(-1.0, 1.0))
41
-
42
- t.section('f64')
43
- t.check('add_f64(3.14, 2.86)', 6.0, e.add_f64(3.14, 2.86))
44
- t.check('sqrt_f64(144.0)', 12.0, e.sqrt_f64(144.0))
45
-
46
- t.section('mixed')
47
- t.check('mixed_args(1, 2, 3.0, 4.0)', 10.0, e.mixed_args(1, 2, 3.0, 4.0))
48
-
49
- t.section('memory')
50
- e.write_memory(0, 12345678)
51
- t.check('write/read memory', 12345678, e.read_memory(0))
52
-
53
- t.section('JS-side TypedArray')
54
- t.check('Int32Array[0]', 12345678, new Int32Array(e.memory.buffer)[0])
55
- e.write_memory(4, 999)
56
- t.check('Int32Array[1] after write', 999, new Int32Array(e.memory.buffer)[1])
57
-
58
- t.section('exported globals')
59
- t.check('const_i32.value', 42, e.const_i32.value)
60
- t.check('const_f64.value', 3.14, e.const_f64.value)
61
- t.check('mutable_i32 is Global', true, e.mutable_i32 instanceof WebAssembly.Global)
62
- t.check('mutable_i32.value', 99, e.mutable_i32.value)
63
- e.mutable_i32.value = 500
64
- t.check('mutable_i32 after set from JS', 500, e.mutable_i32.value)
65
- t.check('mutable_i32 after set from WASM', 500, e.read_mut_global())
66
-
67
- t.section('Global constructor')
68
- var g: WebAssembly.Global
69
- g = new WebAssembly.Global({ value: 'i32', mutable: false }, 42)
70
- t.check('Global(i32)', 42, g.value)
71
- g = new WebAssembly.Global({ value: 'i64' }, 10000000000)
72
- t.check('Global(i64)', 10000000000, g.value)
73
- g = new WebAssembly.Global({ value: 'f64' }, 3.14)
74
- t.check('Global(f64)', 3.14, g.value)
75
- g = new WebAssembly.Global({ value: 'f32' }, 2.5)
76
- t.check('Global(f32)', 2.5, g.value)
77
-
78
- t.section('Global mutable set')
79
- g = new WebAssembly.Global({ value: 'i32', mutable: true }, 0)
80
- t.check('initial', 0, g.value)
81
- g.value = 77
82
- t.check('after set', 77, g.value)
83
-
84
- t.section('Global immutable set throws')
85
- g = new WebAssembly.Global({ value: 'i32', mutable: false }, 10)
86
- try {
87
- g.value = 999
88
- t.fail++
89
- } catch (e) {
90
- t.ok++
91
- }
92
-
93
- t.section('Global.valueOf')
94
- g = new WebAssembly.Global({ value: 'i32' }, 55)
95
- t.check('valueOf()', 55, g.valueOf())
96
-
97
- t.section('Memory constructor')
98
- var mem: WebAssembly.Memory
99
- mem = new WebAssembly.Memory({ initial: 1 })
100
- t.check('Memory created', true, mem instanceof WebAssembly.Memory)
101
- t.check('buffer byteLength', 65536, mem.buffer.byteLength)
102
- mem = new WebAssembly.Memory({ initial: 2, maximum: 4 })
103
- t.check('Memory(2,4) buffer', 131072, mem.buffer.byteLength)
104
- t.check('grow(1) returned', 2, mem.grow(1))
105
- t.check('after grow buffer', 196608, mem.buffer.byteLength)
106
-
107
- t.section('instance.exports.memory')
108
- t.check('memory is Memory', true, e.memory instanceof WebAssembly.Memory)
109
- t.check('memory.buffer.byteLength', 65536, e.memory.buffer.byteLength)
110
-
111
- t.section('standalone Memory + TypedArray')
112
- mem = new WebAssembly.Memory({ initial: 1 })
113
- var arr = new Int32Array(mem.buffer)
114
- arr[0] = 42; arr[1] = 7
115
- t.check('Int32Array[0]', 42, arr[0])
116
- t.check('Int32Array[1]', 7, arr[1])
117
-
118
- t.section('buffer identity')
119
- arr[2] = 100
120
- t.check('old view[2]', 100, arr[2])
121
- t.check('new view[2]', 100, new Int32Array(mem.buffer)[2])
122
- t.check('buffer is same object', true, mem.buffer === mem.buffer)
123
- }
124
- }
1
+ import { Tester, readWasmFile } from './test_helper.js'
2
+
3
+ export const suite = {
4
+ name: 'wasm-types',
5
+ run: (t: Tester) => {
6
+ const buf = readWasmFile('./types.wasm')
7
+ if (!buf) { t.fail++; return }
8
+ const m = new WebAssembly.Module(buf)
9
+ const i = new WebAssembly.Instance<{
10
+ add_i32: (a: number, b: number) => number
11
+ add_i64: (a: number, b: number) => number
12
+ factorial_i64: (n: number) => number
13
+ add_f32: (a: number, b: number) => number
14
+ add_f64: (a: number, b: number) => number
15
+ sqrt_f64: (x: number) => number
16
+ mixed_args: (a: number, b: number, c: number, d: number) => number
17
+ write_memory: (offset: number, value: number) => void
18
+ read_memory: (offset: number) => number
19
+ read_mut_global: () => number
20
+ memory: WebAssembly.Memory
21
+ const_i32: WebAssembly.Global
22
+ const_f64: WebAssembly.Global
23
+ mutable_i32: WebAssembly.Global
24
+ }>(m)
25
+ const e = i.exports
26
+
27
+ t.section('i32')
28
+ t.check('add_i32(10, 20)', 30, e.add_i32(10, 20))
29
+ t.check('add_i32(-5, 3)', -2, e.add_i32(-5, 3))
30
+
31
+ t.section('i64')
32
+ t.check('add_i64(100, 200)', 300, e.add_i64(100, 200))
33
+ t.check('add_i64(10000000000, 20000000000)', 30000000000, e.add_i64(10000000000, 20000000000))
34
+ t.check('add_i64(-10000000000, 5000000000)', -5000000000, e.add_i64(-10000000000, 5000000000))
35
+ t.check('factorial_i64(5)', 120, e.factorial_i64(5))
36
+ t.check('factorial_i64(10)', 3628800, e.factorial_i64(10))
37
+
38
+ t.section('f32')
39
+ t.check('add_f32(1.5, 2.5)', 4.0, e.add_f32(1.5, 2.5))
40
+ t.check('add_f32(-1.0, 1.0)', 0.0, e.add_f32(-1.0, 1.0))
41
+
42
+ t.section('f64')
43
+ t.check('add_f64(3.14, 2.86)', 6.0, e.add_f64(3.14, 2.86))
44
+ t.check('sqrt_f64(144.0)', 12.0, e.sqrt_f64(144.0))
45
+
46
+ t.section('mixed')
47
+ t.check('mixed_args(1, 2, 3.0, 4.0)', 10.0, e.mixed_args(1, 2, 3.0, 4.0))
48
+
49
+ t.section('memory')
50
+ e.write_memory(0, 12345678)
51
+ t.check('write/read memory', 12345678, e.read_memory(0))
52
+
53
+ t.section('JS-side TypedArray')
54
+ t.check('Int32Array[0]', 12345678, new Int32Array(e.memory.buffer)[0])
55
+ e.write_memory(4, 999)
56
+ t.check('Int32Array[1] after write', 999, new Int32Array(e.memory.buffer)[1])
57
+
58
+ t.section('exported globals')
59
+ t.check('const_i32.value', 42, e.const_i32.value)
60
+ t.check('const_f64.value', 3.14, e.const_f64.value)
61
+ t.check('mutable_i32 is Global', true, e.mutable_i32 instanceof WebAssembly.Global)
62
+ t.check('mutable_i32.value', 99, e.mutable_i32.value)
63
+ e.mutable_i32.value = 500
64
+ t.check('mutable_i32 after set from JS', 500, e.mutable_i32.value)
65
+ t.check('mutable_i32 after set from WASM', 500, e.read_mut_global())
66
+
67
+ t.section('Global constructor')
68
+ var g: WebAssembly.Global
69
+ g = new WebAssembly.Global({ value: 'i32', mutable: false }, 42)
70
+ t.check('Global(i32)', 42, g.value)
71
+ g = new WebAssembly.Global({ value: 'i64' }, 10000000000)
72
+ t.check('Global(i64)', 10000000000, g.value)
73
+ g = new WebAssembly.Global({ value: 'f64' }, 3.14)
74
+ t.check('Global(f64)', 3.14, g.value)
75
+ g = new WebAssembly.Global({ value: 'f32' }, 2.5)
76
+ t.check('Global(f32)', 2.5, g.value)
77
+
78
+ t.section('Global mutable set')
79
+ g = new WebAssembly.Global({ value: 'i32', mutable: true }, 0)
80
+ t.check('initial', 0, g.value)
81
+ g.value = 77
82
+ t.check('after set', 77, g.value)
83
+
84
+ t.section('Global immutable set throws')
85
+ g = new WebAssembly.Global({ value: 'i32', mutable: false }, 10)
86
+ try {
87
+ g.value = 999
88
+ t.fail++
89
+ } catch (e) {
90
+ t.ok++
91
+ }
92
+
93
+ t.section('Global.valueOf')
94
+ g = new WebAssembly.Global({ value: 'i32' }, 55)
95
+ t.check('valueOf()', 55, g.valueOf())
96
+
97
+ t.section('Memory constructor')
98
+ var mem: WebAssembly.Memory
99
+ mem = new WebAssembly.Memory({ initial: 1 })
100
+ t.check('Memory created', true, mem instanceof WebAssembly.Memory)
101
+ t.check('buffer byteLength', 65536, mem.buffer.byteLength)
102
+ mem = new WebAssembly.Memory({ initial: 2, maximum: 4 })
103
+ t.check('Memory(2,4) buffer', 131072, mem.buffer.byteLength)
104
+ t.check('grow(1) returned', 2, mem.grow(1))
105
+ t.check('after grow buffer', 196608, mem.buffer.byteLength)
106
+
107
+ t.section('instance.exports.memory')
108
+ t.check('memory is Memory', true, e.memory instanceof WebAssembly.Memory)
109
+ t.check('memory.buffer.byteLength', 65536, e.memory.buffer.byteLength)
110
+
111
+ t.section('standalone Memory + TypedArray')
112
+ mem = new WebAssembly.Memory({ initial: 1 })
113
+ var arr = new Int32Array(mem.buffer)
114
+ arr[0] = 42; arr[1] = 7
115
+ t.check('Int32Array[0]', 42, arr[0])
116
+ t.check('Int32Array[1]', 7, arr[1])
117
+
118
+ t.section('buffer identity')
119
+ arr[2] = 100
120
+ t.check('old view[2]', 100, arr[2])
121
+ t.check('new view[2]', 100, new Int32Array(mem.buffer)[2])
122
+ t.check('buffer is same object', true, mem.buffer === mem.buffer)
123
+ }
124
+ }
@@ -1,24 +1,24 @@
1
- import { Tester } from './test_helper.js'
2
- import * as os from 'os'
3
-
4
- export const suite = {
5
- name: 'worker',
6
- run: async (t: Tester) => {
7
- t.section('relative-import')
8
- let worker: any
9
- const { data: result } = await new Promise<any>((resolve, reject) => {
10
- worker = new os.Worker('./worker_module.js')
11
- const timer = os.setTimeout(() => reject(new Error('worker timeout')), 5000)
12
- worker.onmessage = (e: any) => {
13
- os.clearTimeout(timer)
14
- resolve({ data: e.data })
15
- }
16
- worker.postMessage({ type: 'start' })
17
- })
18
- t.check('message type', 'result', result.type)
19
- t.check('imported value', 42, result.value)
20
-
21
- worker.postMessage({ type: 'done' })
22
- worker.onmessage = null
23
- }
24
- }
1
+ import { Tester } from './test_helper.js'
2
+ import * as os from 'os'
3
+
4
+ export const suite = {
5
+ name: 'worker',
6
+ run: async (t: Tester) => {
7
+ t.section('relative-import')
8
+ let worker: any
9
+ const { data: result } = await new Promise<any>((resolve, reject) => {
10
+ worker = new os.Worker('./worker_module.js')
11
+ const timer = os.setTimeout(() => reject(new Error('worker timeout')), 5000)
12
+ worker.onmessage = (e: any) => {
13
+ os.clearTimeout(timer)
14
+ resolve({ data: e.data })
15
+ }
16
+ worker.postMessage({ type: 'start' })
17
+ })
18
+ t.check('message type', 'result', result.type)
19
+ t.check('imported value', 42, result.value)
20
+
21
+ worker.postMessage({ type: 'done' })
22
+ worker.onmessage = null
23
+ }
24
+ }
@@ -1,27 +1,27 @@
1
- import { Tester } from './test_helper.js'
2
- import * as os from 'os'
3
-
4
- export const suite = {
5
- name: 'worker-fetch',
6
- run: async (t: Tester) => {
7
- t.section('fetch-in-worker')
8
- let worker: any
9
- const { data: result } = await new Promise<any>((resolve, reject) => {
10
- worker = new os.Worker('./worker_fetch.js')
11
- const timer = os.setTimeout(() => reject(new Error('timeout')), 15000)
12
- worker.onmessage = (e: any) => {
13
- os.clearTimeout(timer)
14
- resolve({ worker, data: e.data })
15
- }
16
- worker.postMessage({ type: 'start' })
17
- })
18
- if (result.type === 'result') {
19
- t.checkTrue('fetch ok', result.ok)
20
- t.check('status', result.status, 200)
21
- } else {
22
- t.checkTrue('worker fetch failed: ' + result.msg, false)
23
- }
24
- worker.postMessage({ type: 'done' })
25
- worker.onmessage = null
26
- }
27
- }
1
+ import { Tester } from './test_helper.js'
2
+ import * as os from 'os'
3
+
4
+ export const suite = {
5
+ name: 'worker-fetch',
6
+ run: async (t: Tester) => {
7
+ t.section('fetch-in-worker')
8
+ let worker: any
9
+ const { data: result } = await new Promise<any>((resolve, reject) => {
10
+ worker = new os.Worker('./worker_fetch.js')
11
+ const timer = os.setTimeout(() => reject(new Error('timeout')), 15000)
12
+ worker.onmessage = (e: any) => {
13
+ os.clearTimeout(timer)
14
+ resolve({ worker, data: e.data })
15
+ }
16
+ worker.postMessage({ type: 'start' })
17
+ })
18
+ if (result.type === 'result') {
19
+ t.checkTrue('fetch ok', result.ok)
20
+ t.check('status', result.status, 200)
21
+ } else {
22
+ t.checkTrue('worker fetch failed: ' + result.msg, false)
23
+ }
24
+ worker.postMessage({ type: 'done' })
25
+ worker.onmessage = null
26
+ }
27
+ }