Beispiel #1
0
        public void AddRowsToBindingListUpdatesFunction()
        {
            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";

            IFunctionBindingList functionBindingList = new FunctionBindingList {
                Function = function
            };

            functionBindingList.AddNew();
            var row = (FunctionBindingListRow)functionBindingList[3];

            // row[0] = 3;
            row[1] = "three";

            WaitUntilLastOperationIsFinished(functionBindingList);

            Assert.AreEqual(row[1], function[3]);
        }
        public void ClearFunctionThatIsBoundToDecorator()
        {
            IFunction function = new Function("time series");

            function.Arguments.Add(new Variable<DateTime>("time"));
            function.Components.Add(new Variable<double>("water_discharge"));

            // set initial values
            DateTime time1 = DateTime.Now;
            DateTime time2 = time1.AddMinutes(1);
            DateTime time3 = time2.AddMinutes(1);
            function[time1] = 0.0;
            function[time2] = 1.0;
            function[time3] = 2.0;

            ILineChartSeries lineChartSeries = ChartSeriesFactory.CreateLineSeries();

            lineChartSeries.XValuesDataMember = function.Arguments[0].DisplayName;
            lineChartSeries.YValuesDataMember = function.Components[0].DisplayName;

            var control = new Control();
            WindowsFormsTestHelper.Show(control);

            var functionBindingList = new FunctionBindingList(function) { SynchronizeInvoke = control };
            lineChartSeries.DataSource = functionBindingList;
            
            function.Clear();

            while(functionBindingList.IsProcessing)
            {
                Application.DoEvents();
            }

        }
Beispiel #3
0
        public void ClearSourceFunctionShouldClearFilteredBindingList()
        {
            IFunction function = new Function
            {
                Arguments  = { new Variable <int>("x") },
                Components = { new Variable <int>("f") }
            };

            function[1] = 1;
            function[2] = 4;

            var filteredFunction = function.Filter(new VariableValueFilter <int>(function.Arguments[0], new[] { 1 }));

            IFunctionBindingList functionBindingList = new FunctionBindingList {
                Function = filteredFunction
            };

            functionBindingList.Count
            .Should().Be.EqualTo(1);

            function.Clear();

            functionBindingList.Count
            .Should().Be.EqualTo(0);
        }
Beispiel #4
0
        public void BindToFunctionWithNaNValuesWithDateTimeArgument()
        {
            //setup a 2D function and fix one dimension
            IFunction function = new Function();

            function.Arguments.Add(new Variable <DateTime>("x"));
            function.Components.Add(new Variable <double>("y"));

            function[new DateTime(2000, 1, 1)] = 2.0;
            function[new DateTime(2001, 1, 1)] = 3.0;
            function[new DateTime(2002, 1, 1)] = double.NaN;
            function[new DateTime(2003, 1, 1)] = 4.0;

            ILineChartSeries lineChartSeries = ChartSeriesFactory.CreateLineSeries();
            var component = function.Components[0];
            var variable  = function.Arguments[0];

            lineChartSeries.XValuesDataMember = variable.DisplayName;
            lineChartSeries.YValuesDataMember = component.DisplayName;

            var functionBindingList = new FunctionBindingList(function);

            lineChartSeries.DataSource = functionBindingList;

            Assert.AreEqual(4, lineChartSeries.XValues.Count);
            Assert.AreEqual(4, lineChartSeries.YValues.Count);

            var chartView1 = new ChartView();

            chartView1.Chart.Series.Add(lineChartSeries);

            WindowsFormsTestHelper.ShowModal(chartView1);
        }
Beispiel #5
0
        public void SeriesChangesWhenFunctionBindingListChanges()
        {
            IFunction function  = new Function();
            IVariable yVariable = new Variable <double>("y");
            IVariable xVariable = new Variable <double>("x");

            function.Arguments.Add(xVariable);
            function.Components.Add(yVariable);

            function[1.0] = 2.0;
            function[2.0] = 5.0;
            function[3.0] = 1.0;

            ILineChartSeries ls = ChartSeriesFactory.CreateLineSeries();

            ls.YValuesDataMember = function.Components[0].DisplayName;
            ls.XValuesDataMember = function.Arguments[0].DisplayName;

            var synchronizeObject = new Control();

            synchronizeObject.Show();

            var functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = synchronizeObject
            };

            ls.DataSource = functionBindingList;

            //a change in the function should change the series
            function[1.0] = 20.0;

            //wait for the series to get refreshed
            Assert.AreEqual(20, ls.YValues[0]);
        }
        private void SetupFunctionTable()
        {
            tableView = new TableView();

            var x = new Variable <int>("x");
            var y = new Variable <int>("y");

            y.DefaultValue = -99;

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

            f[1]  = 15;
            f[5]  = 5;
            f[10] = 1;
            f[15] = 10;

            var bindingList = new FunctionBindingList(f)
            {
                SynchronizeInvoke = tableView
            };

            tableView.Data = bindingList;

            tableView.AllowColumnSorting(false);
            tableView.AllowColumnFiltering(false);

            tableViewCopyPasteController = new TableViewFunctionPasteController(tableView, new List <int>(new [] { 0 }));
        }
Beispiel #7
0
        public void ChangeFunctionValueAndCheckBindingListRowValue()
        {
            IFunction function = new Function();

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

            function[0] = "zero";

            IFunctionBindingList functionBindingList = new FunctionBindingList {
                Function = function
            };

            // binding list contains rows with argument and component values of the function
            var firstRow = (FunctionBindingListRow)functionBindingList[0];

            Assert.AreEqual(0, firstRow["x1"]);
            Assert.AreEqual("zero", firstRow["y1"]);

            //check if changecalled event fires when we change the underlying function

            int calledCount = 0;

            functionBindingList.ListChanged += delegate { calledCount++; };
            function[0] = "new_one";

            Thread.Sleep(1000);

            //Assert.AreEqual(1, calledCount);
            Assert.AreEqual("new_one", firstRow["y1"]);
        }
