mirror of
https://github.com/gpujs/gpu.js.git
synced 2025-12-08 20:35:56 +00:00
feat: Add cat demo feat: Type check even on CPU fix: ArrayTexture support as arguments for internal arrays fix: Typo from "Interger" to "Integer" feat: Bump and build version number
193 lines
5.3 KiB
JavaScript
193 lines
5.3 KiB
JavaScript
const { assert, skip, test, module: describe, only } = require('qunit');
|
|
const { GPU, FunctionBuilder, WebGLFunctionNode, WebGL2FunctionNode, CPUFunctionNode } = require('../../src');
|
|
|
|
describe('issue #31 redeclare');
|
|
|
|
// nested redeclare
|
|
function nestedVarRedeclareFunction() {
|
|
let result = 0;
|
|
|
|
// outer loop limit is effectively skipped in CPU
|
|
for(let i=0; i<10; ++i) {
|
|
// inner loop limit should be higher, to avoid infinite loops
|
|
for(i=0; i<20; ++i) {
|
|
result += 1;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function nestedVarRedeclareTest(mode) {
|
|
const gpu = new GPU({ mode });
|
|
const f = gpu.createKernel(nestedVarRedeclareFunction, {
|
|
output: [1],
|
|
});
|
|
assert.throws(() => {
|
|
f();
|
|
});
|
|
gpu.destroy();
|
|
}
|
|
|
|
test('Issue #31 - nestedVarRedeclare auto', () => {
|
|
nestedVarRedeclareTest(null);
|
|
});
|
|
|
|
test('Issue #31 - nestedVarRedeclare gpu', () => {
|
|
nestedVarRedeclareTest('gpu');
|
|
});
|
|
|
|
(GPU.isWebGLSupported ? test : skip)('Issue #31 - nestedVarRedeclare webgl', () => {
|
|
nestedVarRedeclareTest('webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported ? test : skip)('Issue #31 - nestedVarRedeclare webgl2', () => {
|
|
nestedVarRedeclareTest('webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported ? test : skip)('Issue #31 - nestedVarRedeclare headlessgl', () => {
|
|
nestedVarRedeclareTest('headlessgl');
|
|
});
|
|
|
|
test('Issue #31 - nestedVarRedeclare cpu', () => {
|
|
nestedVarRedeclareTest('cpu');
|
|
});
|
|
|
|
test('Issue #31 - nestedVarRedeclare : AST handling webgl', () => {
|
|
const builder = new FunctionBuilder({
|
|
functionNodes: [new WebGLFunctionNode(nestedVarRedeclareFunction.toString(), { output: [1] })],
|
|
output: [1]
|
|
});
|
|
assert.throws(() => {
|
|
builder.getStringFromFunctionNames(['nestedVarRedeclareFunction']);
|
|
});
|
|
});
|
|
|
|
test('Issue #31 - nestedVarRedeclare : AST handling webgl2', () => {
|
|
const builder = new FunctionBuilder({
|
|
functionNodes: [new WebGL2FunctionNode(nestedVarRedeclareFunction.toString(), { output: [1] })],
|
|
output: [1]
|
|
});
|
|
assert.throws(() => {
|
|
builder.getStringFromFunctionNames(['nestedVarRedeclareFunction']);
|
|
});
|
|
});
|
|
|
|
test('Issue #31 - nestedVarRedeclare : AST handling cpu', () => {
|
|
const builder = new FunctionBuilder({
|
|
functionNodes: [new CPUFunctionNode(nestedVarRedeclareFunction.toString(), { output: [1] })],
|
|
output: [1]
|
|
});
|
|
assert.throws(() => {
|
|
builder.getStringFromFunctionNames(['nestedVarRedeclareFunction']);
|
|
});
|
|
});
|
|
|
|
|
|
describe('issue #31 nested declare');
|
|
// nested declare
|
|
function nestedVarDeclareFunction() {
|
|
let result = 0.0;
|
|
|
|
// outer loop limit is effectively skipped in CPU
|
|
for(let i=0; i<10; ++i) {
|
|
// inner loop limit should be higher, to avoid infinite loops
|
|
for(let i=0; i<20; ++i) {
|
|
result += 1;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function nestedVarDeclareTest(mode ) {
|
|
const gpu = new GPU({ mode });
|
|
const f = gpu.createKernel(nestedVarDeclareFunction, {
|
|
output : [1]
|
|
});
|
|
|
|
assert.equal(f(), 200, 'basic return function test');
|
|
gpu.destroy();
|
|
}
|
|
|
|
test('Issue #31 - nestedVarDeclare auto', () => {
|
|
nestedVarDeclareTest(null);
|
|
});
|
|
|
|
test('Issue #31 - nestedVarDeclare gpu', () => {
|
|
nestedVarDeclareTest('gpu');
|
|
});
|
|
|
|
(GPU.isWebGLSupported ? test : skip)('Issue #31 - nestedVarDeclare webgl', () => {
|
|
nestedVarDeclareTest('webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported ? test : skip)('Issue #31 - nestedVarDeclare webgl2', () => {
|
|
nestedVarDeclareTest('webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported ? test : skip)('Issue #31 - nestedVarDeclare headlessgl', () => {
|
|
nestedVarDeclareTest('headlessgl');
|
|
});
|
|
|
|
test('Issue #31 - nestedVarDeclare cpu', () => {
|
|
nestedVarDeclareTest('cpu');
|
|
});
|
|
|
|
test('Issue #31 - nestedVarDeclare : AST handling webgl', () => {
|
|
const builder = new FunctionBuilder({
|
|
functionNodes: [new WebGLFunctionNode(nestedVarDeclareFunction.toString(), { output: [1] })]
|
|
});
|
|
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['nestedVarDeclareFunction']),
|
|
'float nestedVarDeclareFunction() {'
|
|
+ '\nfloat user_result=0.0;'
|
|
+ '\nfor (int user_i=0;(user_i<10);++user_i){'
|
|
+ '\nfor (int user_i=0;(user_i<20);++user_i){' //<-- Note: don't do this in real life!
|
|
+ '\nuser_result+=1.0;}'
|
|
+ '\n}'
|
|
+ '\n'
|
|
+ '\nreturn user_result;'
|
|
+ '\n}'
|
|
);
|
|
});
|
|
|
|
test('Issue #31 - nestedVarDeclare : AST handling webgl2', () => {
|
|
const builder = new FunctionBuilder({
|
|
functionNodes: [new WebGL2FunctionNode(nestedVarDeclareFunction.toString(), { output: [1] })]
|
|
});
|
|
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['nestedVarDeclareFunction']),
|
|
'float nestedVarDeclareFunction() {'
|
|
+ '\nfloat user_result=0.0;'
|
|
+ '\nfor (int user_i=0;(user_i<10);++user_i){'
|
|
+ '\nfor (int user_i=0;(user_i<20);++user_i){' //<-- Note: don't do this in real life!
|
|
+ '\nuser_result+=1.0;}'
|
|
+ '\n}'
|
|
+ '\n'
|
|
+ '\nreturn user_result;'
|
|
+ '\n}'
|
|
);
|
|
});
|
|
|
|
test('Issue #31 - nestedVarDeclare : AST handling cpu', () => {
|
|
const builder = new FunctionBuilder({
|
|
functionNodes: [new CPUFunctionNode(nestedVarDeclareFunction.toString(), { output: [1] })]
|
|
});
|
|
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['nestedVarDeclareFunction']),
|
|
'function nestedVarDeclareFunction() {'
|
|
+ '\nlet user_result=0;'
|
|
+ '\nfor (let user_i=0;(user_i<10);++user_i){'
|
|
+ '\nfor (let user_i=0;(user_i<20);++user_i){'
|
|
+ '\nuser_result+=1;}'
|
|
+ '\n}'
|
|
+ '\n'
|
|
+ '\nreturn user_result;'
|
|
+ '\n}'
|
|
);
|
|
});
|