mirror of
https://github.com/gpujs/gpu.js.git
synced 2026-01-18 16:04:10 +00:00
Add unit tests to browser all.html fix a typo in file and in desc Add a few missing items to index.d.ts Move debug console.log to match GPU counterpart Build files All unit tests pass or skip (when appropriate) for Chrome, Firefox, Safari, and Node This marks v1 rc1.
155 lines
4.8 KiB
JavaScript
155 lines
4.8 KiB
JavaScript
const { assert, test, module: describe, only } = require('qunit');
|
|
const { WebGLFunctionNode } = require(process.cwd() + '/src');
|
|
|
|
describe('WebGLFunctionNode.getVariableSignature()');
|
|
|
|
function run(value) {
|
|
const mockInstance = {
|
|
source: `function() { ${value}; }`
|
|
};
|
|
const ast = WebGLFunctionNode.prototype.getJsAST.call(mockInstance);
|
|
const expression = ast.body.body[0].expression;
|
|
return WebGLFunctionNode.prototype.getVariableSignature.call({
|
|
isAstVariable: WebGLFunctionNode.prototype.isAstVariable
|
|
}, expression);
|
|
}
|
|
|
|
test('value', () => {
|
|
assert.equal(run('value'), 'value');
|
|
});
|
|
test('value[number]', () => {
|
|
assert.equal(run('value[0]'), 'value[]');
|
|
});
|
|
test('value[variable]', () => {
|
|
assert.equal(run('value[a]'), 'value[]');
|
|
});
|
|
test('value[variable] with conflicting names x', () => {
|
|
assert.equal(run('value[x]'), 'value[]');
|
|
});
|
|
test('value[variable] with conflicting names y', () => {
|
|
assert.equal(run('value[y]'), 'value[]');
|
|
});
|
|
test('value[variable] with conflicting names z', () => {
|
|
assert.equal(run('value[z]'), 'value[]');
|
|
});
|
|
test('value[this.thread.x]', () => {
|
|
assert.equal(run('value[this.thread.x]'), 'value[]');
|
|
});
|
|
test('value[this.thread.x][variable]', () => {
|
|
assert.equal(run('value[this.thread.x][a]'), 'value[][]');
|
|
});
|
|
test('value[variable] with conflicting names constants', () => {
|
|
assert.equal(run('value[constants]'), 'value[]');
|
|
});
|
|
test('value[variable] with conflicting names constants', () => {
|
|
assert.equal(run('value[output]'), 'value[]');
|
|
});
|
|
test('value[variable] with conflicting names thread', () => {
|
|
assert.equal(run('value[thread]'), 'value[]');
|
|
});
|
|
test('value[number][number]', () => {
|
|
assert.equal(run('value[0][0]'), 'value[][]');
|
|
});
|
|
test('value[variable][variable]', () => {
|
|
assert.equal(run('value[a][b]'), 'value[][]');
|
|
});
|
|
test('value[number][number][number]', () => {
|
|
assert.equal(run('value[0][0][0]'), 'value[][][]');
|
|
});
|
|
test('value[variable][variable][variable]', () => {
|
|
assert.equal(run('value[a][b][c]'), 'value[][][]');
|
|
});
|
|
|
|
test('this.thread.value', () => {
|
|
assert.equal(run('this.thread.x'), 'this.thread.value');
|
|
assert.equal(run('this.thread.y'), 'this.thread.value');
|
|
assert.equal(run('this.thread.z'), 'this.thread.value');
|
|
});
|
|
|
|
test('this.output.value', () => {
|
|
assert.equal(run('this.output.x'), 'this.output.value');
|
|
assert.equal(run('this.output.y'), 'this.output.value');
|
|
assert.equal(run('this.output.z'), 'this.output.value');
|
|
});
|
|
|
|
test('this.constants.value', () => {
|
|
assert.equal(run('this.constants.value'), 'this.constants.value');
|
|
});
|
|
test('this.constants.value[]', () => {
|
|
assert.equal(run('this.constants.value[0]'), 'this.constants.value[]');
|
|
});
|
|
test('this.constants.value[][]', () => {
|
|
assert.equal(run('this.constants.value[0][0]'), 'this.constants.value[][]');
|
|
});
|
|
test('this.constants.value[][][]', () => {
|
|
assert.equal(run('this.constants.value[0][0][0]'), 'this.constants.value[][][]');
|
|
});
|
|
test('this.constants.texture[this.thread.z][this.thread.y][this.thread.x]', () => {
|
|
assert.equal(run('this.constants.texture[this.thread.z][this.thread.y][this.thread.x]'), 'this.constants.value[][][]');
|
|
});
|
|
test('this.whatever.value', () => {
|
|
assert.equal(run('this.whatever.value'), null);
|
|
});
|
|
test('this.constants.value[][][][]', () => {
|
|
assert.equal(run('this.constants.value[0][0][0][0]'), null);
|
|
});
|
|
test('this.constants.value.something', () => {
|
|
assert.equal(run('this.constants.value.something'), null);
|
|
});
|
|
test('this.constants.value[].something', () => {
|
|
assert.equal(run('this.constants.value[0].something'), null);
|
|
});
|
|
test('this.constants.value[][].something', () => {
|
|
assert.equal(run('this.constants.value[0][0].something'), null);
|
|
});
|
|
test('this.constants.value[][][][]', () => {
|
|
assert.equal(run('this.constants.value[0][0][0].something'), null);
|
|
});
|
|
test('complex nested this.constants.value[][][]', () => {
|
|
assert.equal(run(`
|
|
this.constants.value[
|
|
this.constants.value[i + 1]
|
|
]
|
|
[
|
|
Math.random() * 1 + this.thread.x
|
|
]
|
|
[
|
|
this.thread.x - 100
|
|
]
|
|
`), 'this.constants.value[][][]');
|
|
});
|
|
test('complex nested with function call this.constants.value[][][]', () => {
|
|
assert.equal(run(`
|
|
this.constants.value[
|
|
something()
|
|
]
|
|
[
|
|
Math.random() * 1 + this.thread.x
|
|
]
|
|
[
|
|
this.thread.x - 100
|
|
]
|
|
`), 'this.constants.value[][][]')
|
|
});
|
|
test('non-existent something', () => {
|
|
assert.equal(run('this.constants.value[0][0].something'), null);
|
|
});
|
|
test('non-existent constants', () => {
|
|
assert.equal(run('this.constants.value[0][0].constants'), null);
|
|
});
|
|
test('function call', () => {
|
|
assert.throws(() => {
|
|
run('Math.random()');
|
|
});
|
|
});
|
|
test('binary expression add', () => {
|
|
assert.throws(() => {
|
|
run('value[0] + value[0]');
|
|
});
|
|
});
|
|
test('binary expression divide', () => {
|
|
assert.throws(() => {
|
|
run('value[0] / value[0]');
|
|
});
|
|
});
|