Beispiel #8
0
        public void Bind2DFunctionWithTuple()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable <Pair <string, float> >());
            function.Components.Add(new Variable <int>("value"));

            function[new Pair <string, float>("aap", 0)]  = 0;
            function[new Pair <string, float>("aap", 11)] = 1;
            function[new Pair <string, float>("muis", 0)] = 1;

            TypeConverter.RegisterTypeConverter <Pair <string, float>, PairTypeConverter <string, float> >();

            Assert.AreEqual(1, function.Arguments.Count);
            Assert.AreEqual(1, function.Components.Count);

            var gridView = new DataGridView();
            IFunctionBindingList functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = gridView
            };

            gridView.DataSource = functionBindingList;

            WindowsFormsTestHelper.ShowModal(gridView);
        }
Beispiel #9
0
        public void ClearFunctionThatIsBoundToDecorator()
        {
            IFunction function = new Function("time series");

            function.Arguments.Add(new Variable <DateTime>("time"));
            function.Components.Add(new Variable <double>("water_discharge"));

            // set initial values
            DateTime time1 = DateTime.Now;
            DateTime time2 = time1.AddMinutes(1);
            DateTime time3 = time2.AddMinutes(1);

            function[time1] = 0.0;
            function[time2] = 1.0;
            function[time3] = 2.0;

            ILineChartSeries lineChartSeries = ChartSeriesFactory.CreateLineSeries();

            lineChartSeries.XValuesDataMember = function.Arguments[0].DisplayName;
            lineChartSeries.YValuesDataMember = function.Components[0].DisplayName;

            var control = new Control();

            WindowsFormsTestHelper.Show(control);

            var functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = control
            };

            lineChartSeries.DataSource = functionBindingList;

            function.Clear();
        }
Beispiel #10
0
        public void Bind2DFunctionWith1ComponentAndCheckColumnName()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable <int>("x")
            {
                Unit = new Unit("s", "s")
            });
            function.Arguments.Add(new Variable <int>("y")
            {
                Unit = new Unit("m", "m")
            });
            function.Components.Add(new Variable <string>("f1")
            {
                Unit = new Unit("m/s", "m/s")
            });

            function[0, 0] = new[] { "f1(0,0)", "f2(0,0)" };
            function[1, 0] = new[] { "f1(1,0)", "f2(1,0)" };
            function[0, 1] = new[] { "f1(0,1)", "f2(0,1)" };
            function[1, 1] = new[] { "f1(1,1)", "f2(1,1)" };

            var gridView = new DataGridView();
            IFunctionBindingList functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = gridView
            };

            gridView.DataSource = functionBindingList;

            WindowsFormsTestHelper.ShowModal(gridView);
        }
Beispiel #11
0
        public void RemoveRowsWhenArgumentValueIsRemovedIn2DFunction_Dimension0()
        {
            IFunction function = new Function();

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

            function[0, 0] = "00";
            function[0, 1] = "01";
            function[1, 0] = "10";
            function[1, 1] = "11";

            var functionBindingList = new FunctionBindingList {
                Function = function
            };

            function.Arguments[0].Values.RemoveAt(1);

            while (functionBindingList.IsProcessing)
            {
                Application.DoEvents();
            }

            Assert.AreEqual(function.Components[0].Values.Count, functionBindingList.Count);
        }
Beispiel #12
0
        public void RemoveRowsWhenArgumentValueIsRemovedIn2DFunction_Dimension0_WithForm()
        {
            IFunction function = new Function();

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

            function[0, 0] = "00";
            function[0, 1] = "01";
            function[1, 0] = "10";
            function[1, 1] = "11";

            var gridView = new DataGridView();
            IFunctionBindingList functionBindingList = new FunctionBindingList {
                Function = function, SynchronizeInvoke = gridView
            };

            gridView.DataSource = functionBindingList;

            Action <Form> showAction = delegate
            {
                function.Arguments[0].Values.RemoveAt(1);
                Application.DoEvents();
                Thread.Sleep(50);
                Application.DoEvents();
                Assert.AreEqual(function.Components[0].Values.Count, functionBindingList.Count);
            };

            WindowsFormsTestHelper.ShowModal(gridView, showAction);
        }
Beispiel #13
0
        public void InsertRowsWhenArgumentValueAreInsertedIn2DFunction_Dimension0()
        {
            IFunction function = new Function();

            var variablex1 = new Variable <int>("x1");

            function.Arguments.Add(variablex1);
            var variablex2 = new Variable <int>("x2");

            function.Arguments.Add(variablex2);
            function.Components.Add(new Variable <string>("y"));
            var value = "somevalue";

            function.Components[0].DefaultValue = value;
            function[0, 0] = "00";
            function[0, 1] = "01";
            function[2, 0] = "20";
            function[2, 1] = "21";

            IFunctionBindingList functionBindingList = new FunctionBindingList {
                Function = function
            };

            variablex1.Values.Insert(1, 42);

            WaitUntilLastOperationIsFinished(functionBindingList);

            //check functionbindinglist values
            //two functionbindinglist rows where added at position 2 and three of the bindinglist containing default componentvalues
            Assert.AreEqual(value, ((FunctionBindingListRow)functionBindingList[2])[2]);
            Assert.AreEqual(value, ((FunctionBindingListRow)functionBindingList[3])[2]);
            Assert.AreEqual(function.Components[0].Values.Count, functionBindingList.Count);
        }
Beispiel #14
0
        public void ClearSourceFunctionShouldClearBindingList()
        {
            IFunction function = new Function
            {
                Arguments  = { new Variable <int>("x") },
                Components = { new Variable <int>("f") }
            };

            function[1] = 1;
            function[2] = 4;

            var functionBindingList = new FunctionBindingList {
                Function = function
            };

            functionBindingList.Count
            .Should().Be.EqualTo(2);

            function.Clear();

            // wait until binding list is actually cleared.
            WaitUntilLastOperationIsFinished(functionBindingList);

            functionBindingList.Count
            .Should().Be.EqualTo(0);
        }
