From 8b63c86231887428793be552a01e912bf5cf235a Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Mon, 18 Jun 2018 14:26:02 +0200
Subject: [PATCH] =?UTF-8?q?=20#45=20Result=20:=20ajout=20de=20l'it=C3=A9ra?=
 =?UTF-8?q?teur=20sur=20les=20valeurs=20d'un=20r=C3=A9sultat=20compl=C3=A9?=
 =?UTF-8?q?mentaire=20(d'apr=C3=A8s=20son=20nom)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../value_ref_variable_extraresult.spec.ts    | 53 +++++++++++++++++++
 src/util/result.ts                            | 13 +++++
 2 files changed, 66 insertions(+)
 create mode 100644 spec/value_ref/value_ref_variable_extraresult.spec.ts

diff --git a/spec/value_ref/value_ref_variable_extraresult.spec.ts b/spec/value_ref/value_ref_variable_extraresult.spec.ts
new file mode 100644
index 00000000..a5c7f5ee
--- /dev/null
+++ b/spec/value_ref/value_ref_variable_extraresult.spec.ts
@@ -0,0 +1,53 @@
+import { ParamsSectionRectang, cSnRectang, CourbeRemousParams, MethodeResolution, CourbeRemous, Result } from "../../src";
+
+/**
+ * IMPORTANT !
+ * Décommenter temporairement la ligne suivante (import { } from "./mock_jasmine")
+ * 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";
+
+describe("référence d'un paramètre à un résultat complémentaire multivalué : ", () => {
+    it("test 1", () => {
+        // cas de figure :
+        // courbe de remous / section rectangulaire, méthode Euler explicite, faible pente, pas de ressaut, Yamont > Yc, Yaval > Yn
+        // on itère sur la courbe fluviale
+
+        const prms = new ParamsSectionRectang(undefined, // tirant d'eau
+            2.5, // largeur de fond
+            40, //  Ks=Strickler
+            2, // Q=Débit
+            0.001, // If=pente du fond
+            0.001, // précision
+            1 // YB=hauteur de berge
+        );
+
+        const sect = new cSnRectang(prms);
+
+        const prem = new CourbeRemousParams(sect, 0.5, // Yamont = tirant amont
+            1, // Yaval = tirant aval
+            100,  // Long= Longueur du bief
+            5,  // Dx=Pas d'espace
+            MethodeResolution.EulerExplicite
+        );
+
+        const rem = new CourbeRemous(prem);
+
+        const res: Result = rem.calculRemous(undefined);
+
+        // données de validation : version Typescript (Oct 2017) méthode des trapèzes
+
+        const f = [0.9872500000000014, 0.9872500000000014, 0.9872500000000014,
+            0.9872500000000014, 0.9880000000000013, 0.9887500000000012,
+            0.9895000000000012, 0.9902500000000011, 0.991000000000001,
+            0.9917500000000009, 0.9925000000000008, 0.9932500000000007,
+            0.9940000000000007, 0.9947500000000006, 0.9955000000000005,
+            0.9962500000000004, 0.9970000000000003, 0.9977500000000002,
+            0.9985000000000002, 0.9992500000000001, 1];
+
+        let i = 0;
+        for (const v of res.getExtraResultValuesIterator("flu"))
+            expect(Math.abs(v - f[i++]) < 0.01).toBeTruthy();
+    });
+});
diff --git a/src/util/result.ts b/src/util/result.ts
index 729c60e4..fcff8d87 100644
--- a/src/util/result.ts
+++ b/src/util/result.ts
@@ -270,4 +270,17 @@ export class Result implements IterableValues {
             tmp.push(re.vCalc);
         return tmp[Symbol.iterator]();
     }
+
+    //  interface IterableValues pour les résultats complémentaires
+
+    public getExtraResultValuesIterator(name: string): IterableIterator<number> {
+        const tmp = [];
+        for (const r of this._resultElements) {
+            const er = r.getExtraResult(name);
+            if (er !== undefined)
+                tmp.push(er);
+        }
+
+        return tmp[Symbol.iterator]();
+    }
 }
-- 
GitLab