mirror of
https://github.com/gpujs/gpu.js.git
synced 2025-12-08 20:35:56 +00:00
This is in favor of using for loop variable position tracking, which is removed. feat: Removal of no longer needed `warnVarUsage` feat: If ternary returns void, use if statement in webgl fix: Update documentation and clarify variable declarations Officially support private functions - WOOHOO!
164 lines
5.1 KiB
JavaScript
164 lines
5.1 KiB
JavaScript
const { assert, skip, test, module: describe, only } = require('qunit');
|
|
const { WebGLFunctionNode, WebGL2FunctionNode, CPUFunctionNode } = require('../../src');
|
|
|
|
describe('issue #390');
|
|
|
|
test('Issue #390 - thread assignment webgl', function(assert) {
|
|
const node = new WebGLFunctionNode(function assignThreadToVar() {
|
|
const x = this.thread.x;
|
|
const y = this.thread.y;
|
|
const sum = x + y;
|
|
return sum;
|
|
}.toString(), { output: [1], returnType: 'Number' });
|
|
assert.equal(node.toString(), 'float assignThreadToVar() {'
|
|
+ '\nfloat user_x=float(threadId.x);'
|
|
+ '\nfloat user_y=float(threadId.y);'
|
|
+ '\nfloat user_sum=(user_x+user_y);'
|
|
+ '\nreturn user_sum;'
|
|
+ '\n}');
|
|
const { x, y, sum } = node.contexts[1];
|
|
assert.equal(x.name, 'x');
|
|
assert.equal(x.valueType, 'Number');
|
|
assert.equal(y.name, 'y');
|
|
assert.equal(y.valueType, 'Number');
|
|
assert.equal(sum.name, 'sum');
|
|
assert.equal(sum.valueType, 'Number');
|
|
});
|
|
|
|
test('Issue #390 - thread assignment webgl2', function(assert) {
|
|
const node = new WebGL2FunctionNode(function assignThreadToVar() {
|
|
const x = this.thread.x;
|
|
const y = this.thread.y;
|
|
const sum = x + y;
|
|
return sum;
|
|
}.toString(), { output: [1], returnType: 'Number' });
|
|
assert.equal(node.toString(), 'float assignThreadToVar() {'
|
|
+ '\nfloat user_x=float(threadId.x);'
|
|
+ '\nfloat user_y=float(threadId.y);'
|
|
+ '\nfloat user_sum=(user_x+user_y);'
|
|
+ '\nreturn user_sum;'
|
|
+ '\n}');
|
|
const { x, y, sum } = node.contexts[1];
|
|
assert.equal(x.name, 'x');
|
|
assert.equal(x.valueType, 'Number');
|
|
assert.equal(y.name, 'y');
|
|
assert.equal(y.valueType, 'Number');
|
|
assert.equal(sum.name, 'sum');
|
|
assert.equal(sum.valueType, 'Number');
|
|
});
|
|
|
|
test('Issue #390 - thread assignment cpu', function(assert) {
|
|
const node = new CPUFunctionNode(function assignThreadToVar() {
|
|
const x = this.thread.x;
|
|
const y = this.thread.y;
|
|
const sum = x + y;
|
|
return sum;
|
|
}.toString(), { output: [1] });
|
|
assert.equal(node.toString(), 'function assignThreadToVar() {'
|
|
+ '\nconst user_x=_this.thread.x;'
|
|
+ '\nconst user_y=_this.thread.y;'
|
|
+ '\nconst user_sum=(user_x+user_y);'
|
|
+ '\nreturn user_sum;'
|
|
+ '\n}');
|
|
const { x, y, z, sum } = node.contexts[1];
|
|
assert.equal(x.name, 'x');
|
|
assert.equal(x.valueType, 'Integer');
|
|
assert.equal(y.name, 'y');
|
|
assert.equal(y.valueType, 'Integer');
|
|
assert.equal(sum.name, 'sum');
|
|
assert.equal(sum.valueType, 'Number');
|
|
});
|
|
|
|
|
|
test('Issue #390 (related) - output assignment webgl', function(assert) {
|
|
const node = new WebGLFunctionNode(function assignThreadToVar() {
|
|
const x = this.output.x;
|
|
const y = this.output.y;
|
|
const z = this.output.z;
|
|
const sum = x + y + z;
|
|
return sum;
|
|
}.toString(), {
|
|
output: [1,2,3]
|
|
});
|
|
assert.equal(node.toString(), 'float assignThreadToVar() {'
|
|
+ '\nfloat user_x=1.0;'
|
|
+ '\nfloat user_y=2.0;'
|
|
+ '\nfloat user_z=3.0;'
|
|
+ '\nfloat user_sum=((user_x+user_y)+user_z);'
|
|
+ '\nreturn user_sum;'
|
|
+ '\n}');
|
|
const { x, y, z, sum } = node.contexts[1];
|
|
assert.equal(x.name, 'x');
|
|
assert.equal(x.valueType, 'Number');
|
|
assert.equal(y.name, 'y');
|
|
assert.equal(y.valueType, 'Number');
|
|
assert.equal(z.name, 'z');
|
|
assert.equal(z.valueType, 'Number');
|
|
assert.equal(sum.name, 'sum');
|
|
assert.equal(sum.valueType, 'Number');
|
|
});
|
|
|
|
test('Issue #390 (related) - output assignment webgl2', function(assert) {
|
|
const node = new WebGL2FunctionNode(function assignThreadToVar() {
|
|
const x = this.output.x;
|
|
const y = this.output.y;
|
|
const z = this.output.z;
|
|
const sum = x + y + z;
|
|
return sum;
|
|
}.toString(), {
|
|
output: [1,2,3]
|
|
});
|
|
assert.equal(node.toString(), 'float assignThreadToVar() {'
|
|
+ '\nfloat user_x=1.0;'
|
|
+ '\nfloat user_y=2.0;'
|
|
+ '\nfloat user_z=3.0;'
|
|
+ '\nfloat user_sum=((user_x+user_y)+user_z);'
|
|
+ '\nreturn user_sum;'
|
|
+ '\n}');
|
|
const context = node.contexts[1];
|
|
const { x, y, z, sum } = context;
|
|
assert.equal(x.name, 'x');
|
|
assert.equal(x.valueType, 'Number');
|
|
assert.equal(y.name, 'y');
|
|
assert.equal(y.valueType, 'Number');
|
|
assert.equal(z.name, 'z');
|
|
assert.equal(z.valueType, 'Number');
|
|
assert.equal(sum.name, 'sum');
|
|
assert.equal(sum.valueType, 'Number');
|
|
});
|
|
|
|
test('Issue #390 (related) - output assignment cpu', function(assert) {
|
|
const node = new CPUFunctionNode(`function assignThreadToVar() {
|
|
const x = this.output.x;
|
|
const y = this.output.y;
|
|
const z = this.output.z;
|
|
const sum = x + y + z;
|
|
return sum;
|
|
}`, {
|
|
output: [1,2,3]
|
|
});
|
|
assert.equal(node.toString(), 'function assignThreadToVar() {'
|
|
+ '\nconst user_x=outputX;'
|
|
+ '\nconst user_y=outputY;'
|
|
+ '\nconst user_z=outputZ;'
|
|
+ '\nconst user_sum=((user_x+user_y)+user_z);'
|
|
+ '\nreturn user_sum;'
|
|
+ '\n}');
|
|
const context = node.contexts[1];
|
|
const { x, y, z, sum } = context;
|
|
assert.equal(context['@contextType'], 'const/let');
|
|
|
|
assert.equal(x.name, 'x');
|
|
assert.equal(x.valueType, 'Number');
|
|
|
|
assert.equal(y.name, 'y');
|
|
assert.equal(y.valueType, 'Number');
|
|
|
|
assert.equal(z.name, 'z');
|
|
assert.equal(z.valueType, 'Number');
|
|
|
|
assert.equal(sum.name, 'sum');
|
|
assert.equal(sum.valueType, 'Number');
|
|
});
|
|
|