An error occurred while loading the file. Please try again.
-
remi.clement authoreda0362f3d
/**
* 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; }
}
}