open-energymesh-offline-fir.../test/test.js

53 lines
1.5 KiB
JavaScript

const assert = require('assert');
const {
EnergyMesh,
Inverter,
Meter
} = require('../src/mesh.js');
function run() {
// Create mesh
const mesh = new EnergyMesh();
// Create devices and components
const inv = new Inverter('inv1', 'dev-inv1', 1000, 600); // generates 600W
const meter = new Meter('m1', 'dev-mtr1', 400); // consumes 400W
mesh.addInverter(inv);
mesh.addMeter(meter);
const result = mesh.computeFlow();
// Expect generation > consumption by 200W
assert.strictEqual(result.generationW, 600);
assert.strictEqual(result.consumptionW, 400);
assert.strictEqual(result.netFlowW, 200);
// Delta-sync: apply new generation/consumption values and verify updated flow
mesh.applyDeltaSync({
inverters: [{ id: 'inv1', outputW: 800 }],
meters: [{ id: 'm1', consumptionW: 500 }]
});
const updated = mesh.computeFlow();
assert.strictEqual(updated.generationW, 800);
assert.strictEqual(updated.consumptionW, 500);
assert.strictEqual(updated.netFlowW, 300);
// ADMM-enabled flow should be parity with baseline for this MVP path
const admmFlow = mesh.computeFlowADMM();
const baselineFlow = updated;
assert.strictEqual(admmFlow.generationW, baselineFlow.generationW);
assert.strictEqual(admmFlow.consumptionW, baselineFlow.consumptionW);
assert.strictEqual(admmFlow.netFlowW, baselineFlow.netFlowW);
}
try {
run();
console.log('ALL TESTS PASSED');
process.exit(0);
} catch (err) {
console.error('TEST FAILED', err);
process.exit(1);
}