// META: title=validation tests for WebNN API clamp operation // META: global=window // META: variant=?cpu // META: variant=?gpu // META: variant=?npu // META: script=../resources/utils_validation.js 'use strict'; validateInputFromAnotherBuilder('clamp'); const label = '123_clamp'; validateSingleInputOperation('clamp', label); promise_test(async t => { const builder = new MLGraphBuilder(context); const options = {minValue: 1.0, maxValue: 3.0}; const input = builder.input('input', {dataType: 'float32', shape: [1, 2, 3]}); const output = builder.clamp(input, options); assert_equals(output.dataType, 'float32'); assert_array_equals(output.shape, [1, 2, 3]); }, '[clamp] Build with options'); promise_test(async t => { const builder = new MLGraphBuilder(context); const options = {minValue: 0, maxValue: 0}; const input = builder.input('input', {dataType: 'float32', shape: [1, 2, 3, 4]}); const output = builder.clamp(input, options); assert_equals(output.dataType, 'float32'); assert_array_equals(output.shape, [1, 2, 3, 4]); }, '[clamp] Build with options.minValue == options.maxValue'); promise_test(async t => { const builder = new MLGraphBuilder(context); const options = { minValue: 3.0, maxValue: 1.0, label: label, }; const input = builder.input('input', {dataType: 'float32', shape: [1, 2, 3]}); const regrexp = new RegExp('\\[' + label + '\\]'); assert_throws_with_label(() => builder.clamp(input, options), regrexp); }, '[clamp] Throw if options.minValue > options.maxValue'); // To be removed once infinite `minValue` is allowed. Tracked in // https://github.com/webmachinelearning/webnn/pull/647. promise_test(async t => { const builder = new MLGraphBuilder(context); const options = { minValue: -Infinity, label: label, }; const input = builder.input('input', {dataType: 'float32', shape: []}); assert_throws_js(TypeError, () => builder.clamp(input, options)); }, '[clamp] Throw if options.minValue is -Infinity');