Refine diffuser runtime and tests
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
|
||||
const Diffuser = require('../src/specificClass');
|
||||
|
||||
function makeConfig(overrides = {}) {
|
||||
@@ -27,46 +30,51 @@ function makeConfig(overrides = {}) {
|
||||
};
|
||||
}
|
||||
|
||||
describe('diffuser specificClass', () => {
|
||||
it('starts idle with zero production', () => {
|
||||
const diffuser = new Diffuser(makeConfig());
|
||||
test('diffuser starts idle with zero production', () => {
|
||||
const diffuser = new Diffuser(makeConfig());
|
||||
const output = diffuser.getOutput();
|
||||
|
||||
expect(diffuser.idle).toBe(true);
|
||||
expect(diffuser.getOutput()).toEqual(expect.objectContaining({
|
||||
oKgo2H: 0,
|
||||
oPLoss: expect.any(Number),
|
||||
}));
|
||||
});
|
||||
|
||||
it('calculates oxygen transfer and pressure once airflow is applied', () => {
|
||||
const diffuser = new Diffuser(makeConfig());
|
||||
diffuser.setFlow(24);
|
||||
|
||||
const output = diffuser.getOutput();
|
||||
expect(diffuser.idle).toBe(false);
|
||||
expect(output.oFlowElement).toBeGreaterThan(0);
|
||||
expect(output.oOtr).toBeGreaterThan(0);
|
||||
expect(output.oPLoss).toBeGreaterThan(diffuser.o_p_water);
|
||||
expect(output.oKgo2H).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it('increases total pressure when water height rises', () => {
|
||||
const diffuser = new Diffuser(makeConfig());
|
||||
diffuser.setFlow(24);
|
||||
const lowHeadLoss = diffuser.getOutput().oPLoss;
|
||||
|
||||
diffuser.setWaterHeight(6);
|
||||
const highHeadLoss = diffuser.getOutput().oPLoss;
|
||||
|
||||
expect(highHeadLoss).toBeGreaterThan(lowHeadLoss);
|
||||
});
|
||||
|
||||
it('raises warnings and alarms when flow per element is too low', () => {
|
||||
const diffuser = new Diffuser(makeConfig({ elements: 1, waterHeight: 3 }));
|
||||
diffuser.setFlow(0.5);
|
||||
|
||||
expect(diffuser.warning.state).toBe(true);
|
||||
expect(diffuser.alarm.state).toBe(true);
|
||||
expect(diffuser.getStatus().fill).toBe('red');
|
||||
});
|
||||
assert.equal(diffuser.idle, true);
|
||||
assert.equal(output.oKgo2H, 0);
|
||||
assert.equal(typeof output.oPLoss, 'number');
|
||||
});
|
||||
|
||||
test('diffuser calculates oxygen transfer and pressure once airflow is applied', () => {
|
||||
const diffuser = new Diffuser(makeConfig());
|
||||
diffuser.setFlow(24);
|
||||
|
||||
const output = diffuser.getOutput();
|
||||
assert.equal(diffuser.idle, false);
|
||||
assert.ok(output.oFlowElement > 0);
|
||||
assert.ok(output.oOtr > 0);
|
||||
assert.ok(output.oPLoss > diffuser.o_p_water);
|
||||
assert.ok(output.oKgo2H > 0);
|
||||
});
|
||||
|
||||
test('diffuser increases total pressure when water height rises', () => {
|
||||
const diffuser = new Diffuser(makeConfig());
|
||||
diffuser.setFlow(24);
|
||||
const lowHeadLoss = diffuser.getOutput().oPLoss;
|
||||
|
||||
diffuser.setWaterHeight(6);
|
||||
const highHeadLoss = diffuser.getOutput().oPLoss;
|
||||
|
||||
assert.ok(highHeadLoss > lowHeadLoss);
|
||||
});
|
||||
|
||||
test('diffuser raises warnings and alarms when flow per element is too low', () => {
|
||||
const diffuser = new Diffuser(makeConfig({ elements: 1, waterHeight: 3 }));
|
||||
diffuser.setFlow(0.5);
|
||||
|
||||
assert.equal(diffuser.warning.state, true);
|
||||
assert.equal(diffuser.alarm.state, true);
|
||||
assert.equal(diffuser.getStatus().fill, 'red');
|
||||
});
|
||||
|
||||
test('diffuser converts oxygen output to reactor OTR per zone volume', () => {
|
||||
const diffuser = new Diffuser(makeConfig({ waterHeight: 4.5 }));
|
||||
diffuser.setFlow(24);
|
||||
|
||||
const expected = diffuser.getOutput().oKgo2H * 1000 * 24 / 500;
|
||||
assert.ok(Math.abs(diffuser.getReactorOtr(500) - expected) < 1e-8);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user