Beispiel #15
0
        public void ChangingDataUpdatesColumns()
        {
            var levelTimeSeries = new TimeSeries();

            levelTimeSeries.Arguments[0].DefaultValue = new DateTime(2000, 1, 1);
            levelTimeSeries.Components.Add(new Variable <double>("level", new Unit("m", "m")));
            levelTimeSeries.Name = "water level";

            var tableView           = new TableView();
            var functionBindingList = new FunctionBindingList(levelTimeSeries)
            {
                SynchronizeInvoke = tableView
            };

            tableView.Data = functionBindingList;

            var flowSeries = new TimeSeries();

            flowSeries.Arguments[0].DefaultValue = new DateTime(2000, 1, 1);
            flowSeries.Components.Add(new Variable <double>("flow", new Unit("m³/s", "m³/s")));
            flowSeries.Name = "flow";
            tableView.Data  = new FunctionBindingList(flowSeries)
            {
                SynchronizeInvoke = tableView
            };

            //WindowsFormsTestHelper.ShowModal(tableView);

            Assert.AreEqual("flow [m³/s]", tableView.Columns[1].Caption);
        }
Beispiel #16
0
        public void ShowReadOnlyFirstColumn()
        {
            var x = new Variable <int>("x");
            var y = new Variable <int>("y");

            y.DefaultValue = -99;

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

            f[1]  = 1;
            f[5]  = 5;
            f[10] = 10;
            f[15] = 15;

            var tableView   = new TableView();
            var bindingList = new FunctionBindingList(f)
            {
                SynchronizeInvoke = tableView
            };

            tableView.Data = bindingList;
            tableView.Columns[0].ReadOnly = true;

            WindowsFormsTestHelper.ShowModal(tableView);
        }
        public void PasteTextIntoFunctionBindingList()
        {
            IFunction function = new Function();
            var argument = new Variable<string>("A");
            function.Arguments.Add(argument);
            var component = new Variable<string>("B");
            function.Components.Add(component);

            var view = new TableView();
            IBindingList bindingList = new FunctionBindingList(function) { SynchronizeInvoke = view };
            view.Data = bindingList;

            const string argumentvalue1 = "argumentvalue1";
            const string componentvalue1 = "componentvalue1";
            const string argumentvalue2 = "argumentvalue2";
            string componentvalue2 = "componentvalue2" + (char)0x03A9;


            Clipboard.SetText(string.Format("{0}\t{1}" + Environment.NewLine +
                                            "{2}\t{3}", argumentvalue1, componentvalue1, argumentvalue2,
                                            componentvalue2));

            //action! pasting the text should fill out the function
            view.PasteClipboardContents();

            Thread.Sleep(2000);

            Assert.AreEqual(argumentvalue1, argument.Values[0]);
            Assert.AreEqual(componentvalue1, component.Values[0]);
            Assert.AreEqual(argumentvalue2, argument.Values[1]);
            Assert.AreEqual(componentvalue2, component.Values[1]);

        }
Beispiel #18
0
        public void ModifyBindingListRowAndCommitUpdatesFunction()
        {
            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";

            IFunctionBindingList functionBindingList = new FunctionBindingList(function);

            var row = (FunctionBindingListRow)functionBindingList[0];

            var three = "three";

            row[1] = three;

            Assert.AreEqual(row[1], three);          //set
            Assert.AreNotEqual(row[1], function[0]); //but not yet committed

            row.EndEdit();                           //commit

            row = (FunctionBindingListRow)functionBindingList[0];

            Assert.AreEqual(row[1], three);       //still set
            Assert.AreEqual(row[1], function[0]); //committed
        }
Beispiel #19
0
        public void SetMultipleValuesToFunctionUpdatesBindingList()
        {
            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";

            IFunctionBindingList functionBindingList = new FunctionBindingList(function);

            function[3] = "three";

            Assert.AreEqual(4, functionBindingList.Count);

            function.Arguments[0].AddValues(new[] { 4, 5, 6 });

            Assert.AreEqual(7, functionBindingList.Count);

            function.Arguments[0].SetValues(new[] { 8, 9, 10 }); //this adds the values, so expected is 7+3

            Assert.AreEqual(10, functionBindingList.Count);
        }
Beispiel #20
0
        public void FunctionBindingListShouldSuspendUpdatesDuringFireEventsFalse()
        {
            //add a function with a bindinglist
            var f = new Function
            {
                Arguments  = { new Variable <double>("x") },
                Components = { new Variable <double>("y") }
            };

            var bindingList = new FunctionBindingList(f);

            //fake a model run by setting DelayedEventHandlerController.FireEvents to false (rename it to eventscontroller?)
            DelayedEventHandlerController.FireEvents = false;

            try
            {
                //write a lot of values in function...
                var argumentValues  = Enumerable.Range(1, 1000).Select(i => Convert.ToDouble(i));
                var componentValues = Enumerable.Range(1, 1000).Select(i => Convert.ToDouble(i));
                f.SetComponentArgumentValues(componentValues, argumentValues);

                //assert the bindinglist did NOT update
                Assert.AreEqual(0, bindingList.Count);
            }
            finally
            {
                //re-enable event in DelayedEventHandlerController
                DelayedEventHandlerController.FireEvents = true;
            }

            //check the bindinglist got the message..(rowcount+sending a 'reset' event to be handled by the tableview.
            Assert.AreEqual(1000, bindingList.Count);
        }
Beispiel #21
0
        public void ModifyingTableWhichTriggersReorderingGoesFine()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable <int>("x1")
            {
                IsAutoSorted = true
            });
            function.Components.Add(new Variable <string>("y1"));

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

            var bindingList = new FunctionBindingList(function);

            var called = 0;

            bindingList.ListChanged += (s, e) => called++;

            var row = bindingList[0];

            row[0] = 3;                            // will cause reordering in function
            row.EndEdit();                         // commit

            Assert.Greater(called, 0);             //table needs to be notified of changes
            Assert.AreEqual(3, bindingList[2][0]); //expect bindinglist to reorder as well
        }
