50 lines
1.8 KiB
JavaScript
50 lines
1.8 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const Measurement = require('../src/measurements/Measurement.js');
|
|
const { near } = require('./helpers.js');
|
|
|
|
test('maintains rolling window and exposes stats', () => {
|
|
const m = new Measurement('flow', 'measured', 'upstream', 3);
|
|
m.setValue(10, 1).setValue(20, 2).setValue(30, 3).setValue(40, 4);
|
|
|
|
assert.deepEqual(m.getAllValues().values, [20, 30, 40]);
|
|
assert.deepEqual(m.getAllValues().timestamps, [2, 3, 4]);
|
|
assert.equal(m.getCurrentValue(), 40);
|
|
assert.equal(m.getAverage(), 30);
|
|
assert.equal(m.getMin(), 20);
|
|
assert.equal(m.getMax(), 40);
|
|
});
|
|
|
|
test('lag semantics: lag=1 is previous sample', () => {
|
|
const m = new Measurement('flow', 'measured', 'upstream', 5);
|
|
m.setValue(10, 100).setValue(20, 200).setValue(30, 300);
|
|
|
|
assert.equal(m.getLaggedSample(0).value, 30);
|
|
assert.equal(m.getLaggedSample(1).value, 20);
|
|
assert.equal(m.getLaggedValue(1), 20);
|
|
});
|
|
|
|
test('convertTo converts values to target unit', () => {
|
|
const m = new Measurement('flow', 'measured', 'upstream', 5);
|
|
m.setUnit('m3/h');
|
|
m.setValue(3.6, 1);
|
|
|
|
const converted = m.convertTo('m3/s');
|
|
assert.ok(near(converted.getCurrentValue(), 0.001, 1e-8));
|
|
assert.equal(converted.unit, 'm3/s');
|
|
assert.equal(converted.getLatestTimestamp(), 1);
|
|
});
|
|
|
|
test('createDifference aligns timestamps and subtracts downstream from upstream', () => {
|
|
const up = new Measurement('pressure', 'measured', 'upstream', 10).setUnit('mbar');
|
|
const down = new Measurement('pressure', 'measured', 'downstream', 10).setUnit('mbar');
|
|
|
|
up.setValue(120, 1).setValue(140, 2);
|
|
down.setValue(100, 2).setValue(95, 3);
|
|
|
|
const diff = Measurement.createDifference(up, down);
|
|
assert.deepEqual(diff.getAllValues().timestamps, [2]);
|
|
assert.deepEqual(diff.getAllValues().values, [40]);
|
|
});
|