mirror of
https://github.com/gpujs/gpu.js.git
synced 2026-01-18 16:04:10 +00:00
140 lines
4.1 KiB
JavaScript
140 lines
4.1 KiB
JavaScript
const { assert, test, module: describe, only } = require('qunit');
|
|
const { WebGLFunctionNode } = require(process.cwd() + '/src');
|
|
|
|
describe('WebGLFunctionNode.getVariableSignature()');
|
|
|
|
function run(value, settings) {
|
|
const node = new WebGLFunctionNode(`function fn() {
|
|
${ value };
|
|
}`, Object.assign({ output: [1, 2, 3] }, settings));
|
|
|
|
const ast = node.getJsAST();
|
|
assert.equal(ast.type, 'FunctionExpression');
|
|
assert.equal(ast.body.type, 'BlockStatement');
|
|
assert.equal(ast.body.body[0].type, 'VariableDeclaration');
|
|
return node.astVariableDeclaration(ast.body.body[0], []).join('');
|
|
}
|
|
|
|
test('value float', () => {
|
|
assert.equal(run('const value = it', {
|
|
argumentNames: ['it'],
|
|
argumentTypes: ['Number']
|
|
}), 'float user_value=user_it;');
|
|
});
|
|
|
|
test('value int', () => {
|
|
assert.equal(run('const value = it', {
|
|
argumentNames: ['it'],
|
|
argumentTypes: ['Integer']
|
|
}), 'int user_value=user_it;');
|
|
});
|
|
|
|
test('value[] float', () => {
|
|
assert.equal(run('const value = it[1]', {
|
|
argumentNames: ['it'],
|
|
argumentTypes: ['Array']
|
|
}), 'float user_value=get(user_it, user_itSize, user_itDim, user_itBitRatio, 0, 0, 1);');
|
|
});
|
|
|
|
test('value[][] float', () => {
|
|
assert.equal(run('const value = it[1][2]', {
|
|
argumentNames: ['it'],
|
|
argumentTypes: ['Array2D']
|
|
}), 'float user_value=get(user_it, user_itSize, user_itDim, user_itBitRatio, 0, 1, 2);');
|
|
});
|
|
|
|
test('value[][][] float', () => {
|
|
assert.equal(run('const value = it[1][2][3]', {
|
|
argumentNames: ['it'],
|
|
argumentTypes: ['Array3D']
|
|
}), 'float user_value=get(user_it, user_itSize, user_itDim, user_itBitRatio, 1, 2, 3);');
|
|
});
|
|
|
|
test('this.constant.value throws', () => {
|
|
assert.throws(() => {
|
|
run('const value=this.constant.it');
|
|
});
|
|
});
|
|
|
|
test('this.constants.value without constantTypes declared', () => {
|
|
assert.throws(() => {
|
|
run('const value=this.constants.it')
|
|
});
|
|
});
|
|
|
|
test('this.constants.value float', () => {
|
|
assert.equal(run('const value = this.constants.it', {
|
|
constantTypes: { it: 'Number' }
|
|
}), 'float user_value=constants_it;');
|
|
});
|
|
|
|
test('this.constants.value int', () => {
|
|
assert.equal(run('const value = this.constants.it', {
|
|
constantTypes: {
|
|
it: 'Integer'
|
|
}
|
|
}), 'int user_value=constants_it;');
|
|
});
|
|
|
|
test('this.constants.value[] float', () => {
|
|
assert.equal(run('const value = this.constants.it[1]', {
|
|
constantTypes: {
|
|
it: 'Array'
|
|
}
|
|
}), 'float user_value=get(constants_it, constants_itSize, constants_itDim, constants_itBitRatio, 0, 0, 1);');
|
|
});
|
|
|
|
test('this.constants.value[][] float', () => {
|
|
assert.equal(run('const value = this.constants.it[1][2]', {
|
|
constantTypes: {
|
|
it: 'Array2D'
|
|
}
|
|
}), 'float user_value=get(constants_it, constants_itSize, constants_itDim, constants_itBitRatio, 0, 1, 2);');
|
|
});
|
|
|
|
test('this.constants.value[][][] float', () => {
|
|
assert.equal(run('const value = this.constants.it[1][2][3]', {
|
|
constantTypes: {
|
|
it: 'Array3D'
|
|
}
|
|
}), 'float user_value=get(constants_it, constants_itSize, constants_itDim, constants_itBitRatio, 1, 2, 3);');
|
|
});
|
|
|
|
test('this.thread.x int', () => {
|
|
assert.equal(run('const value = this.thread.x'), 'int user_value=threadId.x;');
|
|
});
|
|
|
|
test('this.thread.y int', () => {
|
|
assert.equal(run('const value = this.thread.y'), 'int user_value=threadId.y;');
|
|
});
|
|
|
|
test('this.thread.z int', () => {
|
|
assert.equal(run('const value = this.thread.z'), 'int user_value=threadId.z;');
|
|
});
|
|
|
|
test('this.output.x int', () => {
|
|
assert.equal(run('const value = this.output.x'), 'int user_value=1;');
|
|
});
|
|
|
|
test('this.output.y int', () => {
|
|
assert.equal(run('const value = this.output.y'), 'int user_value=2;');
|
|
});
|
|
|
|
test('this.output.z int', () => {
|
|
assert.equal(run('const value = this.output.z'), 'int user_value=3;');
|
|
});
|
|
|
|
test('this.outputs.z throws', () => {
|
|
assert.throws(() => {
|
|
run('const value = this.outputs.z');
|
|
});
|
|
});
|
|
|
|
test('Math.E Number float', () => {
|
|
assert.equal(run('const value = Math.E'), `float user_value=${Math.E.toString()};`);
|
|
});
|
|
|
|
test('Math.E Number float', () => {
|
|
assert.equal(run('const value = Math.E'), `float user_value=${Math.E.toString()};`);
|
|
});
|