53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
'use strict'
|
|
/*
|
|
Open Rowing Monitor, https://github.com/laberning/openrowingmonitor
|
|
*/
|
|
import { test } from 'uvu'
|
|
import * as assert from 'uvu/assert'
|
|
|
|
import { createMovingIntervalAverager } from './MovingIntervalAverager.js'
|
|
|
|
test('average of a datapoint with duration of averager is equal to datapoint', () => {
|
|
const minuteAverager = createMovingIntervalAverager(10)
|
|
minuteAverager.pushValue(5, 10)
|
|
assert.is(minuteAverager.average(), 5)
|
|
})
|
|
|
|
test('average of a datapoint with half duration of averager is double to datapoint', () => {
|
|
const minuteAverager = createMovingIntervalAverager(20)
|
|
minuteAverager.pushValue(5, 10)
|
|
assert.is(minuteAverager.average(), 10)
|
|
})
|
|
|
|
test('average of two identical datapoints with half duration of averager is equal to datapoint sum', () => {
|
|
const minuteAverager = createMovingIntervalAverager(20)
|
|
minuteAverager.pushValue(5, 10)
|
|
minuteAverager.pushValue(5, 10)
|
|
assert.is(minuteAverager.average(), 10)
|
|
})
|
|
|
|
test('average does not consider datapoints that are outside of duration', () => {
|
|
const minuteAverager = createMovingIntervalAverager(20)
|
|
minuteAverager.pushValue(10, 10)
|
|
minuteAverager.pushValue(5, 10)
|
|
minuteAverager.pushValue(5, 10)
|
|
assert.is(minuteAverager.average(), 10)
|
|
})
|
|
|
|
test('average works with lots of values', () => {
|
|
// one hour
|
|
const minuteAverager = createMovingIntervalAverager(3000)
|
|
for (let i = 0; i < 1000; i++) {
|
|
minuteAverager.pushValue(10, 1)
|
|
}
|
|
for (let i = 0; i < 1000; i++) {
|
|
minuteAverager.pushValue(20, 1)
|
|
}
|
|
for (let i = 0; i < 1000; i++) {
|
|
minuteAverager.pushValue(30, 2)
|
|
}
|
|
assert.is(minuteAverager.average(), 50000)
|
|
})
|
|
|
|
test.run()
|