typescript-cubic-spline
Version:
64 lines (63 loc) • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var Spline_1 = require("./Spline");
//const Spline = require('.');
describe("spline", function () {
it("should return a correct value of type number", function () {
var xs = [1, 2, 3, 4, 5];
var ys = [9, 3, 6, 2, 4];
// new a Spline object
var spline = new Spline_1.default(xs, ys);
// get Y at arbitrary X
expect(spline.at(1.4)).toBe(5.586);
// interpolate a line at a higher resolution
for (var i = 0; i < 50; i++) {
expect(spline.at(i * 0.1)).toEqual(expect.any(Number));
}
});
});
describe("speed", function () {
it("should run quickly on relatively large data, too", function () {
var arraySizes = [10, 100, 1000, 2000, 4000];
var arraySpeed = [];
var arrayInitialization = [];
var multiplicationFactor = 10; // array.length * multiplicationFactor = number of times the .at()-function is executed on the same array
for (var i = 0; i < arraySizes.length; i++) {
// generate x-y-set
var setX = [];
var setY = [];
var x = 0;
var y = 0;
for (var j = 0; j < arraySizes[i]; j++) {
x += 0.05;
y = Math.sin(x);
setX.push(Number(x.toFixed(2)));
setY.push(Number(y.toFixed(4)));
}
// run cubic-spline-interpolation
var initializationStart = new Date();
var spline = new Spline_1.default(setX, setY);
var initializationEnd = new Date();
// interpolate spline at 10x resolution
var atStart = new Date();
for (var j = 0; j < arraySizes[i] * multiplicationFactor; j++) {
spline.at(j * 0.05 + 0.01); // create a small offset to the actual data set
}
var atEnd = new Date();
arrayInitialization[i] =
Number(initializationEnd) - Number(initializationStart);
arraySpeed[i] = Number(atEnd) - Number(atStart);
}
// print result
console.log("elements in | times .at() | initialization | execution time");
console.log("dataset | is used | time of spline | of all .at()'s");
console.log("------------|-------------|----------------|---------------");
for (var i = 0; i < arraySizes.length; i++) {
var size = arraySizes[i].toString().padEnd(11);
var at = (arraySizes[i] * multiplicationFactor).toString().padStart(11);
var initializationTime = arrayInitialization[i].toString().padStart(12);
var atTime = arraySpeed[i].toString().padStart(12);
console.log(size + " | " + at + " | " + initializationTime + "ms | " + atTime + "ms");
}
});
});