Beispiel #22
0
        public void TestEndNewCancelsOnUncommittedValues()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable <int>());
            function.Components.Add(new Variable <int>());

            var functionBindingList = new FunctionBindingList(function);

            // add one real row
            functionBindingList.AddNew();
            functionBindingList[0][0] = 1;
            functionBindingList[0][1] = 2;
            functionBindingList[0].EndEdit(); //commits
            functionBindingList.EndNew(0);

            // add one row (but do not commit)
            functionBindingList.AddNew();
            functionBindingList[1][1] = 3;

            Assert.AreEqual(2, functionBindingList.Count);

            functionBindingList.EndNew(1); //should cause a cancel: uncommitted values

            Assert.AreEqual(1, functionBindingList.Count);
        }
Beispiel #23
0
        public void SeriesChangesWhenFunctionBindingListChanges()
        {
            IFunction function = new Function();
            IVariable yVariable = new Variable<double>("y");
            IVariable xVariable = new Variable<double>("x");
            function.Arguments.Add(xVariable);
            function.Components.Add(yVariable);
            
            function[1.0] = 2.0;
            function[2.0] = 5.0;
            function[3.0] = 1.0;

            ILineChartSeries ls = ChartSeriesFactory.CreateLineSeries();
            ls.YValuesDataMember = function.Components[0].DisplayName;
            ls.XValuesDataMember = function.Arguments[0].DisplayName;

            var synchronizeObject = new Control();
            synchronizeObject.Show();

            var functionBindingList = new FunctionBindingList(function) { SynchronizeInvoke = synchronizeObject };
            ls.DataSource = functionBindingList;
            
            //a change in the function should change the series
            function[1.0] = 20.0;

            while(functionBindingList.IsProcessing)
            {
                Application.DoEvents();
            }
            
            Assert.AreEqual(20, ls.YValues[0]);
            
        }
Beispiel #24
0
        public void InsertingValuesinTableAreSortedAutomatically()
        {
            var x = new Variable <int>("x");
            var y = new Variable <int>("y");

            y.DefaultValue = -99;

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

            f[1]  = 1;
            f[5]  = 5;
            f[10] = 10;
            f[15] = 15;

            var tableView   = new TableView();
            var bindingList = new FunctionBindingList(f)
            {
                SynchronizeInvoke = tableView
            };

            tableView.Data = bindingList;

            WindowsFormsTestHelper.ShowModal(tableView);
        }
Beispiel #25
0
        public void TableSortingAndFilteringCanBeDisabled()
        {
            var x = new Variable <int>("x");
            var y = new Variable <int>("y");

            y.DefaultValue = -99;

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

            f[1]  = 15;
            f[5]  = 5;
            f[10] = 1;
            f[15] = 10;

            var tableView   = new TableView();
            var bindingList = new FunctionBindingList(f)
            {
                SynchronizeInvoke = tableView
            };

            tableView.Data = bindingList;

            tableView.AllowColumnSorting(false);
            tableView.AllowColumnFiltering(false);

            WindowsFormsTestHelper.ShowModal(tableView);
        }
Beispiel #26
0
        public void RefreshShouldHapenFastWhenFunctionDataSourceHasManyChanges()
        {
            IFunction function = new Function
            {
                Arguments  = { new Variable <int>("x") },
                Components = { new Variable <int>("f") }
            };

            var values = new int[1000];

            for (var i = 0; i < values.Length; i++)
            {
                values[i] = i;
            }

            // create function binding list before to exclude it when measuring time
            var functionBindingList = new FunctionBindingList(function);

            var tableView = new TableView {
                Data = functionBindingList
            };

            // now do the same when table view is shown
            Action <Form> onShown = delegate
            {
                var stopwatch = new Stopwatch();
                stopwatch.Start();
                function.SetValues(values, new VariableValueFilter <int>(function.Arguments[0], values));
                stopwatch.Stop();

                log.DebugFormat("Refreshing grid while inserting values into function took {0}ms", stopwatch.ElapsedMilliseconds);
            };

            WindowsFormsTestHelper.ShowModal(tableView, onShown);
        }
Beispiel #27
0
        private static ILineChartSeries GetLineSeries(IFunction function, ChartView view)
        {
            ILineChartSeries ls = ChartSeriesFactory.CreateLineSeries();
            ls.YValuesDataMember = function.Components[0].DisplayName;
            ls.XValuesDataMember = function.Arguments[0].DisplayName;

            var functionBindingList = new FunctionBindingList(function) { SynchronizeInvoke = view};
            ls.DataSource = functionBindingList;
            return ls;
        }
Beispiel #28
0
        public void ModifyFunctionBindingListFromOtherThreadsWhileDisposing()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable <string>("str"));
            function.Components.Add(new Variable <int>("value"));
            function["aap"]  = 0;
            function["noot"] = 1;
            function["mies"] = 1;

            var    done             = false;
            string exceptionMessage = null;
            var    invokeForm       = new Form();

            InvokeRequiredInfo.SynchronizeObject = invokeForm;

            // one thread is firing static events through the DelayedEventHandlerController.
            var t = new Thread(() =>
            {
                try
                {
                    while (!done)
                    {
                        // the bindinglists are subscribed to this event and are responding to it
                        DelayedEventHandlerController.FireEvents = !DelayedEventHandlerController.FireEvents;
                    }
                }
                catch (Exception e)
                {
                    exceptionMessage = e.ToString();
                }
            });

            t.Start();

            // while another thread is creating & disposing binding lists
            for (int i = 0; i < 100000; i++)
            {
                var bindingList = new FunctionBindingList(function)
                {
                    SynchronizeInvoke = invokeForm, SynchronizeWaitMethod = Application.DoEvents
                };
                bindingList.Dispose();
            }
            done = true;
            t.Join();

            DelayedEventHandlerController.FireEvents = true; // reset firing..

            // see if exceptions occured in the other thread, if so, fail
            if (exceptionMessage != null)
            {
                Assert.Fail(exceptionMessage);
            }
        }
