summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js')
-rw-r--r--testing/web-platform/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js b/testing/web-platform/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js
new file mode 100644
index 0000000000..42b123a97e
--- /dev/null
+++ b/testing/web-platform/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js
@@ -0,0 +1,50 @@
+// META: title=ensure WebNN MLContext.compute() rejecting detached buffers
+// META: global=window,dedicatedworker
+// META: script=../resources/utils_validation.js
+
+// These tests are used to reproduce the Chromium issue:
+// https://issues.chromium.org/issues/332002364
+promise_test(async t => {
+ const a = builder.input('a', {dataType: 'float32', dimensions: [2]});
+ const b = builder.input('b', {dataType: 'float32', dimensions: [2]});
+ const c = builder.add(a, b);
+ const graph = await builder.build({c});
+ const arraybuffer = new ArrayBuffer(100);
+ const aBuffer = new Float32Array(arraybuffer, 0, 2);
+ const bBuffer = new Float32Array(arraybuffer, 8, 2);
+ const cBuffer = new Float32Array(2);
+ const promise = context.compute(graph, {'a': aBuffer, 'b': bBuffer}, {'c': cBuffer});
+ promise_rejects_js(t, TypeError, promise);
+ }, 'Throw if two input ArrayBufferViews sharing the same ArrayBuffer');
+
+promise_test(async t => {
+ const a = builder.input('a', {dataType: 'float32', dimensions: [2]});
+ const [b, c] = builder.split(a, 2);
+ const graph = await builder.build({b, c});
+ const aBuffer = new Float32Array(2);
+ const arraybuffer = new ArrayBuffer(100);
+ const bBuffer = new Float32Array(arraybuffer, 0, 1);
+ const cBuffer = new Float32Array(arraybuffer, 4, 1);
+ const promise = context.compute(graph, {'a': aBuffer}, {'b': bBuffer, 'c': cBuffer});
+ promise_rejects_js(t, TypeError, promise);
+}, 'Throw if two output ArrayBufferViews sharing the same ArrayBuffer');
+
+promise_test(async t => {
+ const a = builder.input('a', {dataType: 'float32', dimensions: [2]});
+ const b = builder.relu(a);
+ const graph = await builder.build({b});
+ const arraybuffer = new ArrayBuffer(100);
+ const aBuffer = new Float32Array(arraybuffer, 0, 2);
+ const bBuffer = new Float32Array(arraybuffer, 8, 2);
+ const promise = context.compute(graph, {'a': aBuffer}, {'b': bBuffer});
+ promise_rejects_js(t, TypeError, promise);
+}, 'Throw if input and output ArrayBufferViews sharing the same ArrayBuffer');
+
+promise_test(async t => {
+ const a = builder.input('a', {dataType: 'float32', dimensions: [2]});
+ const b = builder.relu(a);
+ const graph = await builder.build({b});
+ const buffer = new Float32Array(2);
+ const promise = context.compute(graph, {'a': buffer}, {'b': buffer});
+ promise_rejects_js(t, TypeError, promise);
+}, 'Throw if input and output are the same ArrayBufferView');