moving-averages-js
Version:
The FinTech utility collections of simple, cumulative, and exponential moving averages.
123 lines (112 loc) • 2.07 kB
JavaScript
import { runner, type } from "../testHelper/runner";
const a = [1, 2, 3, 4, 5];
const dmaa50 = [0, 1.5, 2.25, 3.125, 4.0625];
const dmaa51 = [1, 1.5, 2.25, 3.125, 4.0625];
const CASES = {};
CASES.dma = [
[[a, 1, 1], a],
[[a, 2, 1], Array(5)],
[[a, 0.5, 1], dmaa50],
[[a, 0.5], dmaa51],
[
[
[1, 2, 3, 4, 5],
[0.1, 0.2, 0.1, 0.1, 0.05],
],
[1, 1.2, 1.38, 1.642, 1.8099],
],
[
[
[, 2, 3, 4, 5],
[0.1, 0.2, 0.1, 0.1, 0.05],
],
[, 2, 2.1, 2.29, 2.4255],
],
[
[
[, 2, 3, 4, , 5],
[0.1, 0.2, 0.1, 0.1, 0.1, 0.05],
],
[, 2, 2.1, 2.29, 2.29, 2.4255],
],
[
[[1, 2, , 3, 4, 5], 0.1, 1],
[0, 1.1, 1.1, 1.29, 1.561, 1.9049],
],
];
CASES.ma = [
[[a, 1], a],
[[a, 0.5], a],
[[a], 3],
[[a, 6], Array(5)],
[
[a, 2],
[, 1.5, 2.5, 3.5, 4.5],
],
[
[[1, , 2, , 3, 4, 5], 2],
[, 0.5, 1, 1, 1.5, 3.5, 4.5],
],
[
[[, 1, , 2, , 3, 4, 5], 2],
[, , 0.5, 1, 1, 1.5, 3.5, 4.5],
],
];
CASES.wma = [
[
[[, 1, , 2, , 3, 4, 5], 2],
[
,
0.6666666666666666,
0.3333333333333333,
1.3333333333333333,
0.6666666666666666,
2,
3.6666666666666665,
4.666666666666667,
],
],
[
[[1, , 2, , 3, 4, 5], 2],
[
,
0.3333333333333333,
1.3333333333333333,
0.6666666666666666,
2,
3.6666666666666665,
4.666666666666667,
],
],
[
[a, 2],
[
,
1.6666666666666667,
2.6666666666666665,
3.6666666666666665,
4.666666666666667,
],
],
[[a, 0], a],
[[a, 6], Array(5)],
];
CASES.sma = [[[a, 2], dmaa50]];
CASES.ema = [[[a, 3], dmaa51]];
function setNaN(a) {
let i = 0;
const length = a.length;
for (; i < length; i++) {
if (a[i] === undefined) {
a[i] = NaN;
}
}
return a;
}
Object.keys(CASES).forEach((t) => {
CASES[t].map(type(t)).forEach(runner());
// Test about
const C = CASES[t].slice();
C[0] = setNaN(C[0].slice());
C.map(type(t)).forEach(runner("test NaN: "));
});