Beispiel #29
0
        public void ContextMenuPasteTextIntoGridBoundToBindingList()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable <string>("A"));
            function.Components.Add(new Variable <string>("B"));
            function["a"] = "b";
            var bindingList = new FunctionBindingList(function);

            var gridControl         = new GridControl();
            var xtraGridContextMenu = new XtraGridContextMenu {
                SourceGrid = gridControl
            };

            gridControl.ContextMenuStrip = xtraGridContextMenu;
            gridControl.DataSource       = bindingList;

            bindingList.SynchronizeInvoke     = gridControl;
            bindingList.SynchronizeWaitMethod = delegate { Application.DoEvents(); };

            const string argumentvalue1  = "argumentvalue1";
            const string componentvalue1 = "componentvalue1";
            const string argumentvalue2  = "argumentvalue2";
            string       componentvalue2 = "componentvalue2" + (char)0x03A9;

            Clipboard.SetText(string.Format("{0}\t{1}" + Environment.NewLine +
                                            "{2}\t{3}", argumentvalue1, componentvalue1, argumentvalue2,
                                            componentvalue2));

            WindowsFormsTestHelper.Show(gridControl);

            for (int i = 0; i < 5; i++)
            {
                Application.DoEvents();
                Thread.Sleep(50);
            }

            var v = (GridView)gridControl.FocusedView;

            xtraGridContextMenu.PasteClipboardContents();

            for (int i = 0; i < 5; i++)
            {
                Application.DoEvents();
                Thread.Sleep(50);
            }

            Assert.AreEqual(argumentvalue1, v.GetRowCellValue(0, v.Columns[0]));
            Assert.AreEqual(componentvalue1, v.GetRowCellValue(0, v.Columns[1]));
            Assert.AreEqual(argumentvalue2, v.GetRowCellValue(1, v.Columns[0]));
            Assert.AreEqual(componentvalue2, v.GetRowCellValue(1, v.Columns[1]));
            WindowsFormsTestHelper.ShowModal(gridControl);
        }
Beispiel #30
0
        public void TestAddNewCoreUsesValueGenerationDelegate()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable <TestClass>());
            function.Components.Add(new Variable <int>());

            FunctionBindingList functionBindingList = new FunctionBindingList(function);

            //add two values..the first one is always OK!!??
            functionBindingList.AddNew();
            functionBindingList.AddNew();
            Assert.AreEqual(2, function.Arguments[0].Values.Count);
        }
Beispiel #31
0
        private static ILineChartSeries GetLineSeries(IFunction function, ChartView view)
        {
            ILineChartSeries ls = ChartSeriesFactory.CreateLineSeries();

            ls.YValuesDataMember = function.Components[0].DisplayName;
            ls.XValuesDataMember = function.Arguments[0].DisplayName;

            var functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = view
            };

            ls.DataSource = functionBindingList;
            return(ls);
        }
Beispiel #32
0
        public void RefreshShouldBeFastWhenFunctionDataSourceHasManyChanges()
        {
            IFunction function = new Function
            {
                Arguments  = { new Variable <int>("x") },
                Components = { new Variable <int>("f") }
            };

            var values = new int[1000];

            for (var i = 0; i < values.Length; i++)
            {
                values[i] = i;
            }

            var chartView = new ChartView();

            var lineSeries = ChartSeriesFactory.CreateLineSeries();

            var functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = chartView
            };

            lineSeries.DataSource = functionBindingList;

            lineSeries.XValuesDataMember = function.Arguments[0].DisplayName;
            lineSeries.YValuesDataMember = function.Components[0].DisplayName;
            chartView.Chart.Series.Add(lineSeries);
            lineSeries.PointerVisible = false;

            // now do the same when table view is shown
            Action <Form> onShown = delegate
            {
                var stopwatch = new Stopwatch();
                stopwatch.Reset();
                stopwatch.Start();
                SetFunctionValuesWrappedWithChartView(function, values);
                stopwatch.Stop();

                log.DebugFormat("Refreshing chart while inserting values into function took {0}ms", stopwatch.ElapsedMilliseconds);

                stopwatch.ElapsedMilliseconds.Should("Insert of 1k values should take < 100ms").Be.LessThan(300);
            };

            WindowsFormsTestHelper.ShowModal(chartView, onShown);
        }
Beispiel #33
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);

            functionBindingList.Clear();

            Assert.AreEqual(0, function.GetValues <string>().Count);
        }
Beispiel #34
0
        public void AddValuesToFunctionUpdatesBindingList()
        {
            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";

            IFunctionBindingList functionBindingList = new FunctionBindingList(function);

            function[3] = "three";

            Assert.AreEqual(4, functionBindingList.Count);
        }
        public void Bind1DFunctionWith2Components()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable<int>("x"));
            function.Components.Add(new Variable<string>("f1"));
            function.Components.Add(new Variable<string>("f2"));

            function[0] = new[] { "f1(0)", "f2(0)" };
            function[1] = new[] { "f1(1)", "f2(1)" };
            function[2] = new[] { "f1(2)", "f2(2)" };

            var gridView = new DataGridView();
            IFunctionBindingList functionBindingList = new FunctionBindingList(function) { SynchronizeInvoke = gridView };
            gridView.DataSource = functionBindingList;

            WindowsFormsTestHelper.ShowModal(gridView);
        }
        public void Bind2DFunctionWith1ComponentAndCheckColumnName()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable<int>("x") { Unit = new Unit("s", "s") });
            function.Arguments.Add(new Variable<int>("y") { Unit = new Unit("m", "m") });
            function.Components.Add(new Variable<string>("f1") { Unit = new Unit("m/s","m/s") });

            function[0, 0] = new[] { "f1(0,0)", "f2(0,0)" };
            function[1, 0] = new[] { "f1(1,0)", "f2(1,0)" };
            function[0, 1] = new[] { "f1(0,1)", "f2(0,1)" };
            function[1, 1] = new[] { "f1(1,1)", "f2(1,1)" };

            var gridView = new DataGridView();
            IFunctionBindingList functionBindingList = new FunctionBindingList(function) { SynchronizeInvoke = gridView };
            gridView.DataSource = functionBindingList;

            WindowsFormsTestHelper.ShowModal(gridView);
        }
