nubtest.ts 7.13 KiB
import { Result } from "../src/util/result";
import { Nub } from "../src/nub";
import {
    ComputeNodeType, ParamCalculability, ParamDefinition, ParamDomain, ParamDomainValue, ParamsEquation,
 } from "../src/param";
import { cLog } from "../src/util/log";
import { Message, MessageCode } from "../src/util/message";
class NubTestParams extends ParamsEquation {
    private _A: ParamDefinition;
    private _B: ParamDefinition;
    private _C: ParamDefinition;
    constructor() {
        super();
        this._A = new ParamDefinition(ComputeNodeType.Test, "A", ParamDomainValue.POS_NULL, 1);
        this._B = new ParamDefinition(ComputeNodeType.Test, "B", ParamDomainValue.POS_NULL, 2);
        this._C = new ParamDefinition(ComputeNodeType.Test, "C", ParamDomainValue.POS_NULL, 3);
        this.addParamDefinition(this._A);
        this.addParamDefinition(this._B);
        this.addParamDefinition(this._C);
    get A() {
        return this._A;
    get B() {
        return this._B;
    get C() {
        return this._C;
export class NubTest extends Nub {
    constructor(prms: NubTestParams, dbg: boolean = false) {
        super(prms, dbg);
    protected setParametersCalculability() {
        this.getParameter("A").calculability = ParamCalculability.DICHO;
        this.getParameter("B").calculability = ParamCalculability.DICHO;
        this.getParameter("C").calculability = ParamCalculability.EQUATION;
    get prms(): NubTestParams {
        return this._prms as NubTestParams;
    Equation(): Result {
        // C = A+B
        return new Result(this.prms.A.v + this.prms.B.v);
export let nub = new NubTest(new NubTestParams());
/**
 * précision de calcul (nombre de décimales)
export let precDigits = 3;
/**
 * précision de calcul (max de abs(v-v'))
export let precDist: number = Math.pow(10, -precDigits);
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
/** * Compare deux valeurs réelles à un epsilon près * @param val1 Première valeur à comparer * @param val2 Deuxième valeur à comparer * @param epsilon Erreur de comparaison acceptable * @return Vrai si les valeurs sont égales, faux sinon */ export function equalEpsilon(val1: number, val2: number, epsilon: number = precDist) { return Math.abs(val1 - val2) < epsilon; } /** * Test jasmine de deux valeurs réelles à un epsilon près * @param val1 Première valeur à comparer * @param val2 Deuxième valeur à comparer */ export function check(val1: Result, val2: number) { expect(equalEpsilon(val1.vCalc, val2)).toBe(true); } /** * compare 2 objets * @param s message * @param objTest objet à tester * @param objValid objet de référence * @param epsilon tolérance pour les comparaisons de nombres */ export function compareObject( s: string, objTest: { [key: number]: number }, objValid: { [key: number]: number }, epsilon: number, ) { const n1 = Object.keys(objTest).length; const n2 = Object.keys(objValid).length; let b: boolean = n1 === n2; expect(b).toBeTruthy(s + ": longueur incorrecte " + n1 + ", devrait etre " + n2); if (!b) { return; } for (let i = 0; i < n1; i++) { const v1: number = objTest[+Object.keys(objTest)[i]]; const v2: number = objValid[+Object.keys(objValid)[i]]; b = equalEpsilon(v1, v2, epsilon); expect(b).toBeTruthy(s + " : " + i + "ieme valeur incorrecte " + v1 + ", devrait etre " + v2); if (!b) { return; } } } /** * compare 2 tableaux * @param s message * @param arrTest tableau à tester * @param arrValid tableau de référence */ export function compareArray(s: string, arrTest: string[], arrValid: number[]) { const n1 = arrTest.length; const n2 = arrValid.length; let b: boolean = n1 === n2; expect(b).toBeTruthy(s + ": longueur incorrecte " + n1 + ", devrait etre " + n2); if (!b) { return; } for (let i = 0; i < arrTest.length; i++) { const v1: number = +arrTest[i]; const v2: number = arrValid[i]; b = equalEpsilon(v1, v2); expect(b).toBeTruthy(s + " : " + i + "ieme valeur incorrecte " + v1 + ", devrait etre " + v2); if (!b) { return; } } }
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
/** * compare 2 journaux */ export function compareLog(logTest: cLog, logValid: cLog) { // console.log(JSON.stringify(logTest)); // console.log("journal :\n" + logTest.toString()); // taille const n1 = logTest.messages.length; const n2 = logValid.messages.length; let b: boolean = n1 === n2; expect(b).toBeTruthy("journal : nombre de messages incorrect (" + n1 + "), devrait etre " + n2); if (!b) { return; } // codes for (let i = 0; i < n1; i++) { const m1: Message = logTest.messages[i]; const m2: Message = logValid.messages[i]; b = m1.code === m2.code; expect(b).toBeTruthy( "journal : message n°" + i + ", code " + MessageCode[m1.code] + " incorrect, devrait être " + MessageCode[m2.code], ); if (!b) { return; } } // données for (let i = 0; i < n1; i++) { const m1: Message = logTest.messages[i]; const m2: Message = logValid.messages[i]; const code1 = MessageCode[m1.code]; // taille des données const nd1 = Object.keys(m1.extraVar).length; const nd2 = Object.keys(m2.extraVar).length; b = nd1 === nd2; expect(b).toBeTruthy( "journal : message n°" + i + ", code " + code1 + " : nombre de données incorrect " + nd1 + ", devrait etre " + nd2, ); if (!b) { return; } // clés des données for (const j in m1.extraVar) { b = m2.extraVar[j] !== undefined; expect(b).toBeTruthy( "journal : message n°" + i + ", code " + code1 + " : la donnée " + j + "=" + m1.extraVar[j] + " ne devrait pas être présente"); // if (!b) return; } for (const j in m2.extraVar) { b = m1.extraVar[j] !== undefined; expect(b).toBeTruthy( "journal : message n°" + i + ", code " + code1 + " : la donnée " + j + "=" + m2.extraVar[j] + " devrait être présente"); // if (!b) return; } // type des données for (const j in m1.extraVar) { b = typeof m1.extraVar[j] === typeof m2.extraVar[j]; expect(b).toBeTruthy( "journal : " + i + "ieme message, code " + code1 + " : la donnée " + j + "=" + m1.extraVar[j]
211212213214215216217218219220221222223224225226227228229230231232
+ " a un type " + (typeof m1.extraVar[j]) + " incorrect, devrait être du type " + (typeof m2.extraVar[j])); if (!b) { return; } } // valeur des données for (const j in m1.extraVar) { const d: any = m1.extraVar[j]; if (typeof d === "number") { b = equalEpsilon(d, m2.extraVar[j]); } else { b = d === m2.extraVar[j]; } expect(b).toBeTruthy( "journal : " + i + "ieme message, code " + code1 + " : la donnée " + j + "=" + m1.extraVar[j] + " a une valeur incorrecte, devrait être " + m2.extraVar[j]); if (!b) { return; } } } }