const { assert, skip, test, module: describe, only } = require('qunit'); const { GPU, WebGLFunctionNode, WebGL2FunctionNode } = require('../../src'); describe('internal: loop max'); test('loop max output webgl', () => { const functionNode = new WebGLFunctionNode((function(a, b) { let sum = 0; for (let i = 0; i < a; i++) { sum += b[this.thread.x][i]; } return sum; }).toString(), { isRootKernel: true, name: 'kernel', output: [1], argumentTypes: ['Number', 'Array'], lookupFunctionArgumentBitRatio: () => 4, }); assert.equal( functionNode.toString(), 'void kernel() {' + '\nfloat user_sum=0.0;' + '\nint user_i=0;' + '\nfor (int safeI=0;safeI { const functionNode = new WebGL2FunctionNode((function(a, b) { let sum = 0; for (let i = 0; i < a; i++) { sum += b[this.thread.x][i]; } return sum; }).toString(), { isRootKernel: true, name: 'kernel', output: [1], argumentTypes: ['Number', 'Array'], lookupFunctionArgumentBitRatio: () => 4, }); assert.equal( functionNode.toString(), 'void kernel() {' + '\nfloat user_sum=0.0;' + '\nint user_i=0;' + '\nfor (int safeI=0;safeI { const gpu = new GPU({mode: 'webgl'}); const add = gpu.createKernel(function(a, b) { let sum = 0; for (let i = 0; i < a; i++) { sum += b[this.thread.x][i]; } return sum; }).setOutput([1]); const output = add(1, [[1]]); assert.equal( output[0], 1 ); gpu.destroy(); }); (GPU.isWebGL2Supported ? test : skip)('loop max webgl2', () => { const gpu = new GPU({mode: 'webgl2'}); const add = gpu.createKernel(function(a, b) { let sum = 0; for (let i = 0; i < a; i++) { sum += b[this.thread.x][i]; } return sum; }).setOutput([1]); const output = add(1, [[1]]); assert.equal( output[0], 1 ); gpu.destroy(); }); (GPU.isHeadlessGLSupported ? test : skip)('loop max headlessgl', () => { const gpu = new GPU({ mode: 'headlessgl' }); const add = gpu.createKernel(function(a, b) { let sum = 0; for (let i = 0; i < a; i++) { sum += b[this.thread.x][i]; } return sum; }) .setOutput([1]); const output = add(1, [[1]]); assert.equal( output[0], 1 ); gpu.destroy(); });