Beispiel #37
0
        public void ShowReadOnlyTableView()
        {
            var x = new Variable<int>("x");
            var y = new Variable<int>("y");
            y.DefaultValue = -99;

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

            f[1] = 1;
            f[5] = 5;
            f[10] = 10;
            f[15] = 15;

            var tableView = new TableView { ReadOnly = true };
            var bindingList = new FunctionBindingList(f) { SynchronizeInvoke = tableView};
            tableView.Data = bindingList;

            WindowsFormsTestHelper.ShowModal(tableView);
        }
        public void BindToFilteredFuntion()
        {
            //setup a 2D function and fix one dimension
            IFunction function = new Function();
            IVariable<int> x = new Variable<int>();

            function.Arguments.Add(x);
            function.Arguments.Add(new Variable<int>("Y"));
            function.Components.Add(new Variable<int>());

            function[0, 0] = 2;
            function[0, 1] = 3;
            function[1, 0] = 1;
            function[1, 1] = 4;

            IFunction filteredFunction = function.Filter(new VariableValueFilter<int>(x, 0));

            ILineChartSeries lineChartSeries = ChartSeriesFactory.CreateLineSeries();
            var variable = filteredFunction.Arguments[1];
            var component = filteredFunction.Components[0]; 
            
            lineChartSeries.XValuesDataMember = variable.DisplayName;
            lineChartSeries.YValuesDataMember = component.DisplayName;

            var functionBindingList = new FunctionBindingList(filteredFunction);
            lineChartSeries.DataSource = functionBindingList;
            while (functionBindingList.IsProcessing)
            {
                Application.DoEvents();
            }

            Assert.AreEqual(2, lineChartSeries.XValues.Count);
            Assert.AreEqual(2, lineChartSeries.YValues.Count);
            Assert.AreEqual(0.0, lineChartSeries.XValues[0]);
            Assert.AreEqual(1.0, lineChartSeries.XValues[1]);
            Assert.AreEqual(2.0, lineChartSeries.YValues[0]);
            Assert.AreEqual(3.0, lineChartSeries.YValues[1]);
        }
        public void AddValuesToFunctionUpdatesBindingList()
        {
            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";

            IFunctionBindingList functionBindingList = new FunctionBindingList { Function = function };
            function[3] = "three";

            WaitUntilLastOperationIsFinished(functionBindingList);

            Assert.AreEqual(4, functionBindingList.Count);
        }
        public void ChangeValuesViaBindingListMustUpdateValuesInFunction()
        {
            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";

            IFunctionBindingList functionBindingList = new FunctionBindingList { Function = function };

            var row = (FunctionBindingListRow)functionBindingList[1];
            row[1] = "one_updated";

            WaitUntilLastOperationIsFinished(functionBindingList);

            Assert.AreEqual("one_updated", function[1]);
        }
        public void AddRowsToBindingListUpdatesFunction()
        {
            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";

            IFunctionBindingList functionBindingList = new FunctionBindingList { Function = function };

            functionBindingList.AddNew();
            var row = (FunctionBindingListRow)functionBindingList[3];
            // row[0] = 3;
            row[1] = "three";

            WaitUntilLastOperationIsFinished(functionBindingList);

            Assert.AreEqual(row[1], function[3]);
        }
        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);
        }
        public void ChangeFunctionValueAndCheckBindingListRowValue()
        {
            IFunction function = new Function();
            function.Arguments.Add(new Variable<int>("x1"));
            function.Components.Add(new Variable<string>("y1"));

            function[0] = "zero";

            IFunctionBindingList functionBindingList = new FunctionBindingList { Function = function };

            // binding list contains rows with argument and component values of the function
            var firstRow = (FunctionBindingListRow)functionBindingList[0];
            Assert.AreEqual(0, firstRow["x1"]);
            Assert.AreEqual("zero", firstRow["y1"]);

            //check if changecalled event fires when we change the underlying function

            int calledCount = 0;
            functionBindingList.ListChanged += delegate { calledCount++; };
            function[0] = "new_one";

            Thread.Sleep(1000);

            //Assert.AreEqual(1, calledCount);
            Assert.AreEqual("new_one", firstRow["y1"]);
        }
        public void ClearSourceFunctionShouldClearFilteredBindingList()
        {
            IFunction function = new Function
            {
                Arguments = { new Variable<int>("x")},
                Components = { new Variable<int>("f") }
            };

            function[1] = 1;
            function[2] = 4;

            var filteredFunction = function.Filter(new VariableValueFilter<int>(function.Arguments[0], new[] { 1 }));

            IFunctionBindingList functionBindingList = new FunctionBindingList { Function = filteredFunction };

            functionBindingList.Count
                .Should().Be.EqualTo(1);

            function.Clear();

            functionBindingList.Count
                .Should().Be.EqualTo(0);
        }
Beispiel #45
0
        public void RefreshShouldHapenFastWhenFunctionDataSourceHasManyChanges()
        {
            IFunction function = new Function
                                     {
                                         Arguments = {new Variable<int>("x")},
                                         Components = {new Variable<int>("f")}
                                     };

            var values = new int[1000];
            for (var i = 0; i < values.Length; i++)
            {
                values[i] = i;
            }

            // create function binding list before to exclude it when measuring time
            var functionBindingList = new FunctionBindingList(function);

            var tableView = new TableView { Data = functionBindingList };

            // now do the same when table view is shown
            Action<Form> onShown = delegate
                                       {
                                           var stopwatch = new Stopwatch();
                                           stopwatch.Start();
                                           function.SetValues(values, new VariableValueFilter<int>(function.Arguments[0], values));
                                           stopwatch.Stop();

                                           log.DebugFormat("Refreshing grid while inserting values into function took {0}ms", stopwatch.ElapsedMilliseconds);
                                       };

            WindowsFormsTestHelper.ShowModal(tableView, onShown);
        }
