Commit a73989e2 authored by Mathias Chouet's avatar Mathias Chouet :spaghetti:
Browse files

Remous : "Y" is not linkable anymore; updated tests

Showing with 3 additions and 197 deletions
+3 -197
import { CreateStructure, cSnCirc, cSnTrapez, LoiDebit, ParamsSectionCirc,
ParamsSectionTrapez, Session } from "../../src/index";
import { PabDimension, PabDimensionParams } from "../../src/pab/pab_dimension";
import { RegimeUniforme } from "../../src/regime_uniforme";
import { SectionParametree } from "../../src/section/section_parametree";
import { Dever, DeverParams } from "../../src/structure/dever";
/**
* IMPORTANT !
* Décommenter temporairement la ligne suivante (import { } from "./mock_jasmine")
* Pour exécuter ce code dans le débugger.
* Faire de même avec le fichier test_func.ts
*/
// import { describe, expect, it, xdescribe, xit } from "../mock_jasmine";
let nub1: RegimeUniforme;
let prm1: ParamsSectionCirc;
let nub2: SectionParametree;
let prm2: ParamsSectionTrapez;
let nub3: PabDimension;
let prm3: PabDimensionParams;
let nub4: Dever;
let prm4: DeverParams;
/**
* crée l'environnement de test.
* répété à chaque test car il manque un mock de beforeEach
*/
function createEnv() {
// Nub 1 : Régime Uniforme
const paramSect = new ParamsSectionCirc(2, 0.6613, 40, 1.2, 0.001, 1);
paramSect.Pr.singleValue = 0.01;
const sect = new cSnCirc(paramSect);
nub1 = new RegimeUniforme(sect);
prm1 = nub1.section.prms as ParamsSectionCirc;
// Nub 2 : Section Paramétrée
const prmsS = new ParamsSectionTrapez(1, 0.5, 1, 0.01, 1, 0.01, 2);
prmsS.Pr.singleValue = 0.01;
nub2 = new SectionParametree(new cSnTrapez(prmsS));
prm2 = nub2.section.prms as ParamsSectionTrapez; // = prmsS
// Nub 3 : Passe à Bassins : Dimensions
prm3 = new PabDimensionParams(2, 1, 0.5, 2);
nub3 = new PabDimension(prm3);
// Nub 4 : Déversoirs Dénoyés
prm4 = new DeverParams(0.5, 102, 10, 99);
prm4.Pr.singleValue = 0.01;
nub4 = new Dever(prm4);
nub4.addChild(
CreateStructure(
LoiDebit.WeirFree,
nub4,
false
)
);
Session.getInstance().clear();
Session.getInstance().registerNub(nub1);
Session.getInstance().registerNub(nub2);
Session.getInstance().registerNub(nub3);
Session.getInstance().registerNub(nub4);
}
describe("référence indirecte d'un paramètre à un autre : ", () => {
it("paramètre simple", () => {
// cas de figure :
// nub3.Y est lié à nub1.Y par l'intermédiaire de nub2.Y
// lecture de nub3.Y
createEnv();
prm3.Y.singleValue = 0.1; // valeur esclave, doit être masquée par la valeur maître (cad prm1.Y)
prm3.Y.defineReference(nub2.section, "Y");
prm2.Y.defineReference(nub1.section, "Y");
nub3.CalcSerie();
expect(prm3.Y.v).toBeCloseTo(0.6613);
});
it("paramètre varié", () => {
// cas de figure :
// nub3.Y est lié à nub1.Y par l'intermédiaire de nub2.Y
// lecture de nub3.Y
createEnv();
prm3.Y.singleValue = 0.1; // valeur esclave, doit être masquée par la valeur maître (cad prm1.Y)
prm3.Y.defineReference(nub2.section, "Y");
prm2.Y.defineReference(nub1.section, "Y");
prm1.Y.setValues(2, 5, 1);
nub3.CalcSerie();
expect(nub3.result.nbResultElements).toBe(4);
});
it("résultat simple", () => {
// cas de figure :
// nub3.Y est lié à nub1.Y par l'intermédiaire de nub2.Y
// lecture de nub3.Y
createEnv();
prm3.Y.singleValue = 0.1; // valeur esclave, doit être masquée par la valeur maître (cad prm1.Y)
prm3.Y.defineReference(nub2.section, "Y");
prm2.Y.defineReference(nub1.section, "Y");
prm1.Ks.singleValue = 42;
nub1.calculatedParam = prm1.Y;
nub3.CalcSerie();
expect(prm3.Y.v).toBeCloseTo(0.95);
});
it("résultat varié", () => {
// cas de figure :
// nub3.Y est lié à nub1.Y par l'intermédiaire de nub2.Y
// lecture de nub3.Y
createEnv();
prm3.Y.singleValue = 0.1; // valeur esclave, doit être masquée par la valeur maître (cad prm1.Y)
prm3.Y.defineReference(nub2.section, "Y");
prm2.Y.defineReference(nub1.section, "Y");
prm1.D.setValues(2.5, 7, 0.5);
prm1.Ks.singleValue = 42;
nub1.calculatedParam = prm1.Y;
nub3.CalcSerie();
expect(nub3.result.nbResultElements).toBe(10);
const refVals = [ 2.339, 2.506, 2.641, 2.755, 2.854, 2.942, 3.022, 3.095, 3.163, 3.226 ];
let i = 0;
for (const v of nub3.result.resultElements) {
expect(v).toBeDefined();
expect(v.vCalc).toBeCloseTo(refVals[i]);
i++;
}
});
it("résultat complémentaire simple", () => {
// cas de figure :
// nub1.Q est lié à nub4.Q par l'intermédiaire de nub2.Q
// lecture de nub3.Q
createEnv();
prm1.Q.singleValue = 0.1; // valeur esclave, doit être masquée par la valeur maître (cad prm4.Q)
prm1.Q.defineReference(nub2.section, "Q");
nub1.calculatedParam = prm1.Ks;
prm2.Q.defineReference(nub4, "CvQT");
nub4.calculatedParam = prm4.Z1;
nub1.CalcSerie();
expect(prm1.Q.v).toBeCloseTo(0.501);
});
it("résultat complémentaire varié", () => {
// cas de figure :
// nub1.Q est lié à nub4.CvQT par l'intermédiaire de nub2.Q
// lecture de nub3.Q
createEnv();
prm1.Q.singleValue = 0.1; // valeur esclave, doit être masquée par la valeur maître (cad prm4.Q)
prm1.Q.defineReference(nub2.section, "Q");
nub1.calculatedParam = prm1.Ks;
prm2.Q.defineReference(nub4, "CvQT");
prm4.Q.setValues(0.5, 4, 0.5);
nub4.calculatedParam = prm4.Z1;
nub1.CalcSerie();
expect(nub1.result.nbResultElements).toBe(8);
const refVals = [ 33.629, 68.304, 101.546, 136.533, 169.639, 205.066, 236.892, 273.287 ];
let i = 0;
for (const v of nub1.result.resultElements) {
expect(v).toBeDefined();
expect(v.vCalc).toBeCloseTo(refVals[i]);
i++;
}
});
});
...@@ -162,6 +162,7 @@ export abstract class Nub extends ComputeNode implements IObservable { ...@@ -162,6 +162,7 @@ export abstract class Nub extends ComputeNode implements IObservable {
if (newCalculatedParam) { if (newCalculatedParam) {
this.calculatedParam = newCalculatedParam; this.calculatedParam = newCalculatedParam;
} else { } else {
// @TODO throws when a new linkable nub is added, and all parameters are already linked !
throw Error("resetDefaultCalculatedParam : could not find any SINGLE parameter"); throw Error("resetDefaultCalculatedParam : could not find any SINGLE parameter");
} }
} else { } else {
......
...@@ -96,6 +96,8 @@ export abstract class SectionNub extends Nub { ...@@ -96,6 +96,8 @@ export abstract class SectionNub extends Nub {
this._children[0] = undefined; this._children[0] = undefined;
} }
this.replaceChild(0, s); this.replaceChild(0, s);
// Y from Section is not linkable here
this.section.prms.Y.undefineFamily();
} }
} }
} }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment