diff --git a/spec/mock_jasmine.ts b/spec/mock_jasmine.ts index cfb6a3974fab8933d736c34008a59a540fceb2da..e459c91748d41f4411bdb786cb0f0265e4fb11ca 100644 --- a/spec/mock_jasmine.ts +++ b/spec/mock_jasmine.ts @@ -116,6 +116,16 @@ class Expect { } } + public toBeDefined(message?: string) { + if (this.actual === undefined) { + if (message !== undefined) { + console.error(message); + } else { + console.error(`${this.actual} should be defined`); + } + } + } + public toBeUndefined(message?: string) { if (this.actual !== undefined) { if (message !== undefined) { diff --git a/spec/value_ref/value_ref_variable_extraresult.spec.ts b/spec/value_ref/value_ref_variable_extraresult.spec.ts index a5c7f5ee190384ddbf349e96599b8ee4cc6fe05b..52449b539f17623ed7751169cdc3d39b511935d8 100644 --- a/spec/value_ref/value_ref_variable_extraresult.spec.ts +++ b/spec/value_ref/value_ref_variable_extraresult.spec.ts @@ -46,8 +46,16 @@ describe("référence d'un paramètre à un résultat complémentaire multivalu 0.9962500000000004, 0.9970000000000003, 0.9977500000000002, 0.9985000000000002, 0.9992500000000001, 1]; + const vs = rem.getLinkableValues("flu"); + expect(Object.keys(vs).length).toEqual(1); + + const vs2 = vs[0]["value"]; + expect(vs2.name).toEqual("flu"); + let i = 0; - for (const v of res.getExtraResultValuesIterator("flu")) + for (const v of vs2.valuesIterator) { + expect(f[i]).toBeDefined(); expect(Math.abs(v - f[i++]) < 0.01).toBeTruthy(); + } }); }); diff --git a/src/nub.ts b/src/nub.ts index 6524312fb10f67a6cc29d698f4d7c54326a56383..83e54f4be62b7aee89414b48f7006c614a1f6107 100644 --- a/src/nub.ts +++ b/src/nub.ts @@ -229,27 +229,77 @@ export abstract class Nub extends ComputeNode implements IReferencedNub { * @returns liste des paramètres liables à un paramètre * @param p paramètre qui sert de clé de recherche des paramètres liables */ - public getLinkableParameters(param: ParamDefinition): any[] { + // public getLinkableParameters(param: ParamDefinition): any[] { + // const res: any[] = []; + + // for (const p of this._prms) + // if (p.uid !== param.uid) + // switch (p.valueMode) { + // case ParamValueMode.SINGLE: + // case ParamValueMode.MINMAX: + // case ParamValueMode.LISTE: + // switch (param.symbol) { + // case "Z1": + // case "Z2": + // if (p.symbol === "Z1" || p.symbol === "Z2") + // res.push({ "param": p, "nub": this }); + // break; + + // default: + // if (p.symbol === param.symbol) + // res.push({ "param": p, "nub": this }); + // } + // } + + // return res; + // } + + /** + * liste des valeurs (paramètre, résultat, résultat complémentaire) liables à un paramètre + * @param src objet qui sert de clé de recherche des paramètres liables, de type INamedObject | string + * @returns tableau d'objets de la forme { "name":string, "value":NamedIterableValues, "nub":Nub}, nub=Nub d'origine de la "value" + */ + public getLinkableValues(src: any): any[] { const res: any[] = []; - for (const p of this._prms) - if (p.uid !== param.uid) + const isStr = typeof (src) === "string"; + const name = isStr ? src : src.name; + const hasUid = isStr ? false : "uid" in src; + + // paramètres + + for (const p of this._prms) { + const cond = hasUid ? p.uid !== src.uid : true; // pour éviter d'ajouter le paramètre d'entrée dans le tableau résultat + if (cond) switch (p.valueMode) { case ParamValueMode.SINGLE: case ParamValueMode.MINMAX: case ParamValueMode.LISTE: - switch (param.symbol) { + switch (name) { case "Z1": case "Z2": if (p.symbol === "Z1" || p.symbol === "Z2") - res.push({ "param": p, "nub": this }); + res.push({ "name": p.symbol, "value": p, "nub": this }); break; default: - if (p.symbol === param.symbol) - res.push({ "param": p, "nub": this }); + if (p.symbol === name) + res.push({ "name": name, "value": p, "nub": this }); } } + } + + // résultat + if (this._result !== undefined) { + if (this._result.name === name) + res.push({ "name": `${name}.`, "value": this._result, "nub": this }); + + // résultats complémentaires + + const erIter = this._result.getIterableExtraResults(name) + if (erIter !== undefined) + res.push({ "name": `${this._result.name}.${name}`, "value": erIter, "nub": this }); + } return res; } diff --git a/src/remous.ts b/src/remous.ts index 1b0075fa9f789e59427ab0fda37bff8563db7f07..519eef156d4954866a5bef5cabcb413d3403f991 100644 --- a/src/remous.ts +++ b/src/remous.ts @@ -473,6 +473,8 @@ export class CourbeRemous extends Nub { } } + this._result = res; + return res; } diff --git a/src/session_nub.ts b/src/session_nub.ts index 491765614f7c69bdd0376cbd330acd0c928a6128..a18dad2878770a97d3595bdc7572dfbc2be79bfc 100644 --- a/src/session_nub.ts +++ b/src/session_nub.ts @@ -193,7 +193,16 @@ export class SessionNub { * @returns liste des paramètres liables à un paramètre * @param p paramètre qui sert de clé de recherche des paramètres liables */ - public getLinkableParameters(p: ParamDefinition): any[] { - return this._nub.getLinkableParameters(p); + // public getLinkableParameters(p: ParamDefinition): any[] { + // return this._nub.getLinkableParameters(p); + // } + + /** + * liste des valeurs(paramètre, résultat, résultat complémentaire) liables à un paramètre + * @param src objet qui sert de clé de recherche des paramètres liables, de type INamedObject | string + * @returns tableau d'objets de la forme { "value":NamedIterableValues, "nub":Nub}, nub=Nub d'origine de la "value" + */ + public getLinkableValues(src: any): any[] { + return this._nub.getLinkableValues(src); } } diff --git a/src/structure/parallel_structure.ts b/src/structure/parallel_structure.ts index 7a712fc5a3a2407e72442fc7d7f7317f6e6500d0..7a2d0a9b2c5bb8f8eb964da8a89f6253dfe9bd3b 100644 --- a/src/structure/parallel_structure.ts +++ b/src/structure/parallel_structure.ts @@ -293,4 +293,16 @@ export class ParallelStructure extends Nub { public getReferencedExtraResult(desc: string): any { return this._result.getExtraResult(desc); } + + /** + * liste des valeurs (paramètre, résultat, résultat complémentaire) liables à un paramètre + * @param src objet qui sert de clé de recherche des paramètres liables, de type INamedObject | string + * @returns tableau d'objets de la forme { "name":string, "value":NamedIterableValues, "nub":Nub}, nub=Nub d'origine de la "value" + */ + public getLinkableValues(src: any): any[] { + let res = super.getLinkableValues(src); + for (const s of this.structures) + res = res.concat(s.getLinkableValues(src)); + return res; + } }