53 lines
1.5 KiB
JavaScript
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);
|
|
}
|