Files
generalFunctions/test/measurement.test.js
2026-02-12 10:14:56 +01:00

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]);
});