コード例 #1
0
ファイル: FuncAdapterTests.cs プロジェクト: pilgrimzh/Jace
        public void TestFuncAdapterWrapAndGC()
        {
            FuncAdapter adapter = new FuncAdapter();

            List <ParameterInfo> parameters = new List <ParameterInfo>()
            {
                new ParameterInfo()
                {
                    Name = "test1", DataType = DataType.Integer
                },
                new ParameterInfo()
                {
                    Name = "test2", DataType = DataType.FloatingPoint
                }
            };

            Func <Dictionary <string, double>, double> function = (dictionary) => dictionary["test1"] + dictionary["test2"];

            Func <int, double, double> wrappedFunction = (Func <int, double, double>)adapter.Wrap(parameters, function);

            adapter = null;
            GC.Collect();

            Assert.AreEqual(3.0, wrappedFunction(1, 2.0));
        }
コード例 #2
0
        /// <summary>
        /// Build the formula defined. This will create a func delegate matching with the parameters
        /// and the return type specified.
        /// </summary>
        /// <returns>The func delegate for the defined formula.</returns>
        public Delegate Build()
        {
            if (!resultDataType.HasValue)
            {
                throw new Exception("Please define a result data type for the formula.");
            }

            Func <IDictionary <string, double>, double> formula = engine.Build(formulaText, constants);

            FuncAdapter adapter = new FuncAdapter();

            return(adapter.Wrap(parameters, variables =>
            {
                if (!caseSensitive)
                {
                    variables = EngineUtil.ConvertVariableNamesToLowerCase(variables);
                }

                engine.VerifyVariableNames(variables);

                // Add the reserved variables to the dictionary
                foreach (ConstantInfo constant in engine.ConstantRegistry)
                {
                    variables.Add(constant.ConstantName, constant.Value);
                }

                return formula(variables);
            }));
        }
コード例 #3
0
ファイル: FormulaBuilder.cs プロジェクト: plurby/Jace
        public Delegate Build()
        {
            if (!resultDataType.HasValue)
            {
                throw new Exception("Please define a result data type for the formula.");
            }

            Func <Dictionary <string, double>, double> formula = engine.Build(formulaText);

            FuncAdapter adapter = new FuncAdapter();

            return(adapter.Wrap(parameters, variables => formula(variables)));
        }
コード例 #4
0
ファイル: FuncAdapterTests.cs プロジェクト: pilgrimzh/Jace
        public void TestFourArguments()
        {
            FuncAdapter adapater = new FuncAdapter();

            List <ParameterInfo> parameters = new List <ParameterInfo>()
            {
                new ParameterInfo()
                {
                    Name = "test1", DataType = DataType.Integer
                },
                new ParameterInfo()
                {
                    Name = "test2", DataType = DataType.Integer
                },
                new ParameterInfo()
                {
                    Name = "test3", DataType = DataType.Integer
                },
                new ParameterInfo()
                {
                    Name = "test4", DataType = DataType.Integer
                }
            };

            Func <int, int, int, int, double> wrappedFunction = (Func <int, int, int, int, double>)adapater.Wrap(parameters, dictionary => dictionary["test4"]);

            Assert.AreEqual(8.0, wrappedFunction(2, 4, 6, 8));
        }