public void TestAsArgument()
        {
            IVariable<IFeatureLocation> a = new Variable<IFeatureLocation>("argument");
            IVariable<double> c1 = new Variable<double>("value");
            IVariable<string> c2 = new Variable<string>("description");

            // f = (a, p)(h)
            IFunction f = new Function("rating curve");
            f.Arguments.Add(a);
            f.Components.Add(c1);
            f.Components.Add(c2);

            SimpleFeature simpleFeature = new SimpleFeature(10.0);
            IFeatureLocation featureLocation = new FeatureLocation { Feature = simpleFeature };

            // value based argument referencing.
            f[featureLocation] = new object[] { 1.0, "jemig de pemig" };

            IMultiDimensionalArray<double> c1Value = f.GetValues<double>(new ComponentFilter(f.Components[0]),
                                                                         new VariableValueFilter<IFeatureLocation>(
                                                                             f.Arguments[0],
                                                                             new FeatureLocation
                                                                                 {Feature = simpleFeature}));

            Assert.AreEqual(1.0, c1Value[0], 1.0e-6);

            //IMultiDimensionalArray<string> c2Value = f.GetValues<string>(new ComponentFilter(f.Components[1]),
            //                                                             new VariableValueFilter<IFeatureLocation>(
            //                                                                 f.Arguments[0], featureLocation));

            //Assert.AreEqual("jemig de pemig", c2Value[0]);
        }
Beispiel #2
0
        public void Function2DGetValuesUsingOneArgumentValue()
        {
            IVariable<float> f = new Variable<float>("f");
            IVariable<float> x1 = new Variable<float>("x1");
            IVariable<float> x2 = new Variable<float>("x2");

            IFunction function = new Function("OneComponentTwoArguments Test");
            function.Components.Add(f);
            function.Arguments.Add(x1);
            function.Arguments.Add(x2);

            /*   x2
             *    ^
             *    |
             *    |  x  x     <=== f(x1,x2)
             *    |  x  x
             *    |  x  x
             *    | 
             *     --------> x1
             * 
             */

            function[0.0f, 0.0f] = 0.0f;
            function[1.0f, 0.0f] = 0.0f;
            function[0.0f, 1.0f] = 100.0f;
            function[1.0f, 1.0f] = 100.0f;
            function[0.0f, 2.0f] = 200.0f;
            function[1.0f, 2.0f] = 200.0f;


            // get all values
            IList allValues = function.GetValues();
            Assert.AreEqual(6, allValues.Count);

            // get values filtered by 1st argument
            IMultiDimensionalArray filteredValues1 = function.GetValues(new VariableValueFilter<float>(x1, 1.0f));

            Assert.AreEqual(x2.Values.Count, filteredValues1.Count);

            // get values filtered by 2 arguments
            IMultiDimensionalArray filteredValues2 = function.GetValues(x1.CreateValueFilter(1.0f), x2.CreateValueFilter(1.0f));

            Assert.AreEqual(1, filteredValues2.Count);
            Assert.AreEqual(100f, filteredValues2[0, 0]);
        }
Beispiel #3
0
        public void Clone()
        {
            IVariable<double> x = new Variable<double>("x");
            IVariable<double> y = new Variable<double>("y");

            IFunction f = new Function { Arguments = {x}, Components = {y} };

            f[10.0] = 100.0;
            f[20.0] = 200.0;
            f[30.0] = 300.0;

            var clone = (IFunction) f.Clone();

            Assert.AreEqual(f.Name, clone.Name);
            Assert.AreEqual(f.Arguments.Count, clone.Arguments.Count);
            Assert.AreEqual(f.Components.Count, clone.Components.Count);

            var clonedValues = clone.GetValues();
            var expectedValues = f.GetValues();
            Assert.AreEqual(expectedValues, clonedValues, "values must be cloned");
        }
Beispiel #4
0
        public void Clear()
        {
            IVariable<double> x = new Variable<double>("x");
            IVariable<double> y = new Variable<double>("y");

            IFunction f = new Function();
            f.Arguments.Add(x);
            f.Components.Add(y);

            f.SetValues(new[] {100.0, 200.0, 300.0}, new VariableValueFilter<double>(x, new[] {1.0, 2.0, 3.0}));

            IList values = f.GetValues();
            Assert.AreEqual(3, values.Count);

            f.Clear();
            Assert.AreEqual(0, values.Count);
        }
