gpu.js/test/features/demo.js
Robert Plummer 8bf362ad9a feat: No failing tests locally, only skipping and passing
Also:
feat: Typescript typings
feat: api cleanup and exports
feat: removal of building for node, only browser
2019-01-29 21:41:21 -05:00

64 lines
1.5 KiB
JavaScript

const { assert, skip, test, module: describe } = require('qunit');
const { GPU } = require('../../src');
describe('features: demo');
function demo(mode) {
const matrixSize = 6;
let a = new Array(matrixSize * matrixSize);
let b = new Array(matrixSize * matrixSize);
a = splitArray(fillArrayRandom(a), matrixSize);
b = splitArray(fillArrayRandom(b), matrixSize);
function fillArrayRandom(array) {
for(let i = 0; i < array.length; i++) {
array[i] = Math.random();
}
return array;
}
function splitArray(array, part) {
const result = [];
for(let i = 0; i < array.length; i += part) {
result.push(array.slice(i, i + part));
}
return result;
}
const gpu = new GPU({ mode });
const multiplyMatrix = gpu.createKernel(function(a, b) {
let sum = 0;
for (let i = 0; i < 6; i++) {
sum += a[this.thread.y][i] * b[i][this.thread.x];
}
return sum;
})
.setOutput([6, 6]);
assert.ok( multiplyMatrix !== null, "function generated test");
assert.equal(multiplyMatrix(a, b).length, 6, "basic return function test");
gpu.destroy();
}
test("auto", () => {
demo();
});
test("gpu", () => {
demo('gpu');
});
(GPU.isWebGLSupported ? test : skip)("webgl", function () {
demo('webgl');
});
(GPU.isWebGL2Supported ? test : skip)("webgl2", function () {
demo('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)("headlessgl", function () {
demo('headlessgl');
});
test("cpu", () => {
demo('cpu');
});