From cbe9cc2a6703ed7b88797ee942db67c74bf99bc1 Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Thu, 8 Feb 2018 12:19:45 +0100 Subject: [PATCH] =?UTF-8?q?ticket=20#36=20:=20Result=20renomm=C3=A9=20en?= =?UTF-8?q?=20ResultElement,=20CalcResult=20en=20Result=20et=20constitu?= =?UTF-8?q?=C3=A9=20d'un=20ResultElement[]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remous_rect_euler_pentefaible.spec.ts | 8 +- .../remous_rect_euler_penteforte.spec.ts | 10 +- .../remous_rect_rk4_pentefaible.spec.ts | 10 +- .../remous/remous_rect_rk4_penteforte.spec.ts | 12 +- .../remous_rect_trapezes_pentefaible.spec.ts | 14 +- .../remous_rect_trapezes_penteforte.spec.ts | 12 +- spec/remous/test-remous-fenetre.ts | 14 +- spec/structure/rectangular_structure.ts | 6 +- spec/structure/structure.spec.ts | 8 +- src/index.ts | 2 +- src/remous.ts | 44 ++-- src/section/newton.ts | 5 +- src/util/calcresult.ts | 142 ------------ src/util/result.ts | 218 +++++++++++++----- src/util/resultelement.ts | 125 ++++++++++ 15 files changed, 353 insertions(+), 277 deletions(-) delete mode 100644 src/util/calcresult.ts create mode 100644 src/util/resultelement.ts diff --git a/spec/remous/remous_rect_euler_pentefaible.spec.ts b/spec/remous/remous_rect_euler_pentefaible.spec.ts index 1d7d6c2c..d107b505 100644 --- a/spec/remous/remous_rect_euler_pentefaible.spec.ts +++ b/spec/remous/remous_rect_euler_pentefaible.spec.ts @@ -4,7 +4,7 @@ import { cLog } from "../../src/util/log"; import { Message, MessageCode } from "../../src/util/message"; import { compareArray, compareLog, compareObject } from "../test_func"; import { precDist } from "../test_config"; -import { CalcResult } from "../../src/util/calcresult"; +import { Result } from "../../src/util/result"; describe("Class Remous / section rectangulaire :", () => { describe("méthode Euler explicite :", () => { @@ -241,7 +241,7 @@ describe("Class Remous / section rectangulaire :", () => { let rem = new CourbeRemous(prem); - let res: CalcResult = rem.calculRemous(undefined); + let res: Result = rem.calculRemous(undefined); // données de validation : version Typescript (Oct 2017) méthode des trapèzes @@ -270,7 +270,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("faible pente, pas de ressaut, Yamont > Yc, Yc < Yaval < Yn", () => { @@ -323,7 +323,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); }); }); diff --git a/spec/remous/remous_rect_euler_penteforte.spec.ts b/spec/remous/remous_rect_euler_penteforte.spec.ts index 770317ea..8a6670d9 100644 --- a/spec/remous/remous_rect_euler_penteforte.spec.ts +++ b/spec/remous/remous_rect_euler_penteforte.spec.ts @@ -69,7 +69,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.x = 0; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("forte pente, ressaut après l'aval", () => { @@ -134,7 +134,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.x = 100; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); // it("forte pente, ressaut (1 point) à l'intérieur du bief", () => { @@ -267,7 +267,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.xmax = 3.75; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("forte pente, pas de ressaut, Yaval < Yc, Yamont < Yn", () => { @@ -331,7 +331,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.INFO_REMOUS_CALCUL_TORRENTIEL)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("forte pente, pas de ressaut, Yaval < Yc, Yn < Yamont < Yc", () => { @@ -384,7 +384,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.INFO_REMOUS_CALCUL_TORRENTIEL)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); }); }); diff --git a/spec/remous/remous_rect_rk4_pentefaible.spec.ts b/spec/remous/remous_rect_rk4_pentefaible.spec.ts index dac7b903..25e8802c 100644 --- a/spec/remous/remous_rect_rk4_pentefaible.spec.ts +++ b/spec/remous/remous_rect_rk4_pentefaible.spec.ts @@ -80,7 +80,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.x = 0; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("faible pente, ressaut (1 point) à l'intérieur du bief", () => { @@ -145,7 +145,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.xmax = 5; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); xit("faible pente, ressaut (plusieurs points) à l'intérieur du bief", () => { // désactivé car échoue depuis les modifs apportées depuis la version PHP (calcul du ressaut hydraulique) @@ -204,7 +204,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.xmax = 1; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("faible pente, pas de ressaut, Yamont > Yc, Yaval > Yn", () => { @@ -257,7 +257,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("faible pente, pas de ressaut, Yamont > Yc, Yc < Yaval < Yn", () => { @@ -310,7 +310,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); }); }); diff --git a/spec/remous/remous_rect_rk4_penteforte.spec.ts b/spec/remous/remous_rect_rk4_penteforte.spec.ts index de0ffec3..471d81c6 100644 --- a/spec/remous/remous_rect_rk4_penteforte.spec.ts +++ b/spec/remous/remous_rect_rk4_penteforte.spec.ts @@ -78,7 +78,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.x = 0; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("forte pente, ressaut après l'aval", () => { @@ -143,7 +143,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.x = 100; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); xit("forte pente, ressaut (1 point) à l'intérieur du bief", () => { // désactivé car échoue depuis les modifs apportées depuis la version PHP (calcul du ressaut hydraulique) @@ -208,7 +208,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.xmax = 90; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); xit("forte pente, ressaut (plusieurs points) à l'intérieur du bief", () => { // désactivé car échoue depuis les modifs apportées depuis la version PHP (calcul du ressaut hydraulique) @@ -268,7 +268,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.xmax = 3.75; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("forte pente, pas de ressaut, Yaval < Yc, Yamont < Yn", () => { @@ -321,7 +321,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.INFO_REMOUS_CALCUL_TORRENTIEL)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("forte pente, pas de ressaut, Yaval < Yc, Yn < Yamont < Yc", () => { @@ -374,7 +374,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.INFO_REMOUS_CALCUL_TORRENTIEL)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); }); }); diff --git a/spec/remous/remous_rect_trapezes_pentefaible.spec.ts b/spec/remous/remous_rect_trapezes_pentefaible.spec.ts index 83dbfe08..7f5f3f93 100644 --- a/spec/remous/remous_rect_trapezes_pentefaible.spec.ts +++ b/spec/remous/remous_rect_trapezes_pentefaible.spec.ts @@ -74,7 +74,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.x = 0; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("faible pente, ressaut (1 point) à l'intérieur du bief", () => { @@ -139,7 +139,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.xmax = 5; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); xit("faible pente, ressaut (plusieurs points) à l'intérieur du bief (1)", () => { // désactivé car échoue depuis les modifs apportées depuis la version PHP (calcul du ressaut hydraulique) @@ -210,7 +210,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.xmax = 1; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); xit("faible pente, ressaut (plusieurs points) à l'intérieur du bief (2)", () => { // désactivé car échoue depuis les modifs apportées depuis la version PHP (calcul du ressaut hydraulique) @@ -269,7 +269,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.xmax = 0.9; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); }); @@ -323,7 +323,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("faible pente, pas de ressaut, Yamont > Yc, Yc < Yaval < Yn", () => { @@ -376,7 +376,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("faible pente, pas de fluvial, torrentiel tronqué, calcul Hs", () => { @@ -436,6 +436,6 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.x = 15; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); }); diff --git a/spec/remous/remous_rect_trapezes_penteforte.spec.ts b/spec/remous/remous_rect_trapezes_penteforte.spec.ts index 86363194..4104df84 100644 --- a/spec/remous/remous_rect_trapezes_penteforte.spec.ts +++ b/spec/remous/remous_rect_trapezes_penteforte.spec.ts @@ -78,7 +78,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.x = 0; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("forte pente, ressaut après l'aval", () => { @@ -144,7 +144,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.x = 100; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("forte pente, ressaut (1 point) à l'intérieur du bief", () => { @@ -208,7 +208,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.xmax = 95; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); xit("forte pente, ressaut (plusieurs points) à l'intérieur du bief", () => { // désactivé car échoue depuis les modifs apportées depuis la version PHP (calcul du ressaut hydraulique) @@ -268,7 +268,7 @@ describe("Class Remous / section rectangulaire :", () => { m.extraVar.xmax = 3.75; expLog.add(m); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("forte pente, pas de ressaut, Yaval < Yc, Yamont < Yn", () => { @@ -328,7 +328,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.INFO_REMOUS_CALCUL_TORRENTIEL)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); it("forte pente, pas de ressaut, Yaval < Yc, Yn < Yamont < Yc", () => { @@ -381,7 +381,7 @@ describe("Class Remous / section rectangulaire :", () => { expLog.add(new Message(MessageCode.INFO_REMOUS_CALCUL_TORRENTIEL)); - compareLog(res.log, expLog); + compareLog(res.globalLog, expLog); }); }); }); diff --git a/spec/remous/test-remous-fenetre.ts b/spec/remous/test-remous-fenetre.ts index 481cb1b2..e62ae2aa 100644 --- a/spec/remous/test-remous-fenetre.ts +++ b/spec/remous/test-remous-fenetre.ts @@ -3,7 +3,7 @@ import { CourbeRemous, CourbeRemousParams, MethodeResolution } from "../../src/r import { cSnRectang, ParamsSectionRectang } from "../../src/section/section_rectang"; import { equalEpsilon, compareArray } from "../test_func"; import { Result } from "../../src/util/result"; -import { CalcResult } from "../../src/util/calcresult"; +import { ResultElement } from "../../src/util/resultelement"; /* Tentative de validation automatique du calcul des courbes de remous. @@ -190,22 +190,22 @@ function testFenetre() { // "trX": string[], // "tRes": { [key: number]: number }, // } = r.res; - const res: CalcResult = r.res; + const res: Result = r.res; expect(res.ok).toBeTruthy("erreur de calcul de la courbe globale"); const remous = r.remous; // ligne fluviale totale, utilisée pour les conditions initiales // const ligneFluviale: { [key: number]: number; } = remous.calculFluvial(); - const rLigneFluviale: Result = remous.calculFluvial(); + const rLigneFluviale: ResultElement = remous.calculFluvial(); expect(rLigneFluviale.ok).toBeTruthy("erreur de calcul de la ligne fluviale"); - const ligneFluviale: { [key: number]: number; } = rLigneFluviale.extraResults["trY"]; + const ligneFluviale: { [key: number]: number; } = rLigneFluviale.getExtraResult("trY"); // ligne torrentielle totale, utilisée pour les conditions initiales // const ligneTorrentielle: { [key: number]: number; } = remous.calculTorrentiel(); - const rLigneTorrentielle: Result = remous.calculTorrentiel(); + const rLigneTorrentielle: ResultElement = remous.calculTorrentiel(); expect(rLigneTorrentielle.ok).toBeTruthy("erreur de calcul de la ligne torrentielle"); - const ligneTorrentielle: { [key: number]: number; } = rLigneTorrentielle.extraResults["trY"]; + const ligneTorrentielle: { [key: number]: number; } = rLigneTorrentielle.getExtraResult("trY"); console.log(remous.log.toString()); // let ms = r["remous"].log.messages; @@ -283,7 +283,7 @@ function testFenetre() { console.log("computeFenetre y am/av=" + yAmont + " " + yAval); const r2 = computeFenetreRect(yAmont, yAval, +xBief2 - +xBief1, i1 === ni); - const resFenetre: CalcResult = r2.res; + const resFenetre: Result = r2.res; expect(resFenetre.ok).toBeTruthy("erreur de calcul de la fenêtre"); let trX_fenetre = resFenetre.getExtraResult("trX"); let flu_fenetre = resFenetre.getExtraResult("flu"); diff --git a/spec/structure/rectangular_structure.ts b/spec/structure/rectangular_structure.ts index a5577499..b9b9cecd 100644 --- a/spec/structure/rectangular_structure.ts +++ b/spec/structure/rectangular_structure.ts @@ -43,12 +43,12 @@ export function itCalcQ( }); if (mode !== undefined) { it("Q(Z1=" + Z1 + ",W=" + W + ") Mode should be " + mode, () => { - expect(res.extraVar.Mode).toBe(mode); - }); + expect(res.extraResults.Mode).toBe(mode); + }); } if (regime !== undefined) { it("Q(Z1=" + Z1 + ",W=" + W + ") Regime should be " + regime, () => { - expect(res.extraVar.Regime).toBe(regime); + expect(res.extraResults.Regime).toBe(regime); }); } } diff --git a/spec/structure/structure.spec.ts b/spec/structure/structure.spec.ts index 53e0a674..5a976904 100644 --- a/spec/structure/structure.spec.ts +++ b/spec/structure/structure.spec.ts @@ -83,25 +83,25 @@ describe("Class Structure: ", () => { it("h1=h2 => Q=0", () => { structTest.prms.Z2.v = structTest.prms.Z1.v; checkResult(structTest.Calc("Q"), 0); - expect(structTest.Calc("Q").extraVar).toEqual(flagsNull); + expect(structTest.Calc("Q").extraResults).toEqual(flagsNull); structTest.prms.Z2.v = 15; }); it("W=0 => Q=0", () => { structTest.prms.W.v = 0; checkResult(structTest.Calc("Q"), 0); - expect(structTest.Calc("Q").extraVar).toEqual(flagsNull); + expect(structTest.Calc("Q").extraResults).toEqual(flagsNull); structTest.prms.W.v = Infinity; }); it("Q=0 => h1=h2", () => { structTest.prms.Q.v = 0; checkResult(structTest.Calc("h1"), structTest.prms.h2.v); - expect(structTest.Calc("h1").extraVar).toEqual(flagsNull); + expect(structTest.Calc("h1").extraResults).toEqual(flagsNull); structTest.prms.Q.v = 1; }); it("Q=0 => W=0", () => { structTest.prms.Q.v = 0; checkResult(structTest.Calc("W"), 0); - expect(structTest.Calc("W").extraVar).toEqual(flagsNull); + expect(structTest.Calc("W").extraResults).toEqual(flagsNull); structTest.prms.Q.v = 1; }); // TODO Test inversion de débit diff --git a/src/index.ts b/src/index.ts index a939be42..2da8a0d6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,7 +17,7 @@ export * from "./util/numericalstring"; export * from "./util/message"; export * from "./util/log"; export * from "./util/result"; -export * from "./util/calcresult"; +export * from "./util/resultelement"; export * from "./util/pair"; export * from "./util/interval"; export * from "./pab/pab_dimension"; diff --git a/src/remous.ts b/src/remous.ts index 9341d9da..b6255523 100644 --- a/src/remous.ts +++ b/src/remous.ts @@ -1,7 +1,7 @@ import { ParamsSection, acSection } from "./section/section_type"; import { XOR, round } from "./base"; +import { ResultElement } from "./util/resultelement"; import { Result } from "./util/result"; -import { CalcResult } from "./util/calcresult"; import { ParamsEquation, ParamDefinition, ParamCalculability, ComputeNodeType, ParamDomainValue } from "./param"; import { Dichotomie } from "./dichotomie"; import { Nub } from "./nub"; @@ -359,11 +359,11 @@ export class CourbeRemous extends Nub { * Calcul d'une courbe de remous en fluvial ou torrentiel * @param YCL Condition limite amont (torrentiel) ou aval (fluvial) */ - private calcul(YCL: number): Result + private calcul(YCL: number): ResultElement // { [key: number]: number } { let trY: { [key: number]: number; } = {}; - const res = new Result(undefined); + const res = new ResultElement(); if (this.Dx > 0) { // Calcul depuis l'aval @@ -451,11 +451,9 @@ export class CourbeRemous extends Nub { /** * calcul de la ligne fluviale depuis l'aval (si possible) */ - public calculFluvial(): Result { + public calculFluvial(): ResultElement { if (!this.Sn.HautCritique.ok) - return new Result(new Message(MessageCode.ERROR_REMOUS_ARRET_CRITIQUE)); - - // let res: { [key: number]: number; } = {}; + return new ResultElement(new Message(MessageCode.ERROR_REMOUS_ARRET_CRITIQUE)); // Calcul depuis l'aval if (this.Sn.HautCritique.vCalc <= this.prms.Yaval.v) { @@ -469,7 +467,7 @@ export class CourbeRemous extends Nub { else { this.debug("Condition limite aval (" + this.prms.Yaval.v + ") < Hauteur critique (" + this.Sn.HautCritique + ") : pas de calcul possible depuis l'aval"); // this._log.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AVAL)); - res = new Result(undefined); + res = new ResultElement(); res.addMessage(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AVAL)); } @@ -479,11 +477,9 @@ export class CourbeRemous extends Nub { /** * calcul de la ligne torrentielle depuis l'amont (si possible) */ - public calculTorrentiel(): Result { + public calculTorrentiel(): ResultElement { if (!this.Sn.HautCritique.ok) - return new Result(new Message(MessageCode.ERROR_REMOUS_ARRET_CRITIQUE)); - - // let res: { [key: number]: number; } = {}; + return new ResultElement(new Message(MessageCode.ERROR_REMOUS_ARRET_CRITIQUE)); // Calcul depuis l'amont if (this.Sn.HautCritique.vCalc >= this.prms.Yamont.v) { @@ -497,7 +493,7 @@ export class CourbeRemous extends Nub { else { // this._log.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT)); this.debug("Condition limite amont (" + this.prms.Yamont.v + ") > Hauteur critique (" + this.Sn.HautCritique + ") : pas de calcul possible depuis l'amont"); - res = new Result(undefined); + res = new ResultElement(); res.addMessage(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT)); } @@ -514,21 +510,19 @@ export class CourbeRemous extends Nub { // "trX": string[], // "tRes": { [key: number]: number } // } - CalcResult { - const res = new CalcResult(); + Result { + const res = new Result(); // let Yc: number = this.Sn.Calc("Yc"); const rYC = this.Sn.Calc("Yc"); if (!rYC.ok) { - res.addResult(rYC); - return res; + return rYC; } const Yc: number = rYC.vCalc; const rB: Result = this.Sn.Calc("B", this.Sn.prms.YB.v) if (!rB.ok) { - res.addResult(rB); - return res; + return rB; } let m: Message = new Message(MessageCode.INFO_REMOUS_LARGEUR_BERGE); @@ -565,14 +559,14 @@ export class CourbeRemous extends Nub { // Calcul des courbes de remous // let crbFlu: { [key: number]: number; } = this.calculFluvial(); - let rCourbeFlu: Result = this.calculFluvial(); + let rCourbeFlu: ResultElement = this.calculFluvial(); // if (!rCourbeFlu.ok) { res.addLog(rCourbeFlu.log); // return res; // } // let crbTor: { [key: number]: number; } = this.calculTorrentiel(); - let rCourbeTor: Result = this.calculTorrentiel(); + let rCourbeTor: ResultElement = this.calculTorrentiel(); // if (!rCourbeTor.ok) { res.addLog(rCourbeTor.log); // return res; @@ -827,19 +821,19 @@ export class CourbeRemous extends Nub { } //return { "flu": crbFlu, "tor": crbTor, "trX": trX, "tRes": tRes }; - const rFlu = new Result(undefined); + const rFlu = new ResultElement(); rFlu.addExtraResult("flu", crbFlu); res.addResult(rFlu); - const rTor = new Result(undefined); + const rTor = new ResultElement(); rTor.addExtraResult("tor", crbTor); res.addResult(rTor); - const rX = new Result(undefined); + const rX = new ResultElement(); rX.addExtraResult("trX", trX); res.addResult(rX); - const rVar = new Result(undefined); + const rVar = new ResultElement(); rVar.addExtraResult("tRes", tRes); res.addResult(rVar); diff --git a/src/section/newton.ts b/src/section/newton.ts index 1751609c..78ddacb2 100644 --- a/src/section/newton.ts +++ b/src/section/newton.ts @@ -2,6 +2,7 @@ import { XOR, Debug } from "../base" import { cParamsCanal } from "./section_type" import { Result } from "../util/result"; import { Message, MessageCode } from "../util/message"; +import { ResultElement } from "../util/resultelement"; export abstract class acNewton extends Debug { protected rTol: number; @@ -78,9 +79,9 @@ export abstract class acNewton extends Debug { if (this.iCpt >= this.iCptMax) { // non convergence const m = new Message(MessageCode.ERROR_NEWTON_NON_CONVERGENCE); - const res = new Result(m); + const res = new ResultElement(m); res.addExtraResult("res", rX); - return res; + return new Result(res); } const rDER = this.CalcDer(rX); diff --git a/src/util/calcresult.ts b/src/util/calcresult.ts deleted file mode 100644 index 0b5311fe..00000000 --- a/src/util/calcresult.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { cLog } from "./log"; -import { Result } from "./result"; -import { MessageSeverity, Message } from "./message"; - -/** - * Résultat global d'un calcul - * Peut comporter un ou plusieurs Result. - */ -// tslint:disable-next-line:max-classes-per-file -export class CalcResult { - /** - * Messages (erreurs, infos, ...) - */ - private _log: cLog; - - private _results: Result[]; - - constructor() { - this._log = new cLog(); - this._results = []; - } - - public addResult(r: Result) { - this._results.push(r); - } - - /** - * Insert result r at index i - * @param r Result to insert - * @param i Index position - */ - public insertResult(r: Result, i: number) { - this._results.splice(i, 0, r); - } - - /** - * @param name nom du résultat complémentaire - * @returns le nombre la taille d'un résultat complémentaire - */ - public extraResultLength(name: string): number { - const r = this.getExtraResult(name); - if (r === undefined) { - return 0; - } - return Object.keys(r).length; - } - - public getExtraResult(name: string): any { - const res = []; - for (const r of this._results) { - const er = r.getExtraResult(name); - if (er !== undefined) { - res.push(er); - } - } - - switch (res.length) { - case 0: - return undefined; - - case 1: - return res[0]; - - default: - throw new Error( - "CalcResult.getExtraResult() : il existe plusieurs 'Result' avec le nom '" + name + "'", - ); - } - } - - public get log() { - return this._log; - } - - protected get messageCount(): number { - return this._log.messages.length; - } - - /** - * ajoute un message au journal - */ - public addMessage(m: Message) { - this._log.add(m); - } - - /** - * ajoute tous les messages d'un journal au journal - */ - public addLog(l: cLog) { - this._log.addLog(l); - } - - /** - * insert un message en début de liste - */ - public insertMessage(m: Message) { - this._log.insert(m); - } - - /** - * Teste si tous les résultats + complémentaires sont valides et journal sans erreur - * @returns true si le test est valide - */ - public get ok(): boolean { - return this.resultsOk && !this.hasErrorMessages; - } - - /** - * Teste si tous les résultats + complémentaires sont valides - * @returns true si le test est valide - */ - public get resultsOk(): boolean { - if (this._results.length === 0 && this.log.messages.length === 0) { - return false; - } - for (const r of this._results) { - if (!r.resultsOk) { - return false; - } - } - return true; - } - - /** - * @returns true si au moins un message de log comporte un code d'erreur - */ - public get hasErrorMessages(): boolean { - for (const m of this.log.messages) { - if (m.getSeverity() === MessageSeverity.ERROR) { - return true; - } - } - - for (const r of this._results) { - if (r.hasErrorMessages) { - return true; - } - } - - return false; - } -} diff --git a/src/util/result.ts b/src/util/result.ts index 1c726fb1..2b64d20a 100644 --- a/src/util/result.ts +++ b/src/util/result.ts @@ -1,101 +1,199 @@ import { cLog } from "./log"; -import { Message, MessageCode, MessageSeverity } from "./message"; -import { CalcResult } from "./calcresult"; +import { ResultElement } from "./resultelement"; +import { MessageSeverity, Message, MessageCode } from "./message"; /** - * Résultat de calcul comprenant la valeur du résultat et des calculs annexes (flag, calculs intermédiaires...) - * Représente une valeur unique + * Résultat global d'un calcul + * Peut comporter un ou plusieurs Result. */ // tslint:disable-next-line:max-classes-per-file -export class Result extends CalcResult { +export class Result { /** - * Valeur calculée + * Messages (erreurs, infos, ...) */ - private _vCalc: number; + private _globalLog: cLog; - /** - * résultats complémentaires - */ - private _extraResults: { [key: string]: any }; - - constructor(v: number | Message, d?: {}) { - super(); - if (typeof v === "number") { - this._vCalc = v; - const m = new Message(MessageCode.ERROR_OK); - m.extraVar = d; - this.addMessage(m); - } else if (v instanceof Message) { - if (d !== undefined) { - throw new Error("appel à Result.constructor() invalide"); + private _results: ResultElement[]; + + constructor(v?: number | Message | ResultElement, d?: any) { + this._globalLog = new cLog(); + this._results = []; + if (typeof (v) === "number" || v instanceof Message) + this._results.push(new ResultElement(v)); + else if (v instanceof ResultElement) + this._results.push(v); + + if (d != undefined) { + for (const i in d) { + const re = new ResultElement(); + re.addExtraResult(i, d[i]); } - this.addMessage(v); } - this._extraResults = {}; } - get vCalc() { return this._vCalc; } + /** + * retourne le journal du 1er ResultElement + */ + public get globalLog() { + return this._globalLog; + } - get code(): MessageCode { - if (this.messageCount !== 1) { - throw new Error("appel à Result.code invalide, il n'y pas exactement un message de log"); - } - return this.log.messages[0].code; + private get result(): ResultElement { + if (this._results.length == 0) + throw new Error("appel à la méthode de Result.result() invalide, il n'y a pas au moins un 'ResultElement'"); + + return this._results[0]; } - get extraVar() { - if (this.messageCount !== 1) { - throw new Error("appel à Result.extraVar invalide, il n'y pas exactement un message de log"); - } - return this.log.messages[0].extraVar; + /** + * @return true si il existe au moins 1 ResultElement dans le tableau + */ + get hasResults(): boolean { + return this._results.length > 0; } - private get hasExtraResults(): boolean { - return Object.keys(this._extraResults).length > 0; + /** + * @return le résultat de calcul du 1er ResultElement + */ + get vCalc(): number { + return this.result.vCalc; } - public get resultsOk(): boolean { - return this._vCalc !== undefined || this.hasExtraResults; + /** + * retourne le journal du 1er ResultElement + */ + public get log() { + // return this._globalLog; + return this.result.log; } - public get hasErrorMessages(): boolean { - for (const m of this.log.messages) { - if (m.code !== MessageCode.ERROR_OK && m.getSeverity() === MessageSeverity.ERROR) { - return true; + /** + * retourne le code du 1er ResultElement + */ + public get code(): MessageCode { + return this.result.code; + } + + /** + * retourne les résultats complémentaires du 1er ResultElement + */ + get extraResults() { + return this.result.extraResults; + } + + public addResult(r: ResultElement) { + this._results.push(r); + } + + /** + * Insert result r at index i + * @param r Result to insert + * @param i Index position + */ + public insertResult(r: ResultElement, i: number) { + this._results.splice(i, 0, r); + } + + /** + * @param name nom du résultat complémentaire + * @returns le nombre la taille d'un résultat complémentaire + */ + public extraResultLength(name: string): number { + const r = this.getExtraResult(name); + if (r === undefined) { + return 0; + } + return Object.keys(r).length; + } + + public getExtraResult(name: string): any { + const res = []; + for (const r of this._results) { + const er = r.getExtraResult(name); + if (er !== undefined) { + res.push(er); } } - return false; + + switch (res.length) { + case 0: + return undefined; + + case 1: + return res[0]; + + default: + throw new Error( + "Result.getExtraResult() : il existe plusieurs ResultElement avec un extratresult dont le nom est '" + name + "'", + ); + } } + // protected get messageCount(): number { + // return this._globalLog.messages.length; + // } + /** - * résultats complémentaires + * ajoute un message au journal */ + public addMessage(m: Message) { + this._globalLog.add(m); + } - public get extraResults() { - return this._extraResults; + /** + * ajoute tous les messages d'un journal au journal + */ + public addLog(l: cLog) { + this._globalLog.addLog(l); } - public addExtraResult(name: string, value: any) { - this._extraResults[name] = value; + /** + * insert un message en début de liste + */ + public insertMessage(m: Message) { + this._globalLog.insert(m); } /** - * @param name nom du résultat complémentaire à retourner - * @returns un résultat complémentaire par son nom + * Teste si tous les résultats + complémentaires sont valides et journal sans erreur + * @returns true si le test est valide */ - public getExtraResult(name: string): any { - for (const n in this._extraResults) { - if (n === name) { - return this._extraResults[n]; + public get ok(): boolean { + return this.resultsOk && !this.hasErrorMessages; + } + + /** + * Teste si tous les résultats + complémentaires sont valides + * @returns true si le test est valide + */ + public get resultsOk(): boolean { + if (this._results.length === 0 && this.log.messages.length === 0) { + return false; + } + for (const r of this._results) { + if (!r.resultsOk) { + return false; } } - return undefined; + return true; } - public toString(): string { - if (this._vCalc !== undefined) { - return String(this._vCalc); + /** + * @returns true si au moins un message de log comporte un code d'erreur + */ + public get hasErrorMessages(): boolean { + for (const m of this.log.messages) { + if (m.getSeverity() === MessageSeverity.ERROR) { + return true; + } + } + + for (const r of this._results) { + if (r.hasErrorMessages) { + return true; + } } - return JSON.stringify(this); + + return false; } } diff --git a/src/util/resultelement.ts b/src/util/resultelement.ts new file mode 100644 index 00000000..8d58b6f4 --- /dev/null +++ b/src/util/resultelement.ts @@ -0,0 +1,125 @@ +import { cLog } from "./log"; +import { Message, MessageCode, MessageSeverity } from "./message"; + +/** + * Résultat de calcul comprenant la valeur du résultat et des calculs annexes (flag, calculs intermédiaires...) + * Représente une valeur unique + */ +// tslint:disable-next-line:max-classes-per-file +export class ResultElement { + /** + * Valeur calculée + */ + private _vCalc: number; + + /** + * Messages (erreurs, infos, ...) + */ + private _log: cLog; + + /** + * résultats complémentaires + */ + private _extraResults: { [key: string]: any }; + + constructor(v?: number | Message) { + this._log = new cLog(); + if (typeof v === "number") { + this._vCalc = v; + } else if (v instanceof Message) { + this.addMessage(v); + } + this._extraResults = {}; + } + + get vCalc() { return this._vCalc; } + + public get log() { + return this._log; + } + + get code(): MessageCode { + if (this.messageCount !== 1) { + throw new Error("appel à Result.code invalide, il n'y pas exactement un message de log"); + } + return this._log.messages[0].code; + } + + get extraVar() { + if (this.messageCount !== 1) { + throw new Error("appel à Result.extraVar invalide, il n'y pas exactement un message de log"); + } + return this._log.messages[0].extraVar; + } + + private get hasExtraResults(): boolean { + return Object.keys(this._extraResults).length > 0; + } + + public get resultsOk(): boolean { + return this._vCalc !== undefined || this.hasExtraResults; + } + + private get messageCount(): number { + return this._log.messages.length; + } + + public get hasErrorMessages(): boolean { + for (const m of this._log.messages) { + if (m.code !== MessageCode.ERROR_OK && m.getSeverity() === MessageSeverity.ERROR) { + return true; + } + } + return false; + } + + public get ok(): boolean { + return this.resultsOk && !this.hasErrorMessages; + } + + /** + * ajoute un message au journal + */ + public addMessage(m: Message) { + this._log.add(m); + } + + /** + * insert un message en début de liste + */ + public insertMessage(m: Message) { + this._log.insert(m); + } + + /** + * résultats complémentaires + */ + + public get extraResults() { + return this._extraResults; + } + + public addExtraResult(name: string, value: any) { + this._extraResults[name] = value; + } + + /** + * @param name nom du résultat complémentaire à retourner + * @returns un résultat complémentaire par son nom + */ + public getExtraResult(name: string): any { + for (const n in this._extraResults) { + if (n === name) { + return this._extraResults[n]; + } + } + return undefined; + } + + public toString(): string { + if (this._vCalc !== undefined) { + return String(this._vCalc); + } + return JSON.stringify(this); + } +} -- GitLab