Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// 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:
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');