From 5f3a4a4500a7a1191741d8cf8dccf1df4c01bbf8 Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Wed, 7 Feb 2018 18:33:55 +0100 Subject: [PATCH] =?UTF-8?q?ticket=20#36=20:=20suppression=20de=20BaseResul?= =?UTF-8?q?t,=20Result=20h=C3=A9rite=20de=20CalcResult?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remous_rect_euler_pentefaible.spec.ts | 2 +- spec/remous/test-remous-fenetre.ts | 3 +- src/index.ts | 47 ++--- src/remous.ts | 3 +- src/util/calcresult.ts | 142 ++++++++++++++ src/util/result.ts | 182 +++--------------- 6 files changed, 199 insertions(+), 180 deletions(-) create mode 100644 src/util/calcresult.ts diff --git a/spec/remous/remous_rect_euler_pentefaible.spec.ts b/spec/remous/remous_rect_euler_pentefaible.spec.ts index 9b1088bf..1d7d6c2c 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/result"; +import { CalcResult } from "../../src/util/calcresult"; describe("Class Remous / section rectangulaire :", () => { describe("méthode Euler explicite :", () => { diff --git a/spec/remous/test-remous-fenetre.ts b/spec/remous/test-remous-fenetre.ts index 618f98fd..481cb1b2 100644 --- a/spec/remous/test-remous-fenetre.ts +++ b/spec/remous/test-remous-fenetre.ts @@ -2,7 +2,8 @@ import { CourbeRemous, CourbeRemousParams, MethodeResolution } from "../../src/remous"; import { cSnRectang, ParamsSectionRectang } from "../../src/section/section_rectang"; import { equalEpsilon, compareArray } from "../test_func"; -import { Result, CalcResult } from "../../src/util/result"; +import { Result } from "../../src/util/result"; +import { CalcResult } from "../../src/util/calcresult"; /* Tentative de validation automatique du calcul des courbes de remous. diff --git a/src/index.ts b/src/index.ts index 059f59cb..3443109f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,23 +1,24 @@ -export * from './base'; -export * from './param'; -export * from './parameters'; -export * from './nub'; -export * from './cond_distri'; -export * from './dichotomie'; -export * from './lechaptcalmon'; -export * from './regime_uniforme'; -export * from './remous'; -export * from './section/section_type'; -export * from './section/section_trapez'; -export * from './section/section_rectang'; -export * from './section/section_circulaire'; -export * from './section/section_puissance'; -export * from './util/definedvalue'; -export * from './util/numericalstring'; -export * from './util/message'; -export * from './util/log'; -export * from './util/result'; -export * from './util/pair'; -export * from './util/interval'; -export * from './pab/pab_dimension'; -export * from './pab/pab_puissance'; +export * from "./base"; +export * from "./param"; +export * from "./parameters"; +export * from "./nub"; +export * from "./cond_distri"; +export * from "./dichotomie"; +export * from "./lechaptcalmon"; +export * from "./regime_uniforme"; +export * from "./remous"; +export * from "./section/section_type"; +export * from "./section/section_trapez"; +export * from "./section/section_rectang"; +export * from "./section/section_circulaire"; +export * from "./section/section_puissance"; +export * from "./util/definedvalue"; +export * from "./util/numericalstring"; +export * from "./util/message"; +export * from "./util/log"; +export * from "./util/result"; +export * from "./util/calcresult"; +export * from "./util/pair"; +export * from "./util/interval"; +export * from "./pab/pab_dimension"; +export * from "./pab/pab_puissance"; diff --git a/src/remous.ts b/src/remous.ts index 81ae8fd1..9341d9da 100644 --- a/src/remous.ts +++ b/src/remous.ts @@ -1,6 +1,7 @@ import { ParamsSection, acSection } from "./section/section_type"; import { XOR, round } from "./base"; -import { Result, CalcResult } from "./util/result"; +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"; diff --git a/src/util/calcresult.ts b/src/util/calcresult.ts new file mode 100644 index 00000000..0b5311fe --- /dev/null +++ b/src/util/calcresult.ts @@ -0,0 +1,142 @@ +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 e8cda9dd..1c726fb1 100644 --- a/src/util/result.ts +++ b/src/util/result.ts @@ -1,70 +1,13 @@ import { cLog } from "./log"; import { Message, MessageCode, MessageSeverity } from "./message"; - -export abstract class BaseResult { - /** - * Messages (erreurs, infos, ...) - */ - private _log: cLog; - - constructor() { - this._log = new cLog(); - } - - public get log() { - return this._log; - } - - /** - * 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); - } - - /** - * @returns true si - */ - public get ok(): boolean { - return this.resultsOk && !this.hasErrorMessages; - } - - /** - * @returns true si tous les résultats (y compris les) sont - */ - public abstract get resultsOk(): boolean; - - /** - * @returns true si au moins un message de log comporte un code d'erreur - */ - public abstract get hasErrorMessages(): boolean; - - /** - * @param name nom du résultat complémentaire à retourner - * @returns un résultat complémentaire par son nom - */ - public abstract getExtraResult(name: string): any; -} +import { CalcResult } from "./calcresult"; /** * Résultat de calcul comprenant la valeur du résultat et des calculs annexes (flag, calculs intermédiaires...) * Représente une valeur unique */ -export class Result extends BaseResult { +// tslint:disable-next-line:max-classes-per-file +export class Result extends CalcResult { /** * Valeur calculée */ @@ -75,52 +18,52 @@ export class Result extends BaseResult { */ private _extraResults: { [key: string]: any }; - constructor(v: number | Message, d: {} = undefined) { + constructor(v: number | Message, d?: {}) { super(); - if (typeof v == "number") { + 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) + } else if (v instanceof Message) { + if (d !== undefined) { throw new Error("appel à Result.constructor() invalide"); + } this.addMessage(v); } this._extraResults = {}; - }; + } get vCalc() { return this._vCalc; } get code(): MessageCode { - if (this.messageCount != 1) + 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) + 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 messageCount(): number { - return this.log.messages.length; - } - private get hasExtraResults(): boolean { return Object.keys(this._extraResults).length > 0; } public get resultsOk(): boolean { - return this._vCalc != undefined || this.hasExtraResults; + return this._vCalc !== undefined || this.hasExtraResults; } public get hasErrorMessages(): boolean { - for (let m of this.log.messages) - if (m.code != MessageCode.ERROR_OK && m.getSeverity() == MessageSeverity.ERROR) + for (const m of this.log.messages) { + if (m.code !== MessageCode.ERROR_OK && m.getSeverity() === MessageSeverity.ERROR) { return true; + } + } return false; } @@ -136,92 +79,23 @@ export class Result extends BaseResult { 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 (let n in this._extraResults) - if (n == name) + for (const n in this._extraResults) { + if (n === name) { return this._extraResults[n]; + } + } return undefined; } public toString(): string { - if (this._vCalc != undefined) + if (this._vCalc !== undefined) { return String(this._vCalc); - return JSON.stringify(this); - } -} - -/** - * Résultat global d'un calcul - * Peut comporter un ou plusieurs Result. - */ -export class CalcResult extends BaseResult { - private _results: Result[]; - - constructor() { - super(); - this._results = []; - } - - private get result(): Result { - if (this._results.length != 1) - throw new Error("appel à une méthode de CalcResult invalide, il n'y a pas exactement un 'Result'"); - - return this._results[0]; - } - - public addResult(r: Result) { - this._results.push(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 { - let res = []; - for (let r of this._results) { - let 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 resultsOk(): boolean { - if (this._results.length == 0 && this.log.messages.length == 0) - return false; - for (let r of this._results) - if (!r.resultsOk) - return false; - return true; - } - - public get hasErrorMessages(): boolean { - for (let m of this.log.messages) - if (m.getSeverity() == MessageSeverity.ERROR) - return true; - - for (let r of this._results) - if (r.hasErrorMessages) - return true; - - return false; + return JSON.stringify(this); } } -- GitLab