@uppy/utils
Version:
Shared utility functions for Uppy Core and plugins maintained by the Uppy team.
34 lines (29 loc) • 1.14 kB
text/typescript
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)),
)
}
})
})