Beispiel #46
0
        public void ContextMenuPasteTextIntoGridBoundToBindingList()
        {
            IFunction function = new Function();
            function.Arguments.Add(new Variable<string>("A"));
            function.Components.Add(new Variable<string>("B"));
            function["a"] = "b";
            var bindingList = new FunctionBindingList(function);

            var gridControl = new GridControl();
            var xtraGridContextMenu = new XtraGridContextMenu { SourceGrid = gridControl };
            gridControl.ContextMenuStrip = xtraGridContextMenu;
            gridControl.DataSource = bindingList;

            bindingList.SynchronizeInvoke = gridControl;
            bindingList.SynchronizeWaitMethod = delegate { Application.DoEvents(); };

            const string argumentvalue1 = "argumentvalue1";
            const string componentvalue1 = "componentvalue1";
            const string argumentvalue2 = "argumentvalue2";
            string componentvalue2 = "componentvalue2" + (char)0x03A9;

            Clipboard.SetText(string.Format("{0}\t{1}" + Environment.NewLine +
                                            "{2}\t{3}", argumentvalue1, componentvalue1, argumentvalue2,
                                            componentvalue2));
            
            WindowsFormsTestHelper.Show(gridControl);

            for (int i = 0; i < 5; i++)
            {
                Application.DoEvents();
                Thread.Sleep(50);
            }

            var v = (GridView)gridControl.FocusedView;
            xtraGridContextMenu.PasteClipboardContents();

            for (int i = 0; i < 5; i++)
            {
                Application.DoEvents();
                Thread.Sleep(50);
            }

            Assert.AreEqual(argumentvalue1, v.GetRowCellValue(0, v.Columns[0]));
            Assert.AreEqual(componentvalue1, v.GetRowCellValue(0, v.Columns[1]));
            Assert.AreEqual(argumentvalue2, v.GetRowCellValue(1, v.Columns[0]));
            Assert.AreEqual(componentvalue2, v.GetRowCellValue(1, v.Columns[1]));
            WindowsFormsTestHelper.ShowModal(gridControl);
        }
Beispiel #47
0
        public void ChangingDataUpdatesColumns()
        {
            var levelTimeSeries = new TimeSeries();
            levelTimeSeries.Arguments[0].DefaultValue = new DateTime(2000, 1, 1);
            levelTimeSeries.Components.Add(new Variable<double>("level", new Unit("m", "m")));
            levelTimeSeries.Name = "water level";

            var tableView = new TableView(); 
            var functionBindingList = new FunctionBindingList(levelTimeSeries) {SynchronizeInvoke = tableView};
            tableView.Data = functionBindingList;

            var flowSeries = new TimeSeries();
            flowSeries.Arguments[0].DefaultValue = new DateTime(2000, 1, 1);
            flowSeries.Components.Add(new Variable<double>("flow", new Unit("m³/s", "m³/s")));
            flowSeries.Name = "flow";
            tableView.Data = new FunctionBindingList(flowSeries) { SynchronizeInvoke = tableView };

            //WindowsFormsTestHelper.ShowModal(tableView);

            Assert.AreEqual("flow [m³/s]", tableView.Columns[1].Caption);
        }
        public void InsertRowsWhenArgumentValueAreInsertedIn2DFunction_Dimension0()
        {
            IFunction function = new Function();

            var variablex1 = new Variable<int>("x1");           
            function.Arguments.Add(variablex1);
            var variablex2 = new Variable<int>("x2");
            function.Arguments.Add(variablex2);
            function.Components.Add(new Variable<string>("y"));
            var value = "somevalue";
            function.Components[0].DefaultValue =  value ;
            function[0, 0] = "00";
            function[0, 1] = "01";
            function[2, 0] = "20";
            function[2, 1] = "21";

            IFunctionBindingList functionBindingList = new FunctionBindingList { Function = function };

            variablex1.Values.Insert(1,42);

            WaitUntilLastOperationIsFinished(functionBindingList);

            //check functionbindinglist values
            //two functionbindinglist rows where added at position 2 and three of the bindinglist containing default componentvalues
            Assert.AreEqual(value, ((FunctionBindingListRow)functionBindingList[2])[2]);
            Assert.AreEqual(value, ((FunctionBindingListRow)functionBindingList[3])[2]);
            Assert.AreEqual(function.Components[0].Values.Count, functionBindingList.Count);
            
        }
 internal FunctionBindingListRow(FunctionBindingList owner)
 {
     this.owner = owner;
 }
        public void InsertNewArgumentAndComponentValuesInto1Arg3CompArray()
        {
            IFunction function = new Function();
            var argument = new Variable<int>("argumentValue");
            function.Arguments.Add(argument);
            var component1 = new Variable<int>("component1");
            var component2 = new Variable<int>("component2");
            var component3 = new Variable<int>("component3");
            function.Components.Add(component1);
            function.Components.Add(component2);
            function.Components.Add(component3);

            var functionBindingList = new FunctionBindingList {Function = function};

            function[0] = new[] {1, 2, 3};
            function[3] = new[] {4, 5, 6};
            function[2] = new[] {7, 8, 9};

            WaitUntilLastOperationIsFinished(functionBindingList);

            var firstRow = functionBindingList[0];
            var secondRow = functionBindingList[1];
            var thirdRow = functionBindingList[2];
            
            Assert.AreEqual(firstRow[1], 1);
            Assert.AreEqual(secondRow[2],secondRow["component2"]);
            Assert.AreEqual(thirdRow[3],6);

            function[1] = new[] {12, 13, 14};

            WaitUntilLastOperationIsFinished(functionBindingList);

            Assert.AreEqual(functionBindingList[1][1], 12);
            Assert.AreEqual(functionBindingList[1][2], 13);
            
            //to see results: uncomment the following
            //var gridView = new DataGridView { DataSource = functionBindingList };
            //WindowsFormsTestHelper.ShowModal(gridView);
        }
        public void Filtered2DFunction()
        {
            IFunction function = new Function
                                     {
                                         Arguments = { new Variable<int>("x"), new Variable<int>("y") },
                                         Components = {new Variable<int>("f")}
                                     };

            function[1, 1] = 1;
            function[1, 2] = 2;
            function[2, 1] = 3;
            function[2, 2] = 4;

            var filteredFunction = function.Filter(new VariableValueFilter<int>(function.Arguments[0], new[]{1}));

            IFunctionBindingList functionBindingList = new FunctionBindingList { Function = filteredFunction };

            functionBindingList.Count
                .Should().Be.EqualTo(2);
        }
        public void ClearSourceFunctionShouldClearBindingList()
        {
            IFunction function = new Function
            {
                Arguments = { new Variable<int>("x") },
                Components = { new Variable<int>("f") }
            };

            function[1] = 1;
            function[2] = 4;

            var functionBindingList = new FunctionBindingList {Function = function};

            functionBindingList.Count
                .Should().Be.EqualTo(2);

            function.Clear();

            // wait until binding list is actually cleared.
            WaitUntilLastOperationIsFinished(functionBindingList);

            functionBindingList.Count
                .Should().Be.EqualTo(0);
        }
