mirror of
https://github.com/gpujs/gpu.js.git
synced 2025-12-08 20:35:56 +00:00
fix: Float handling feat: added `optimizeFloatMemory` to better exemplify what it does and replace `floatTextures` and its voodoo in webgl2 feat: end to end strong type detection Note: added a bunch of TODO's this is just a good resting point.
169 lines
5.5 KiB
JavaScript
169 lines
5.5 KiB
JavaScript
const { assert, test, module: describe, only } = require('qunit');
|
|
const { FunctionBuilder, CPUFunctionNode, WebGL2FunctionNode, WebGLFunctionNode } = require('../../src');
|
|
|
|
describe('internal: function builder');
|
|
|
|
// Three layer template for multiple tests
|
|
function threeLayerTemplate(FunctionNode) {
|
|
function layerOne() {
|
|
return 42;
|
|
}
|
|
|
|
function layerTwo() {
|
|
return layerOne() * 2;
|
|
}
|
|
|
|
function layerThree() {
|
|
return layerTwo() * 2;
|
|
}
|
|
|
|
// Create a function hello node
|
|
return new FunctionBuilder({
|
|
functionNodes: [
|
|
new FunctionNode(layerOne.toString(), {
|
|
output: [1],
|
|
lookupReturnType: () => 'Number',
|
|
lookupFunctionArgumentTypes: () => {}
|
|
}),
|
|
new FunctionNode(layerTwo.toString(), {
|
|
output: [1],
|
|
lookupReturnType: () => 'Number',
|
|
lookupFunctionArgumentTypes: () => {}
|
|
}),
|
|
new FunctionNode(layerThree.toString(), {
|
|
output: [1],
|
|
lookupReturnType: () => 'Number',
|
|
lookupFunctionArgumentTypes: () => {}
|
|
}),
|
|
],
|
|
output: [1]
|
|
});
|
|
}
|
|
|
|
/// Test the function tracing of 3 layers
|
|
test('traceFunctionCalls: 3 layer test cpu', () => {
|
|
const builder = threeLayerTemplate(CPUFunctionNode);
|
|
assert.deepEqual(builder.traceFunctionCalls('layerOne'), ['layerOne']);
|
|
assert.deepEqual(builder.traceFunctionCalls('layerTwo'), ['layerTwo', 'layerOne']);
|
|
assert.deepEqual(builder.traceFunctionCalls('layerThree'), ['layerThree', 'layerTwo', 'layerOne']);
|
|
});
|
|
|
|
test('traceFunctionCalls: 3 layer test webgl', () => {
|
|
const builder = threeLayerTemplate(WebGLFunctionNode);
|
|
assert.deepEqual(builder.traceFunctionCalls('layerOne'), ['layerOne']);
|
|
assert.deepEqual(builder.traceFunctionCalls('layerTwo'), ['layerTwo', 'layerOne']);
|
|
assert.deepEqual(builder.traceFunctionCalls('layerThree'), ['layerThree', 'layerTwo', 'layerOne']);
|
|
});
|
|
|
|
test('traceFunctionCalls: 3 layer test webgl2', () => {
|
|
const builder = threeLayerTemplate(WebGL2FunctionNode);
|
|
assert.deepEqual(builder.traceFunctionCalls('layerOne'), ['layerOne']);
|
|
assert.deepEqual(builder.traceFunctionCalls('layerTwo'), ['layerTwo', 'layerOne']);
|
|
assert.deepEqual(builder.traceFunctionCalls('layerThree'), ['layerThree', 'layerTwo', 'layerOne']);
|
|
});
|
|
|
|
/// Test the function tracing of 3 layers
|
|
test('webglString: 3 layer test cpu', () => {
|
|
const builder = threeLayerTemplate(CPUFunctionNode);
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['layerOne']),
|
|
'function layerOne() {\nreturn 42;\n}'
|
|
);
|
|
assert.equal(
|
|
builder.getString('layerOne'),
|
|
builder.getStringFromFunctionNames(['layerOne'])
|
|
);
|
|
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo']),
|
|
'function layerOne() {\nreturn 42;\n}\nfunction layerTwo() {\nreturn (layerOne()*2);\n}'
|
|
);
|
|
assert.equal(
|
|
builder.getString('layerTwo'),
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo'])
|
|
);
|
|
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo','layerThree']),
|
|
'function layerOne() {\nreturn 42;\n}\nfunction layerTwo() {\nreturn (layerOne()*2);\n}\nfunction layerThree() {\nreturn (layerTwo()*2);\n}'
|
|
);
|
|
assert.equal(
|
|
builder.getString('layerThree'),
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo','layerThree'])
|
|
);
|
|
assert.equal(
|
|
builder.getString(null),
|
|
builder.getString('layerThree')
|
|
);
|
|
});
|
|
|
|
test('webglString: 3 layer test webgl', () => {
|
|
const builder = threeLayerTemplate(WebGLFunctionNode);
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['layerOne']),
|
|
'float layerOne() {\nreturn 42.0;\n}'
|
|
);
|
|
assert.equal(
|
|
builder.getString('layerOne'),
|
|
builder.getStringFromFunctionNames(['layerOne'])
|
|
);
|
|
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo']),
|
|
'float layerOne() {\nreturn 42.0;\n}\nfloat layerTwo() {\nreturn (layerOne()*2.0);\n}'
|
|
);
|
|
assert.equal(
|
|
builder.getString('layerTwo'),
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo'])
|
|
);
|
|
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo','layerThree']),
|
|
'float layerOne() {\nreturn 42.0;\n}\nfloat layerTwo() {\nreturn (layerOne()*2.0);\n}\nfloat layerThree() {\nreturn (layerTwo()*2.0);\n}'
|
|
);
|
|
assert.equal(
|
|
builder.getString('layerThree'),
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo','layerThree'])
|
|
);
|
|
assert.equal(
|
|
builder.getString(null),
|
|
builder.getString('layerThree')
|
|
);
|
|
});
|
|
|
|
test('webglString: 3 layer test webgl2', () => {
|
|
const builder = threeLayerTemplate(WebGL2FunctionNode);
|
|
assert.notEqual(builder, null, 'class creation check');
|
|
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['layerOne']),
|
|
'float layerOne() {\nreturn 42.0;\n}'
|
|
);
|
|
assert.equal(
|
|
builder.getString('layerOne'),
|
|
builder.getStringFromFunctionNames(['layerOne'])
|
|
);
|
|
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo']),
|
|
'float layerOne() {\nreturn 42.0;\n}\nfloat layerTwo() {\nreturn (layerOne()*2.0);\n}'
|
|
);
|
|
assert.equal(
|
|
builder.getString('layerTwo'),
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo'])
|
|
);
|
|
|
|
assert.equal(
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo','layerThree']),
|
|
'float layerOne() {\nreturn 42.0;\n}\nfloat layerTwo() {\nreturn (layerOne()*2.0);\n}\nfloat layerThree() {\nreturn (layerTwo()*2.0);\n}'
|
|
);
|
|
assert.equal(
|
|
builder.getString('layerThree'),
|
|
builder.getStringFromFunctionNames(['layerOne','layerTwo','layerThree'])
|
|
);
|
|
assert.equal(
|
|
builder.getString(null),
|
|
builder.getString('layerThree')
|
|
);
|
|
});
|