An error occurred while loading the file. Please try again.
-
Mathias Chouet authored72fc44f3
/**
* IMPORTANT !
* Décommenter temporairement la ligne suivante (import { } from "./mock_jasmine")
* Pour exécuter ce code dans le débugger.
*/
// import { describe, expect, it, xdescribe } from "../mock_jasmine";
import { MessageCode } from "../../src";
import { ParamCalculability } from "../../src/param/param-definition";
import { ParallelStructure } from "../../src/structure/parallel_structure";
import { Structure, StructureFlowMode, StructureFlowRegime } from "../../src/structure/structure";
import { LoiDebit, StructureType } from "../../src/structure/structure_props";
import { Result } from "../../src/util/result";
import { precDigits } from "../test_config";
import { checkResult } from "../test_func";
export function itCalcQ(
struct: Structure, Z1: number, W: number, Q: number,
mode?: StructureFlowMode, regime?: StructureFlowRegime, precDigits2?: number) {
struct.debug("itCalQ " + struct.constructor.name + " Z1=" + Z1 + " W=" + W + " Q=" + Q);
struct.prms.Z1.v = Z1;
struct.prms.W.v = W;
const res: Result = struct.Calc("Q");
struct.debug("struct.Calc(Q)=" + res.vCalc);
it("Q(Z1=" + Z1 + ",W=" + W + ") should be " + Q, () => {
if (precDigits2 === undefined) { precDigits2 = precDigits; }
struct.debug("struct.Calc(Q)=" + res.vCalc);
expect(res.vCalc).toBeCloseTo(Q, precDigits2);
});
if (mode !== undefined) {
it("Q(Z1=" + Z1 + ",W=" + W + ") Mode should be " + mode, () => {
expect(res.extraResults.ENUM_StructureFlowMode).toBe(mode);
});
}
if (regime !== undefined) {
it("Q(Z1=" + Z1 + ",W=" + W + ") Regime should be " + regime, () => {
expect(res.extraResults.ENUM_StructureFlowRegime).toBe(regime);
});
}
}
/**
* Test de calcul de tous les paramètres d'une loi de débit
* @param st Structure à tester
* @param mode Mode d'écoulement
* @param regime Régime d'écoulement
* @param bNotZDV Loi de débit ne permettant pas de calculer ZDV
*/
export function testStructure(
st: Structure,
mode: StructureFlowMode,
regime: StructureFlowRegime,
bNotZDV: boolean = false
) {
for (const prm of st.prms) {
if ([ParamCalculability.DICHO, ParamCalculability.EQUATION].includes(prm.calculability)) {
if (prm.symbol === "W" && prm.v === Infinity) {
// Le calcul de l'ouverture sur les seuils doit renvoyer une exception (cas impossible)
it(`Calc(${prm.symbol}) should return exception`, () => {
expect(
() => { st.Calc(prm.symbol); }
).toThrow(new Error("Structure:Calc : Calcul de W impossible sur un seuil"));
});
} else {
const ref: number = prm.v;
const res: Result = st.Calc(prm.symbol);
if (bNotZDV) {
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
// Les lois CEM88D et CUNGE80 ne font pas intervenir ZDV dans le calcul d'un orifice noyé
it(`Calc(${prm.symbol}) should return an error`, () => {
expect(
st.Calc(prm.symbol).code
).toBe(MessageCode.ERROR_STRUCTURE_ZDV_PAS_CALCULABLE);
});
} else {
// On ne teste pas le calcul de l'ouverture sur les seuils
it(`Calc(${prm.symbol}) should return ${ref}`, () => {
checkResult(res, ref);
});
}
prm.v = ref; // Go back to initial value for following tests
}
}
}
}
/**
* Test d'ouvrages en parallèle : calcul des débits individuels et test de tous les paramètres
* @param oPS objet ParallelStructure à tester
* @param iStTypes Liste ordonnée des types des ouvrages à tester
* @param iLoiDebits Liste ordonnée des lois de débit à tester
*/
export function testParallelStructures(oPS: ParallelStructure, iStTypes: number[], iLoiDebits: number[]) {
oPS.prms.Q.v = oPS.Calc("Q").vCalc;
for (let i = 0; i < oPS.structures.length; i++) {
const st: Structure = oPS.structures[i];
describe(`this.structures[${i}]: ${StructureType[iStTypes[i]]} Structure${LoiDebit[iLoiDebits[i]]}: `, () => {
// Tests sur les résultats complémentaires
it(`Calc(Q).extraResults[${i}.Q] should return ${oPS.structures[i].Calc("Q").vCalc}`, () => {
expect(
oPS.Calc("Q").extraResults[`ouvrage[${i}].Q`]
).toBe(
oPS.structures[i].Calc("Q").vCalc
);
});
// Tests de calcul des paramètres des ouvrages
for (const prm of st.prms) {
if (
prm.calculability === ParamCalculability.DICHO &&
prm.symbol !== "Z1" && prm.symbol !== "Z2"
) {
const ref: number = prm.v;
if (prm.symbol === "W" && prm.v === Infinity) {
// Le calcul de l'ouverture sur les seuils doit renvoyer une exception (cas impossible)
it(`Calc(${prm.symbol}) should return exception`, () => {
expect(
() => { oPS.Calc({
uid: oPS.structures[i].uid,
symbol: prm.symbol
}); }
).toThrow(new Error("Structure:Calc : Calcul de W impossible sur un seuil"));
});
} else if (
iStTypes[i] === StructureType.VanneRectangulaire &&
!oPS.structures[i].isZDVcalculable &&
prm.symbol === "ZDV"
) {
// Les lois CEM88D et CUNGE80 ne font pas intervenir ZDV dans le calcul d'un orifice noyé
it(`Calc(${prm.symbol}) should return an error`, () => {
expect(
oPS.Calc({
uid: oPS.structures[i].uid,
symbol: prm.symbol
}).code
).toBe(MessageCode.ERROR_STRUCTURE_ZDV_PAS_CALCULABLE);
});
141142143144145146147148149150151152153154155156157158159160161162163164165166167
} else if (
iLoiDebits[i] === LoiDebit.TriangularWeirFree &&
prm.symbol === "alpha2"
) {
// Le calcul de l'angle de l'équation triangulaire n'est pas assez précis
it(`Calc(${prm.symbol}) should return ${ref}`, () => {
checkResult(oPS.Calc({
uid: oPS.structures[i].uid,
symbol: prm.symbol
}), ref, 1);
});
} else {
// Cas normal : On teste la valeur calculée
it(`Calc(${prm.symbol}) should return ${ref}`, () => {
checkResult(oPS.Calc({
uid: oPS.structures[i].uid,
symbol: prm.symbol
}), ref);
});
}
prm.v = ref; // Go back to initial value for following tests
}
}
});
}
}