Commit af9d17f0 authored by Grand Francois's avatar Grand Francois
Browse files

#45 ajout de tests unitaires de référence à un paramètre non fixé (à varier ou calculé)

Showing with 132 additions and 44 deletions
+132 -44
......@@ -83,7 +83,7 @@ class Expect {
public toEqual(expected: any) {
const res = this.actual === expected;
if (!res) {
console.warn("Test 'to be equal to' not tested");
console.warn("Test 'to be equal to' failed");
}
return res;
}
......
......@@ -4,11 +4,11 @@
* Pour exécuter ce code dans le débugger.
* Faire de même avec le fichier test_func.ts
*/
//import { describe, expect, it, xdescribe, xit } from "../mock_jasmine";
import { describe, expect, it, xdescribe, xit } from "../mock_jasmine";
import { NubTest, NubTestParams } from "../nubtest";
import { precDigits } from "../test_config";
import { ParamValueMode } from "../../src";
import { ParamValueMode, Result } from "../../src";
let nub1: NubTest;
let nub2: NubTest;
......@@ -17,7 +17,7 @@ let prm2: NubTestParams;
/**
* crée l'environnement de test.
* répété dans à chaque test car il manque un mock de beforeEach
* répété à chaque test car il manque un mock de beforeEach
*/
function createEnv() {
// Nub maître (dont on référence la valeur du paramètre A)
......@@ -29,8 +29,8 @@ function createEnv() {
prm2 = nub2.parameters as NubTestParams;
}
describe("tests ValueReference : ", () => {
describe("classe ParamValues : ", () => {
describe("référence d'un paramètre à un autre : ", () => {
describe("lien au paramètre du même nom : ", () => {
it("test 1", () => {
// cas de figure :
// nub2.A est lié à nub1.A (valeur fixe)
......@@ -120,7 +120,7 @@ describe("tests ValueReference : ", () => {
expect(nub1.Calc("C").vCalc).toBeCloseTo(3, precDigits);
expect(nub2.Calc("A").vCalc).toBeCloseTo(0, precDigits);
expect(nub2.Calc("B").vCalc).toBeCloseTo(3, precDigits);
//expect(nub2.Calc("B").vCalc).toBeCloseTo(3, precDigits); // échoue car l'écriture du paramètre esclave n'affecte pas la valeur maître
expect(nub2.Calc("C").vCalc).toBeCloseTo(3, precDigits);
});
......@@ -145,7 +145,7 @@ describe("tests ValueReference : ", () => {
});
});
describe("classe Result : ", () => {
describe("lien à un paramètre non fixé : ", () => {
it('test 1', () => {
// cas de figure :
// nub2.A est lié à nub1.C (valeur calculée)
......@@ -153,14 +153,6 @@ describe("tests ValueReference : ", () => {
createEnv();
// Nub maître
nub1 = new NubTest(new NubTestParams());
prm1 = nub1.parameters as NubTestParams;
// Nub esclave
nub2 = new NubTest(new NubTestParams());
prm2 = nub2.parameters as NubTestParams;
prm1.C.v = 10; // valeur maître bidon
prm1.C.paramValues.valueMode = ParamValueMode.CALCUL;
prm2.A.v = 0; // valeur esclave (doit être masquée par la valeur maître, cad prm1.C, normalement 3)
......@@ -176,14 +168,6 @@ describe("tests ValueReference : ", () => {
createEnv();
// Nub maître
nub1 = new NubTest(new NubTestParams());
prm1 = nub1.parameters as NubTestParams;
// Nub esclave
nub2 = new NubTest(new NubTestParams());
prm2 = nub2.parameters as NubTestParams;
prm1.C.v = 0; // valeur bidon, doit être 3 après calcul
prm1.C.paramValues.valueMode = ParamValueMode.CALCUL;
prm2.C.v = 0; // valeur bidon, doit être 5 après calcul
......@@ -192,5 +176,58 @@ describe("tests ValueReference : ", () => {
expect(nub2.Calc("C").vCalc).toBeCloseTo(5, precDigits);
});
it('test 3', () => {
// cas de figure :
// nub2.A est lié à nub1.A (valeur variée)
// lecture de nub2.A
createEnv();
const min = 1;
const max = 5;
const step = 1;
const pv = prm1.A.paramValues;
pv.setValues(min, max, step);
prm2.A.v = 0; // valeur esclave bidon, doit être masquée par la valeur maître (cad prm1.A, normalement [1,2,3,4,5])
prm2.A.defineReference(nub1, "A");
let n = 0;
let i = min;
for (const v of prm2.A.referencedValues) {
expect(v).toEqual(i);
n++;
i += step;
}
expect(n).toEqual((max - min) / step + 1);
});
it('test 4', () => {
// cas de figure :
// nub2.A est lié à nub1.A (valeur variée)
// calcul de nub2.C
createEnv();
const min = 1;
const max = 5;
const step = 1;
const input = [1, 2, 3, 4, 5];
const pv = prm1.A.paramValues;
pv.setValues(input);
prm2.A.v = 0; // valeur esclave bidon, doit être masquée par la valeur maître (cad prm1.A, normalement [1,2,3,4,5])
prm2.A.defineReference(nub1, "A");
const r: Result = nub2.CalcSerie(0.001, 0.1, "C");
let n = 0;
for (const re of r.resultElements) {
expect(re.vCalc).toEqual(input[n] + 2);
n++;
}
expect(n).toEqual(input.length);
});
});
});
......@@ -177,4 +177,8 @@ export abstract class Nub extends ComputeNode implements IReferencedObject {
throw new Error(`Nub : appel à IReferencedObject.getReferencedValues('${desc}') invalide`);
}
public getReferencedValueMode(desc: string): ParamValueMode {
return this.getParameter(desc).paramValues.valueMode;
}
}
......@@ -82,16 +82,16 @@ export class BaseParam extends JalhydObject implements IObjectReference {
throw e;
}
switch (this.valueMode) {
case ParamValueMode.SINGLE:
return this._paramValues.singleValue;
case ParamValueMode.LINK:
return this._valueRef.referencedValues[0];
default:
throw new Error(`mode de valeur ${ParamValueMode[this.valueMode]} invalide`);
}
if (this.isReferenceDefined)
return this._valueRef.referencedValues[0];
else
switch (this.valueMode) {
case ParamValueMode.SINGLE:
return this._paramValues.singleValue;
default:
throw new Error(`mode de valeur ${ParamValueMode[this.valueMode]} invalide`);
}
}
public setValue(val: number) {
......@@ -158,7 +158,13 @@ export class BaseParam extends JalhydObject implements IObjectReference {
}
public get valueMode() {
return this._paramValues.valueMode;
switch (this._paramValues.valueMode) {
case ParamValueMode.LINK:
return this.referencedValueMode;
default:
return this._paramValues.valueMode;
}
}
// interface IObjectReference
......@@ -168,10 +174,21 @@ export class BaseParam extends JalhydObject implements IObjectReference {
this._valueRef.defineReference(target, desc);
}
public get isReferenceDefined(): boolean {
return this._valueRef.isReferenceDefined;
}
/**
* valeurs de l'objet IReferencedObject référencé
*/
public get referencedValues(): number[] {
return this._valueRef.referencedValues;
}
/**
* mode de valeur dans l'objet référencé
*/
public get referencedValueMode(): ParamValueMode {
return this._valueRef.referencedValueMode;
}
}
import { Pair } from "../util/pair"
import { DefinedNumber } from "../util/definedvalue";
import { IReferencedObject, IObjectReference, ObjectReference } from "../value_ref/object_ref";
import { JalhydObject } from "../jalhyd_object";
/**
* mode de génération des valeurs
......
import { ParamValueMode } from "../param/param-values";
/**
* objet (paramètre ou résultat) dont les valeurs sont référençables pour réutilisation
* (d'une calculette sur une autre par ex)
......@@ -6,24 +8,40 @@ export interface IReferencedObject {
/**
* getter de la (des) valeurs
*/
getReferencedValues(desc?: string): number[];
getReferencedValues(desc: string): number[];
/**
* getter du mode de valeur
*/
getReferencedValueMode(desc: string): ParamValueMode;
}
/**
* référence vers un objet
* référence vers un objet contenant une valeur vers laquelle on crée un lien
*/
export interface IObjectReference {
/**
* définition de l'objet référencé
* définition de la valeur référencée dans l'objet
* @param target objet contenant la valeur qu'on va référencer
* @param desc : description de la valeur pointée sous forme symbolique. Exemples : Q, <n° d'ouvrage>.Z1
*/
defineReference(target: IReferencedObject, desc: string): void;
/**
* true si la référence a été définie
*/
readonly isReferenceDefined: boolean;
/**
* valeurs de l'objet IReferencedObject référencé
*/
readonly referencedValues: number[];
/**
* mode de valeur dans l'objet référencé
*/
readonly referencedValueMode: ParamValueMode;
}
/**
......@@ -34,19 +52,33 @@ export class ObjectReference implements IObjectReference {
private _refDefinition: string;
public get referencedValues(): number[] {
return this._referencedObject.getReferencedValues(this._refDefinition);
}
public defineReference(target: IReferencedObject, desc: string) {
this._referencedObject = target;
this._refDefinition = desc;
}
public get isReferenceDefined(): boolean {
return this._referencedObject !== undefined && this._refDefinition !== undefined;
}
/**
* objet référencé
*/
public get referencedObject(): IReferencedObject {
return this._referencedObject;
}
/**
* valeurs dans l'objet référencé
*/
public get referencedValues(): number[] {
return this._referencedObject.getReferencedValues(this._refDefinition);
}
/**
* mode de valeur dans l'objet référencé
*/
public get referencedValueMode(): ParamValueMode {
return this._referencedObject.getReferencedValueMode(this._refDefinition);
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment