diff --git a/spec/value_ref/value_ref_indirect.spec.ts b/spec/value_ref/value_ref_indirect.spec.ts deleted file mode 100644 index aca3ba20d54efab48f4e95bc6fe2a572a1bf8212..0000000000000000000000000000000000000000 --- a/spec/value_ref/value_ref_indirect.spec.ts +++ /dev/null @@ -1,197 +0,0 @@ -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++; - } - }); - -}); diff --git a/src/nub.ts b/src/nub.ts index e5a8c7f7fb3e796b31c949fcc45b3ea065c7b322..e5cb9379d75054b1b2bdd0bb4da1ee4324903294 100644 --- a/src/nub.ts +++ b/src/nub.ts @@ -162,6 +162,7 @@ export abstract class Nub extends ComputeNode implements IObservable { if (newCalculatedParam) { this.calculatedParam = newCalculatedParam; } 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"); } } else { diff --git a/src/section/section_nub.ts b/src/section/section_nub.ts index c53b7cda13a8dd46ba051405868d6fb25932b461..49ce255f26d4a3c61eacec72da8aeaac894d33e0 100644 --- a/src/section/section_nub.ts +++ b/src/section/section_nub.ts @@ -96,6 +96,8 @@ export abstract class SectionNub extends Nub { this._children[0] = undefined; } this.replaceChild(0, s); + // Y from Section is not linkable here + this.section.prms.Y.undefineFamily(); } } }