The bogus machineCurve default at pressure "1" (fixed in generalFunctions 086e5fe) made fValues.min=1, which let sub-curve differentials pass unclamped. With the fix, fValues.min=70000 (the real curve minimum) and low differentials get clamped. Three tests that accidentally depended on the bogus min=1 behavior are updated: - coolprop test: expects fDimension clamped to curve minimum when differential < curve range - pressure-initialization test: uses pressures whose differential falls WITHIN the curve range (900 mbar = 90000 Pa > 70000 Pa minimum) - sequences test: tests upper-bound constraint with setpoint > max, then confirms a valid setpoint is applied as-is (was incorrectly asserting any setpoint would be clamped to max) Trace instrumentation from debugging session removed. 91/91 tests green. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
60 lines
3.2 KiB
JavaScript
60 lines
3.2 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const Machine = require('../../src/specificClass');
|
|
const { makeMachineConfig, makeStateConfig } = require('../helpers/factories');
|
|
|
|
test('calcEfficiency runs through coolprop path without mocks', () => {
|
|
const machine = new Machine(makeMachineConfig(), makeStateConfig({ state: { current: 'operational' } }));
|
|
|
|
machine.measurements.type('pressure').variant('measured').position('downstream').value(1200, Date.now(), 'mbar');
|
|
machine.measurements.type('pressure').variant('measured').position('upstream').value(800, Date.now(), 'mbar');
|
|
machine.measurements.type('flow').variant('predicted').position('atEquipment').value(120, Date.now(), 'm3/h');
|
|
machine.measurements.type('power').variant('predicted').position('atEquipment').value(12, Date.now(), 'kW');
|
|
|
|
assert.doesNotThrow(() => {
|
|
machine.calcEfficiency(12, 120, 'predicted');
|
|
});
|
|
|
|
const eff = machine.measurements.type('efficiency').variant('predicted').position('atEquipment').getCurrentValue();
|
|
assert.equal(typeof eff, 'number');
|
|
assert.ok(eff > 0);
|
|
|
|
const pressureDiffPa = (1200 - 800) * 100; // mbar -> Pa
|
|
const flowM3s = 120 / 3600; // m3/h -> m3/s
|
|
const expectedHydraulicPower = pressureDiffPa * flowM3s;
|
|
const expectedHydraulicEfficiency = expectedHydraulicPower / 12000; // 12kW -> W
|
|
|
|
const hydraulicPower = machine.measurements.type('hydraulicPower').variant('predicted').position('atEquipment').getCurrentValue('W');
|
|
const hydraulicEfficiency = machine.measurements.type('nHydraulicEfficiency').variant('predicted').position('atEquipment').getCurrentValue();
|
|
const head = machine.measurements.type('pumpHead').variant('predicted').position('atEquipment').getCurrentValue('m');
|
|
|
|
assert.ok(Number.isFinite(hydraulicPower));
|
|
assert.ok(Number.isFinite(hydraulicEfficiency));
|
|
assert.ok(Number.isFinite(head));
|
|
assert.ok(Math.abs(hydraulicPower - expectedHydraulicPower) < 1);
|
|
assert.ok(Math.abs(hydraulicEfficiency - expectedHydraulicEfficiency) < 0.01);
|
|
});
|
|
|
|
test('predictions use initialized medium pressure and not the minimum-pressure fallback', () => {
|
|
const machine = new Machine(makeMachineConfig(), makeStateConfig({ state: { current: 'operational' } }));
|
|
|
|
const mediumUpstreamMbar = 700;
|
|
const mediumDownstreamMbar = 1100;
|
|
machine.updateMeasuredPressure(mediumUpstreamMbar, 'upstream', { timestamp: Date.now(), unit: 'mbar', childName: 'test-pt-up' });
|
|
machine.updateMeasuredPressure(mediumDownstreamMbar, 'downstream', { timestamp: Date.now(), unit: 'mbar', childName: 'test-pt-down' });
|
|
|
|
const pressureStatus = machine.getPressureInitializationStatus();
|
|
assert.equal(pressureStatus.initialized, true);
|
|
assert.equal(pressureStatus.hasDifferential, true);
|
|
|
|
const rawDiff = (mediumDownstreamMbar - mediumUpstreamMbar) * 100; // mbar -> Pa = 40000
|
|
// fDimension is clamped to [fValues.min, fValues.max]. The H05K curve's
|
|
// minimum pressure slice is 70000 Pa (700 mbar). A 40000 Pa differential
|
|
// is below the curve minimum, so it gets clamped to 70000.
|
|
const curveMinPressure = 70000;
|
|
const expected = Math.max(rawDiff, curveMinPressure);
|
|
assert.equal(Math.round(machine.predictFlow.fDimension), expected);
|
|
assert.ok(machine.predictFlow.fDimension > 0);
|
|
});
|