// META: title=test graph inputs/outputs with unprintable names // META: global=window,worker // META: variant=?cpu // META: variant=?gpu // META: variant=?npu // META: script=../resources/utils.js // META: timeout=long 'use strict'; let mlContext; // Skip tests if WebNN is unimplemented. promise_setup(async () => { assert_implements(navigator.ml, 'missing navigator.ml'); mlContext = await navigator.ml.createContext(contextOptions); }); promise_test(async () => { const operandDescriptor = { dataType: 'float32', shape: [1], }; // Construct a simple graph: A = B * 2. const builder = new MLGraphBuilder(mlContext); const inputOperand = builder.input('input\x00tensor', operandDescriptor); const constantOperand = builder.constant(operandDescriptor, Float32Array.from([2])); const outputOperand = builder.mul(inputOperand, constantOperand); const mlGraph = await builder.build({'output\x00tensor': outputOperand}); const [inputTensor, outputTensor] = await Promise.all([ mlContext.createTensor({dataType: 'float32', shape: [1], writable: true}), mlContext.createTensor({dataType: 'float32', shape: [1], readable: true}) ]); mlContext.writeTensor(inputTensor, Float32Array.from([1])); mlContext.dispatch( mlGraph, {'input\x00tensor': inputTensor}, {'output\x00tensor': outputTensor}); const output = await mlContext.readTensor(outputTensor); assert_equals(new Float32Array(output)[0], 2); }, 'tensor names can include null bytes');