| // META: title=validation tests for WebNN API input interface |
| // META: global=window,worker |
| // META: variant=?cpu |
| // META: variant=?gpu |
| // META: variant=?npu |
| // META: script=../resources/utils_validation.js |
| |
| 'use strict'; |
| |
| // Tests for input(name, descriptor) |
| const tests = [ |
| { |
| testName: '[input] Test building a 0-D scalar input with empty shape', |
| name: 'input', |
| descriptor: {dataType: 'float32', shape: []}, |
| output: {dataType: 'float32', shape: []}, |
| }, |
| { |
| testName: '[input] Test building a 1-D input with int64 data type', |
| name: 'input', |
| descriptor: {dataType: 'int64', shape: [3]}, |
| output: {dataType: 'int64', shape: [3]}, |
| }, |
| { |
| testName: '[input] Test building a 2-D input without errors', |
| name: 'input', |
| descriptor: {dataType: 'float32', shape: [3, 4]}, |
| output: {dataType: 'float32', shape: [3, 4]}, |
| }, |
| { |
| testName: '[input] Throw if the name is empty', |
| name: '', |
| descriptor: {dataType: 'float32', shape: [3, 4]} |
| }, |
| { |
| testName: '[input] Throw if a dimension size is 0', |
| name: 'input', |
| descriptor: {dataType: 'float32', shape: [3, 0]} |
| }, |
| { |
| testName: |
| '[input] Throw if the value of any element in dimensions is outside the \'unsigned long\' value range', |
| name: 'input', |
| descriptor: {dataType: 'float32', shape: [kMaxUnsignedLong + 1]} |
| }, |
| { |
| testName: '[input] Throw if the number of elements is too large', |
| name: 'input', |
| descriptor: { |
| dataType: 'float32', |
| shape: [kMaxUnsignedLong, kMaxUnsignedLong, kMaxUnsignedLong] |
| } |
| } |
| ]; |
| |
| tests.forEach( |
| test => promise_test(async t => { |
| const builder = new MLGraphBuilder(context); |
| if (test.output) { |
| const inputOperand = builder.input(test.name, test.descriptor); |
| assert_equals(inputOperand.dataType, test.output.dataType); |
| assert_array_equals(inputOperand.shape, test.output.shape); |
| } else { |
| assert_throws_js( |
| TypeError, () => builder.input(test.name, test.descriptor)); |
| } |
| }, test.testName)); |
| |
| promise_test(async t => { |
| const builder = new MLGraphBuilder(context); |
| |
| const inputDescriptor = { |
| dataType: 'float32', |
| shape: [(context.opSupportLimits().maxTensorByteLength + 1) / 4]}; |
| |
| assert_throws_js( |
| TypeError, () => builder.input('input', inputDescriptor)); |
| }, '[input] throw if the output tensor byte length exceeds limit'); |