summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webnn/validation_tests/concat.https.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webnn/validation_tests/concat.https.any.js')
-rw-r--r--testing/web-platform/tests/webnn/validation_tests/concat.https.any.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webnn/validation_tests/concat.https.any.js b/testing/web-platform/tests/webnn/validation_tests/concat.https.any.js
new file mode 100644
index 0000000000..b61f2d2bc7
--- /dev/null
+++ b/testing/web-platform/tests/webnn/validation_tests/concat.https.any.js
@@ -0,0 +1,106 @@
+// META: title=validation tests for WebNN API concat operation
+// META: global=window,dedicatedworker
+// META: script=../resources/utils_validation.js
+
+'use strict';
+
+const tests = [
+ {
+ name: '[concat] Test building Concat with one input.',
+ inputs: [{dataType: 'float32', dimensions: [4,4,3]}],
+ axis: 2,
+ output: {dataType: 'float32', dimensions: [4,4,3]}
+ },
+ {
+ name: '[concat] Test building Concat with two inputs',
+ inputs: [{dataType: 'float32', dimensions: [3,1,5]},
+ {dataType: 'float32', dimensions: [3,2,5]}],
+ axis: 1,
+ output: {dataType: 'float32', dimensions: [3,3,5]}
+ },
+ {
+ name: '[concat] Test building Concat with three inputs',
+ inputs: [{dataType: 'float32', dimensions: [3,5,1]},
+ {dataType: 'float32', dimensions: [3,5,2]},
+ {dataType: 'float32', dimensions: [3,5,3]}],
+ axis: 2,
+ output: {dataType: 'float32', dimensions: [3,5,6]}
+ },
+ {
+ name: '[concat] Test building Concat with two 1D inputs.',
+ inputs: [{dataType: 'float32', dimensions: [1]},
+ {dataType: 'float32', dimensions: [1]}],
+ axis: 0,
+ output: {dataType: 'float32', dimensions: [2]}
+ },
+ {
+ name: '[concat] Throw if the inputs are empty.',
+ axis: 0,
+ },
+ {
+ name: '[concat] Throw if the argument types are inconsistent.',
+ inputs: [{dataType: 'float32', dimensions: [1,1]},
+ {dataType: 'int32', dimensions: [1,1]}],
+ axis: 0,
+ },
+ {
+ name: '[concat] Throw if the inputs have different ranks.',
+ inputs: [{dataType: 'float32', dimensions: [1,1]},
+ {dataType: 'float32', dimensions: [1,1,1]}],
+ axis: 0,
+ },
+ {
+ name: '[concat] Throw if the axis is equal to or greater than the size of ranks',
+ inputs: [{dataType: 'float32', dimensions: [1,1]},
+ {dataType: 'float32', dimensions: [1,1]}],
+ axis: 2,
+ },
+ {
+ name: '[concat] Throw if concat with two 0-D scalars.',
+ inputs: [{dataType: 'float32', dimensions: []},
+ {dataType: 'float32', dimensions: []}],
+ axis: 0,
+ },
+ {
+ name: '[concat] Throw if the inputs have other axes with different sizes except on the axis.',
+ inputs: [{dataType: 'float32', dimensions: [1,1,1]},
+ {dataType: 'float32', dimensions: [1,2,3]}],
+ axis: 1,
+ },
+
+];
+
+tests.forEach(test =>
+ promise_test(async t => {
+ let inputs = [];
+ if (test.inputs) {
+ for (let i = 0; i < test.inputs.length; ++i) {
+ inputs[i] = builder.input(
+ `inputs[${i}]`,
+ { dataType: test.inputs[i].dataType, dimensions: test.inputs[i].dimensions }
+ );
+ }
+ }
+ if (test.output) {
+ const output = builder.concat(inputs, test.axis);
+ assert_equals(output.dataType(), test.output.dataType);
+ assert_array_equals(output.shape(), test.output.dimensions);
+ } else {
+ assert_throws_js(TypeError, () => builder.concat(inputs, test.axis));
+ }
+ }, test.name)
+ );
+
+multi_builder_test(async (t, builder, otherBuilder) => {
+ const operandDescriptor = {dataType: 'float32', dimensions: [2, 2]};
+
+ const inputFromOtherBuilder = otherBuilder.input('input', operandDescriptor);
+
+ const input1 = builder.input('input', operandDescriptor);
+ const input2 = builder.input('input', operandDescriptor);
+ const input3 = builder.input('input', operandDescriptor);
+
+ assert_throws_js(
+ TypeError,
+ () => builder.concat([input1, input2, inputFromOtherBuilder, input3]));
+}, '[concat] throw if any input is from another builder');