text: const { assert, skip, test, module: describe, only } = require('qunit');
  const { GPU } = require('../../../../../../src');
  
  describe('feature: to-string single precision arguments Array(3)');
  
  function testArgument(mode, context, canvas) {
    const gpu = new GPU({ mode });
    const originalKernel = gpu.createKernel(function(a) {
      return a;
    }, {
      canvas,
      context,
      output: [1],
      precision: 'single',
      argumentTypes: { a: 'Array(3)' }
    });
  
    const a = new Float32Array([1, 2, 3]);
    const expected = [new Float32Array([1,2,3])];
    const originalResult = originalKernel(a);
    assert.deepEqual(originalResult, expected);
    const kernelString = originalKernel.toString(a);
    const newResult = new Function('return ' + kernelString)()({ context })(a);
    assert.deepEqual(newResult, expected);
    gpu.destroy();
  }
  
  (GPU.isSinglePrecisionSupported && GPU.isWebGLSupported ? test : skip)('webgl', () => {
    const canvas = document.createElement('canvas');
    const context = canvas.getContext('webgl');
    testArgument('webgl', context, canvas);
  });
  
  (GPU.isSinglePrecisionSupported && GPU.isWebGL2Supported ? test : skip)('webgl2', () => {
    const canvas = document.createElement('canvas');
    const context = canvas.getContext('webgl2');
    testArgument('webgl2', context, canvas);
  });
  
  (GPU.isSinglePrecisionSupported && GPU.isHeadlessGLSupported ? test : skip)('headlessgl', () => {
    testArgument('headlessgl', require('gl')(1, 1), null);
  });
  
  test('cpu', () => {
    testArgument('cpu');
  });
  