Beispiel #53
0
        public void InsertingValuesinTableAreSortedAutomatically()
        {
            var x = new Variable<int>("x");
            var y = new Variable<int>("y");
            y.DefaultValue = -99;

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

            f[1] = 1;
            f[5] = 5;
            f[10] = 10;
            f[15] = 15;

            var tableView = new TableView();
            var bindingList = new FunctionBindingList(f) { SynchronizeInvoke = tableView };
            tableView.Data = bindingList;

            WindowsFormsTestHelper.ShowModal(tableView);
        }
        public void RemoveRowsWhenArgumentValueIsRemovedIn2DFunction_Dimension0_WithForm()
        {
            IFunction function = new Function();

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

            function[0, 0] = "00";
            function[0, 1] = "01";
            function[1, 0] = "10";
            function[1, 1] = "11";

            var gridView = new DataGridView();
            IFunctionBindingList functionBindingList = new FunctionBindingList { Function = function, SynchronizeInvoke = gridView };
            gridView.DataSource = functionBindingList;

            Action<Form> showAction = delegate
                                          {
                                              function.Arguments[0].Values.RemoveAt(1);
                                              Application.DoEvents();
                                              Thread.Sleep(50); 
                                              Application.DoEvents();
                                              Assert.AreEqual(function.Components[0].Values.Count, functionBindingList.Count);
                                          };
            WindowsFormsTestHelper.ShowModal(gridView, showAction);
        }
        public void RemoveRowsWhenArgumentValueIsRemovedIn2DFunction_Dimension0()
        {
            IFunction function = new Function();

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

            function[0, 0] = "00";
            function[0, 1] = "01";
            function[1, 0] = "10";
            function[1, 1] = "11";

            var functionBindingList = new FunctionBindingList { Function = function };

            function.Arguments[0].Values.RemoveAt(1);

            while(functionBindingList.IsProcessing)
            {
                Application.DoEvents();
            }

            Assert.AreEqual(function.Components[0].Values.Count, functionBindingList.Count);
        }
        public void ResetBindingListWhenArgumentsOrValuesChange()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable<int>("index"));
            function.Components.Add(new Variable<int>("value"));

            function[0] = 1;
            function[1] = 2;
            function[2] = 3;

            IFunctionBindingList bindingList= new FunctionBindingList(function);

            Assert.AreEqual(3, bindingList.Count);

            function.Components.Clear();

            WaitUntilLastOperationIsFinished(bindingList);

            Assert.AreEqual(0, bindingList.Count);
        }
Beispiel #57
0
        public void TableSortingAndFilteringCanBeDisabled()
        {
            var x = new Variable<int>("x");
            var y = new Variable<int>("y");
            y.DefaultValue = -99;

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

            f[1] = 15;
            f[5] = 5;
            f[10] = 1;
            f[15] = 10;

            var tableView = new TableView();
            var bindingList = new FunctionBindingList(f) { SynchronizeInvoke = tableView };
            tableView.Data = bindingList;

            tableView.AllowColumnSorting(false);
            tableView.AllowColumnFiltering(false);

            WindowsFormsTestHelper.ShowModal(tableView);
        }
        public void Bind2DFunctionWithTuple()
        {
            IFunction function = new Function();

            function.Arguments.Add(new Variable<Pair<string, float>>());
            function.Components.Add(new Variable<int>("value"));

            function[new Pair<string, float>("aap", 0)] = 0;
            function[new Pair<string, float>("aap", 11)] = 1;
            function[new Pair<string, float>("muis", 0)] = 1;

            TypeConverter.RegisterTypeConverter<Pair<string, float>, PairTypeConverter<string, float>>();

            Assert.AreEqual(1, function.Arguments.Count);
            Assert.AreEqual(1, function.Components.Count);

            var gridView = new DataGridView();
            IFunctionBindingList functionBindingList = new FunctionBindingList(function) { SynchronizeInvoke = gridView };
            gridView.DataSource = functionBindingList;

            WindowsFormsTestHelper.ShowModal(gridView);
        }
        public void InsertRowsWhenArgumentValueAreInsertedIn2DFunction_Dimension1()
        {
            IFunction function = new Function();

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

            function[0, 0] = "00";
            function[0, 2] = "02";
            function[1, 0] = "10";
            function[1, 2] = "12";

            IFunctionBindingList functionBindingList = new FunctionBindingList { Function = function };

            function.Arguments[1].Values.Insert(1, 1);

            Assert.AreEqual(function.Components[0].Values.Count, functionBindingList.Count);
        }
        public void TestAddNewCoreUsesValueGenerationDelegate()
        {

            IFunction function = new Function();
            function.Arguments.Add(new Variable<TestClass>());
            function.Components.Add(new Variable<int>());

            FunctionBindingList functionBindingList = new FunctionBindingList(function);
            //add two values..the first one is always OK!!??
            functionBindingList.AddNew();
            functionBindingList.AddNew();
            Assert.AreEqual(2, function.Arguments[0].Values.Count);
        }