Beispiel #5
0
        public void SetValues()
        {
            object defaultValue = default(float);
            var f = new Variable<float>("f");
            var x1 = new Variable<float>("x1");
            var x2 = new Variable<float>("x2");

            var function = new Function("OneComponentTwoArguments Test");
            function.Components.Add(f);
            function.Arguments.Add(x1);
            function.Arguments.Add(x2);

            function[0.0f, 0.0f] = 0.0f;

            //   x1    x2     f
            //  0.0   0.0   0.0

            Assert.AreEqual(1, x1.Values.Count);


            var x2values = new[] {0.1f, 0.2f};

            // set multiple values
            function.SetValues(new[] {5.0f},
                               new VariableValueFilter<float>(x1, 1.0f), new VariableValueFilter<float>(x2, x2values));

            //   x1    x2     f
            //  0.0   0.0   0.0
            //  1.0   0.0  default
            //  0.0   0.1  default
            //  1.0   0.1   5.0
            //  0.0   0.2  default
            //  1.0   0.2   5.0

            Assert.AreEqual(2, x1.Values.Count);
            Assert.AreEqual(3, x2.Values.Count);
            Assert.AreEqual(6, function.GetValues().Count);
            Assert.AreEqual(0.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 0.0F), new VariableValueFilter<float>(x2, 0.0F))[0]);
            Assert.AreEqual(defaultValue, function.GetValues(
                                              new VariableValueFilter<float>(x1, 1.0F),
                                              new VariableValueFilter<float>(x2, 0.0F))[0]
                );
            Assert.AreEqual(defaultValue, function.GetValues(
                                              new VariableValueFilter<float>(x1, 0.0F),
                                              new VariableValueFilter<float>(x2, 0.1F))[0]
                );
            Assert.AreEqual(5.0F, function.GetValues(
                                      new VariableValueFilter<float>(x1, 1.0F),
                                      new VariableValueFilter<float>(x2, 0.1F))[0]
                );
            Assert.AreEqual(defaultValue, function.GetValues(
                                              new VariableValueFilter<float>(x1, 0.0F),
                                              new VariableValueFilter<float>(x2, 0.2F))[0]
                );
            Assert.AreEqual(5.0F, function.GetValues(
                                      new VariableValueFilter<float>(x1, 1.0F),
                                      new VariableValueFilter<float>(x2, 0.2F))[0]
                );

            function.SetValues(new[] { 6.0f }, new VariableValueFilter<float>(x1, 2.0f));
            //   x1    x2     f
            //  0.0   0.0   0.0
            //  1.0   0.0  default
            //  0.0   0.1  default
            //  1.0   0.1   5.0
            //  0.0   0.2  default
            //  1.0   0.2   5.0
            //  2.0   0.0   6.0
            //  2.0   0.1   6.0
            //  2.0   0.2   6.0
            Assert.AreEqual(x1.Values.Count, 3);
            Assert.AreEqual(x2.Values.Count, 3);
            Assert.AreEqual(function.GetValues().Count, 9);
            Assert.AreEqual(0.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 0.0F),
                                               new VariableValueFilter<float>(x2, 0.0F))[0]);
            Assert.AreEqual(defaultValue,
                            function.GetValues(new VariableValueFilter<float>(x1, 1.0F), new VariableValueFilter<float>(x2, 0.0F))[0]);
            Assert.AreEqual(defaultValue,
                            function.GetValues(new VariableValueFilter<float>(x1, 0.0F), new VariableValueFilter<float>(x2, 0.1F))[0]);
            Assert.AreEqual(5.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 1.0F),
                                               new VariableValueFilter<float>(x2, 0.1F))[0]);
            Assert.AreEqual(defaultValue,
                            function.GetValues(new VariableValueFilter<float>(x1, 0.0F), new VariableValueFilter<float>(x2, 0.2F))[0]);
            Assert.AreEqual(5.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 1.0F),
                                               new VariableValueFilter<float>(x2, 0.2F))[0]);
            Assert.AreEqual(6.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 2.0F),
                                               new VariableValueFilter<float>(x2, 0.0F))[0]);
            Assert.AreEqual(6.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 2.0F),
                                               new VariableValueFilter<float>(x2, 0.1F))[0]);
            Assert.AreEqual(6.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 2.0F),
                                               new VariableValueFilter<float>(x2, 0.2F))[0]);

            function.SetValues(new[] {3.0f},
                               new VariableValueFilter<float>(x1, 0.0f));
            //   x1    x2     f
            //  0.0   0.0   3.0
            //  1.0   0.0  default
            //  0.0   0.1   3.0
            //  1.0   0.1   5.0
            //  0.0   0.2   3.0
            //  1.0   0.2   5.0
            //  2.0   0.0   6.0
            //  2.0   0.1   6.0
            //  2.0   0.2   6.0
            Assert.AreEqual(x1.Values.Count, 3);
            Assert.AreEqual(x2.Values.Count, 3);
            Assert.AreEqual(function.GetValues().Count, 9);
            Assert.AreEqual(3.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 0.0F),
                                               new VariableValueFilter<float>(x2, 0.0F))[0]);
            Assert.AreEqual(defaultValue,
                            function.GetValues(new VariableValueFilter<float>(x1, 1.0F), new VariableValueFilter<float>(x2, 0.0F))[0]);
            Assert.AreEqual(3.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 0.0F),
                                               new VariableValueFilter<float>(x2, 0.1F))[0]);
            Assert.AreEqual(5.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 1.0F),
                                               new VariableValueFilter<float>(x2, 0.1F))[0]);
            Assert.AreEqual(3.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 0.0F),
                                               new VariableValueFilter<float>(x2, 0.2F))[0]);
            Assert.AreEqual(5.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 1.0F),
                                               new VariableValueFilter<float>(x2, 0.2F))[0]);
            Assert.AreEqual(6.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 2.0F),
                                               new VariableValueFilter<float>(x2, 0.0F))[0]);
            Assert.AreEqual(6.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 2.0F),
                                               new VariableValueFilter<float>(x2, 0.1F))[0]);
            Assert.AreEqual(6.0F,
                            function.GetValues(new VariableValueFilter<float>(x1, 2.0F),
                                               new VariableValueFilter<float>(x2, 0.2F))[0]);
        }
        public void ClearFunctionBindingListShouldRemoveFunctionValues()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable<int>("x1"));
            function.Components.Add(new Variable<string>("y1"));

            function[0] = "zero";
            function[1] = "one";
            function[2] = "two";

            var functionBindingList = new FunctionBindingList { Function = function };
            functionBindingList.Clear();

            WaitUntilLastOperationIsFinished(functionBindingList);

            Assert.AreEqual(0, function.GetValues<string>().Count);
        }
