@uppy/utils
Version:
Shared utility functions for Uppy Core and plugins maintained by the Uppy team.
28 lines (27 loc) • 1.23 kB
JavaScript
import { describe, expect, it } from 'vitest';
import emaFilter from './emaFilter.js';
describe('emaFilter', () => {
it('should calculate the exponential average', () => {
expect(emaFilter(1, 0, 0, 1)).toBe(1);
expect(emaFilter(1, 0, 2, 0)).toBe(0);
expect(emaFilter(1, 0, 2, 2)).toBeCloseTo(0.5);
expect(emaFilter(1, 0, 2, 4)).toBeCloseTo(0.75);
expect(emaFilter(1, 0, 2, 6)).toBeCloseTo(0.875);
expect(emaFilter(0, 1, 2, 2)).toBeCloseTo(0.5);
expect(emaFilter(0, 1, 2, 4)).toBeCloseTo(0.25);
expect(emaFilter(0, 1, 2, 6)).toBeCloseTo(0.125);
expect(emaFilter(0.5, 1, 2, 4)).toBeCloseTo(0.625);
expect(emaFilter(1, 0.5, 2, 4)).toBeCloseTo(0.875);
});
it('should behave like exponential moving average', () => {
const firstValue = 1;
const newValue = 10;
const step = 0.618033989;
const halfLife = 2;
let lastFilteredValue = firstValue;
for (let i = 0; i < 10; ++i) {
lastFilteredValue = emaFilter(newValue, lastFilteredValue, halfLife, step);
expect(lastFilteredValue).toBeCloseTo(emaFilter(newValue, firstValue, halfLife, step * (i + 1)));
}
});
});