test_func.ts 8.14 KiB
/**
 * IMPORTANT !
 * décommenter la ligne suivante (import { expect } from "./mock_jasmine") dans le cas d'une fonction
 * qui utilise la fonction expect() de Jasmine mais qui doit être exécutée en dehors de tests Jasmine
 */
// import { describe, expect, it, xdescribe } from "./mock_jasmine";
import { cLog } from "../src/util/log";
import { Message, MessageCode } from "../src/util/message";
import { Result } from "../src/util/result";
import { precDigits, precDist } from "./test_config";
/**
 * 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;
/**
 * 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
 * @return false en cas d'échec
export function compareArray(s: string, arrTest: number[], arrValid: number[]): boolean {
    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 false; }
    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);
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
if (!b) { return false; } } return true; } // export function compareArray2(s: string, arrTest: string[], arrValid: string[]): boolean { // 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 false; } // 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 false; } // } // return true; // } /** * 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
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
for (let j = 0; j < m1.extraVar.length; j++) { 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 (let j = 0; j < m2.extraVar.length; j++) { 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 (let j = 0; j < m1.extraVar.length; j++) { 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] + " a un type " + (typeof m1.extraVar[j]) + " incorrect, devrait être du type " + (typeof m2.extraVar[j])); if (!b) { return; } } // valeur des données for (let j = 0; j < m1.extraVar.length; j++) { 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; } } } } export function checkResult(val1: Result, val2: number, prec?: number) { expect(val1.ok).toBeTruthy("Result : computation error on Result " + val1.toString()); if (val1.ok) { /* * on demande une précision de vérification inférieure à la précision de calcul * pour ne pas échouer sur un arrondi sur le dernier chiffre * par ex : * précision demandée 0.001 * valeur attendue 1.301 * valeur calculée 1.3016, arrondie à 1.302, faisant échouer le test */ if (prec === undefined) { prec = Math.max(0, precDigits - 1); } expect(val1.vCalc).toBeCloseTo(val2, prec); } } /** * compare un résultat complémentaire et un tableau * @param s message * @param res Result contenant le résultat complémentaire * @param key clé du résultat complémentaire * @param objValid tableau de valeurs de référence
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
* @param epsilon tolérance pour les comparaisons de nombres */ export function compareExtraResult( s: string, res: Result, key: string, objValid: { [key: number]: number }, epsilon: number, ) { const nre = res.resultElements.length; let n1 = 0; for (let i = 0; i < nre; i++) { if (res.resultElements[i].getExtraResult(key) !== undefined) { n1++; } } 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 = res.resultElements[i].getExtraResult(key); 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; } } }