An error occurred while loading the file. Please try again.
-
Grand Francois authoredd4de75fe
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; }
}
}
}