Beispiel #7
0
        public void ClearFunction_ShouldNotClearAttributes()
        {
            // setup
            IVariable<double> x = new Variable<double>("x");
            IVariable<double> y = new Variable<double>("y");
            IFunction f = new Function();
            f.Arguments.Add(x);
            f.Components.Add(y);
            string kie = "kie";
            string expected = "veljoe";
            f.Attributes[kie] = expected;
            f.Components[0].Attributes[kie] = expected;

            f.SetValues(new[] { 100.0, 200.0, 300.0 }, new VariableValueFilter<double>(x, new[] { 1.0, 2.0, 3.0 }));

            // call
            f.Clear();

            // check
            Assert.AreEqual(0, f.GetValues().Count);
            var funcVal = f.Attributes[kie];
            Assert.AreEqual(expected,funcVal);
            var val = f.Components[0].Attributes[kie];
            Assert.AreEqual(expected,val);
        }
        public void BranchSegmentBoundaryAsFunctionArgument()
        {
            // Test with only 1 FeatureVariable as argument; could be usefull as initial conditions
            Function initialFlow = new Function("initial flow");

            Variable<SimpleFeature> branchSegmentBoundaryVariable = new Variable<SimpleFeature>("cell");
            branchSegmentBoundaryVariable.AutoSort = false;
            initialFlow.Arguments.Add(branchSegmentBoundaryVariable);

            initialFlow.Components.Add(new Variable<double>("depth"));

            // save results back to Functions
            initialFlow[boundary11] = 1.0;
            initialFlow[boundary12] = 2.0;
            initialFlow[boundary13] = 3.0;
            initialFlow[boundary23] = 4.0;
            initialFlow[boundary22] = 5.0;
            initialFlow[boundary21] = 6.0;

            IList<double> values = initialFlow.GetValues<double>();
            Assert.AreEqual(1.0, values[0]);
            Assert.AreEqual(2.0, values[1]);
            Assert.AreEqual(3.0, values[2]);
            Assert.AreEqual(4.0, values[3]);
            Assert.AreEqual(5.0, values[4]);
            Assert.AreEqual(6.0, values[5]);


            values = initialFlow.GetValues<double>(new VariableValueFilter<SimpleFeature>(branchSegmentBoundaryVariable, boundary23));
            Assert.AreEqual(4.0, values[0]);

            double[] initialFlowValues = { 11, 12, 13, 14, 15, 16 }; // get from model engine
            initialFlow.SetValues(initialFlowValues);
            values = initialFlow.GetValues<double>();
            Assert.AreEqual(11.0, values[0]);
            Assert.AreEqual(12.0, values[1]);
            Assert.AreEqual(13.0, values[2]);
            Assert.AreEqual(14.0, values[3]);
            Assert.AreEqual(15.0, values[4]);
            Assert.AreEqual(16.0, values[5]);

            List<SimpleFeature> branchSegmentBoundaries2 = new List<SimpleFeature>();
            branchSegmentBoundaries2.Add(boundary21);
            branchSegmentBoundaries2.Add(boundary22);
            branchSegmentBoundaries2.Add(boundary23);
            values = initialFlow.GetValues<double>(new VariableValueFilter<SimpleFeature>(branchSegmentBoundaryVariable, branchSegmentBoundaries2));
            Assert.AreEqual(3, values.Count);
            Assert.AreEqual(14.0, values[0]);
            Assert.AreEqual(15.0, values[1]);
            Assert.AreEqual(16.0, values[2]);
        }