als-statistics
Version:
A powerful and lightweight JavaScript library for descriptive statistics, regression, clustering, outlier detection, and noise analysis using a flexible table/column architecture.
29 lines (25 loc) • 1.3 kB
JavaScript
const { describe, it } = require('node:test');
const assert = require('node:assert');
const MovingAverage = require('../../../lib/ratio-column/instruments/ma');
describe('MovingAverage class', () => {
it('computes moving average correctly (naive sample)', () => {
const sample = { values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], n: 10 };
const ma = new MovingAverage(sample, 3);
assert.deepStrictEqual(ma.result, [2, 3, 4, 5, 6, 7, 8, 9]);
});
it('throws error for invalid window size', () => {
const sample = { values: [1, 2, 3, 4, 5], n: 5 };
assert.throws(() => new MovingAverage(sample, -1), /windowSize must be a positive integer/);
assert.throws(() => new MovingAverage(sample, 6), /window size cant be bigger than sample size/);
});
it('computes moving average correctly for bigSample', () => {
const largeData = Array.from({ length: 10000 }, (_, i) => i + 1);
const sample = { values: largeData, n: largeData.length };
const ma = new MovingAverage(sample, 100);
assert.strictEqual(ma.result[0], 50.5);
assert.strictEqual(ma.result[1], 51.5);
assert.strictEqual(ma.result[2], 52.5);
assert.strictEqual(ma.result[3], 53.5);
assert.strictEqual(ma.result[4], 54.5);
});
});