From 82ae2e746a65201539af806af636ce461232c914 Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Fri, 24 May 2019 16:36:44 +0200
Subject: [PATCH] Added jalhyd tests for linked multiple variated params

---
 spec/param/param_multivar.spec.ts | 227 ++++++++++++++++++++++++------
 1 file changed, 185 insertions(+), 42 deletions(-)

diff --git a/spec/param/param_multivar.spec.ts b/spec/param/param_multivar.spec.ts
index 188ad7b3..dea5b5bb 100644
--- a/spec/param/param_multivar.spec.ts
+++ b/spec/param/param_multivar.spec.ts
@@ -1,22 +1,44 @@
 import { CreateStructure, ExtensionStrategy, LoiDebit, ParallelStructure, ParallelStructureParams,
-         ParamValueMode, Structure} from "../../src/index";
+         ParamValueMode, Structure, Session} from "../../src/index";
 import { RectangularStructureParams } from "../../src/structure/structure_cem88d";
 
 let prms1: ParallelStructureParams;
 let nub1: ParallelStructure;
 let struct1: Structure;
-let prmsStruct: RectangularStructureParams;
+let prmsStruct1: RectangularStructureParams;
+
+let prms2: ParallelStructureParams;
+let nub2: ParallelStructure;
+let struct2: Structure;
+let prmsStruct2: RectangularStructureParams;
 
 function createSingleNubEnv() {
     prms1 = new ParallelStructureParams(0.5, 102, 101.5);
     nub1 = new ParallelStructure(prms1);
     struct1 = CreateStructure(LoiDebit.Cunge80, nub1);
-    prmsStruct = struct1.prms as RectangularStructureParams;
+    prmsStruct1 = struct1.prms as RectangularStructureParams;
     nub1.addChild(struct1);
 }
 
 function createLinkedNubEnv() {
-    // TODO
+    prms1 = new ParallelStructureParams(0.5, 102, 101.5);
+    nub1 = new ParallelStructure(prms1);
+    struct1 = CreateStructure(LoiDebit.Cunge80, nub1);
+    prmsStruct1 = struct1.prms as RectangularStructureParams;
+    nub1.addChild(struct1);
+
+    prms2 = new ParallelStructureParams(0.5, 102, 101.5);
+    nub2 = new ParallelStructure(prms2);
+    struct2 = CreateStructure(LoiDebit.Cunge80, nub2);
+    prmsStruct2 = struct2.prms as RectangularStructureParams;
+    nub2.addChild(struct2);
+
+    Session.getInstance().clear();
+    Session.getInstance().registerNub(nub1);
+    Session.getInstance().registerNub(nub2);
+
+    prms2.Z1.defineReference(nub1, "Z1");
+    prmsStruct2.L.defineReference(struct1, "L");
 }
 
 /**
@@ -52,11 +74,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues(100, 102, 0.5); // 5 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
-            prmsStruct.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.LISTE);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -67,11 +89,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues(100, 102, 0.5); // 5 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
-            prmsStruct.L.setValues(1.89, 2.1, 0.03); // 8 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues(1.89, 2.1, 0.03); // 8 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.MINMAX);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.MINMAX);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -82,11 +104,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues(100, 102, 0.1); // 21 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
-            prmsStruct.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.LISTE);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -97,11 +119,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues([ 100, 101, 102 ]); // 3 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
-            prmsStruct.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.LISTE);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.LISTE);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -112,11 +134,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues([ 100, 100.3, 100.7, 101, 101.3, 101.7, 102, 102.3, 115 ]); // 9 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
-            prmsStruct.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.LISTE);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.LISTE);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -127,11 +149,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues(100, 102, 0.5); // 5 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
-            prmsStruct.L.setValues(1.89, 2.15, 0.06); // 5 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues(1.89, 2.15, 0.06); // 5 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.MINMAX);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.MINMAX);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -175,11 +197,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues(100, 102, 0.5); // 5 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.RECYCLE;
-            prmsStruct.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6]); // 9 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.RECYCLE;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.RECYCLE;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.LISTE);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -190,11 +212,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues(100, 102, 0.5); // 5 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.RECYCLE;
-            prmsStruct.L.setValues(1.89, 2.1, 0.03); // 8 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.RECYCLE;
+            prmsStruct1.L.setValues(1.89, 2.1, 0.03); // 8 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.RECYCLE;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.MINMAX);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.MINMAX);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -205,11 +227,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues(100, 102, 0.1); // 21 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.RECYCLE;
-            prmsStruct.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.RECYCLE;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.RECYCLE;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.LISTE);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -220,11 +242,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues([ 100, 101, 102 ]); // 3 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.RECYCLE;
-            prmsStruct.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.RECYCLE;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.RECYCLE;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.LISTE);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.LISTE);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -235,11 +257,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues([ 100, 100.3, 100.7, 101, 101.3, 101.7, 102, 102.3, 115 ]); // 9 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.RECYCLE;
-            prmsStruct.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.RECYCLE;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.RECYCLE;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.LISTE);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.LISTE);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -250,11 +272,11 @@ describe("multiple variated parameters - ", () => {
             createSingleNubEnv();
             prms1.Z1.setValues(100, 102, 0.5); // 5 values
             prms1.Z1.extensionStrategy = ExtensionStrategy.RECYCLE;
-            prmsStruct.L.setValues(1.89, 2.15, 0.06); // 5 values
-            prmsStruct.L.extensionStrategy = ExtensionStrategy.RECYCLE;
+            prmsStruct1.L.setValues(1.89, 2.15, 0.06); // 5 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.RECYCLE;
             // check that both parameters are varying
             expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
-            expect(prmsStruct.L.valueMode).toBe(ParamValueMode.MINMAX);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.MINMAX);
             // check that calculation works
             const res = nub1.CalcSerie();
             expect(res).toBeDefined();
@@ -292,7 +314,128 @@ describe("multiple variated parameters - ", () => {
         });
     });
 
-    describe("on different linked Nubs - ", () => {
-        // TODO
+    describe("on different linked Nubs, with REPEAT_LAST strategy - ", () => {
+
+        it("test 1 : minmax < list", () => {
+            createLinkedNubEnv();
+            prms1.Z1.setValues(100, 102, 0.5); // 5 values
+            prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            // check that both parameters are varying
+            expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
+            // check that calculation works
+            const res = nub2.CalcSerie();
+            expect(res).toBeDefined();
+            expect(res.resultElements.length).toBe(9);
+        });
+
+        it("test 2 : minmax < minmax", () => {
+            createLinkedNubEnv();
+            prms1.Z1.setValues(100, 102, 0.5); // 5 values
+            prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues(1.89, 2.1, 0.03); // 8 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            // check that both parameters are varying
+            expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.MINMAX);
+            // check that calculation works
+            const res = nub2.CalcSerie();
+            expect(res).toBeDefined();
+            expect(res.resultElements.length).toBe(8);
+        });
+
+        it("test 3 : list < minmax", () => {
+            createLinkedNubEnv();
+            prms1.Z1.setValues(100, 102, 0.1); // 21 values
+            prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            // check that both parameters are varying
+            expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
+            // check that calculation works
+            const res = nub2.CalcSerie();
+            expect(res).toBeDefined();
+            expect(res.resultElements.length).toBe(21);
+        });
+
+        it("test 4 : list < list", () => {
+            createLinkedNubEnv();
+            prms1.Z1.setValues([ 100, 101, 102 ]); // 3 values
+            prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            // check that both parameters are varying
+            expect(prms1.Z1.valueMode).toBe(ParamValueMode.LISTE);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
+            // check that calculation works
+            const res = nub2.CalcSerie();
+            expect(res).toBeDefined();
+            expect(res.resultElements.length).toBe(9);
+        });
+
+        it("test 5 : list = list", () => {
+            createLinkedNubEnv();
+            prms1.Z1.setValues([ 100, 100.3, 100.7, 101, 101.3, 101.7, 102, 102.3, 115 ]); // 9 values
+            prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues([ 1.89, 1.91, 1.99, 2, 1.7, 2.1, 2.18, 2.23, 2.6 ]); // 9 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            // check that both parameters are varying
+            expect(prms1.Z1.valueMode).toBe(ParamValueMode.LISTE);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.LISTE);
+            // check that calculation works
+            const res = nub2.CalcSerie();
+            expect(res).toBeDefined();
+            expect(res.resultElements.length).toBe(9);
+        });
+
+        it("test 6 : list = minmax", () => {
+            createLinkedNubEnv();
+            prms1.Z1.setValues(100, 102, 0.5); // 5 values
+            prms1.Z1.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            prmsStruct1.L.setValues(1.89, 2.15, 0.06); // 5 values
+            prmsStruct1.L.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+            // check that both parameters are varying
+            expect(prms1.Z1.valueMode).toBe(ParamValueMode.MINMAX);
+            expect(prmsStruct1.L.valueMode).toBe(ParamValueMode.MINMAX);
+            // check that calculation works
+            const res = nub2.CalcSerie();
+            expect(res).toBeDefined();
+            expect(res.resultElements.length).toBe(5);
+        });
+
+        it("test 7 : all parameters varying with random lengths", () => {
+            createLinkedNubEnv();
+            let longest = 0;
+            let sparedParam = null;
+            // set all parameters to LIST mode with random length (except the first that has to stay in CALC mode)
+            for (const p of nub2.parameterIterator) {
+                if (p.visible) {
+                    if (! sparedParam) {
+                        sparedParam = p;
+                        nub2.calculatedParam = p;
+                    } else {
+                        if (p.valueMode !== ParamValueMode.LINK) {
+                            const rl = randomList(p.singleValue);
+                            longest = Math.max(longest, rl.length);
+                            p.setValues(rl);
+                            p.extensionStrategy = ExtensionStrategy.REPEAT_LAST;
+                        }
+                    }
+                }
+            }
+            // check that all parameters are varying
+            for (const p of nub2.parameterIterator) {
+                if (p.visible && p !== sparedParam && p.valueMode !== ParamValueMode.LINK) {
+                    expect(p.hasMultipleValues).toBe(true);
+                }
+            }
+            // check that calculation works and length of result is length of the longest values list
+            const res = nub2.CalcSerie();
+            expect(res).toBeDefined();
+            expect(res.resultElements.length).toBe(longest);
+        });
     });
 });
-- 
GitLab