gpu.js/test/internal/implied-else.js
Robert Plummer ef3f0cf001 feat: support for boolean as variable, argument, and constant
fix: implied else issue discovered, and fixed when testing boolean using leading and following return statements
fix: Added a section in documentation about types and added reference to boolean
fix: Bump and build
2019-04-29 08:45:43 -04:00

79 lines
2.0 KiB
JavaScript

const { assert, skip, test, module: describe, only } = require('qunit');
const { GPU } = require('../../src');
describe('internal: Implied else');
function neverReachedWhenEarlyReturn(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function(check, v1, v2) {
if (check) {
return v1;
}
return v2;
}, { output: [1] });
const result = kernel(true, 123, 321);
assert.equal(result[0], 123);
gpu.destroy();
}
test('never reached when early return auto', () => {
neverReachedWhenEarlyReturn();
});
test('never reached when early return gpu', () => {
neverReachedWhenEarlyReturn('gpu');
});
(GPU.isWebGLSupported ? test : skip)('never reached when early return webgl', () => {
neverReachedWhenEarlyReturn('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('never reached when early return webgl2', () => {
neverReachedWhenEarlyReturn('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('never reached when early return headlessgl', () => {
neverReachedWhenEarlyReturn('headlessgl');
});
test('never reached when early return cpu', () => {
neverReachedWhenEarlyReturn('cpu');
});
function handlesImpliedElse(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function(check, v1, v2) {
if (check) {
return v1;
}
return v2;
}, { output: [1] });
const result = kernel(true, 123, 321);
assert.equal(result[0], 123);
gpu.destroy();
}
test('handles implied else auto', () => {
handlesImpliedElse();
});
test('handles implied else gpu', () => {
handlesImpliedElse('gpu');
});
(GPU.isWebGLSupported ? test : skip)('handles implied else webgl', () => {
handlesImpliedElse('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('handles implied else webgl2', () => {
handlesImpliedElse('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('handles implied else headlessgl', () => {
handlesImpliedElse('headlessgl');
});
test('handles implied else cpu', () => {
handlesImpliedElse('cpu');
});