private static void FromIntAndBackAgain <TValue>(int value) { var generator = new CoreExpressionGenerator(); var intParam = Expression.Parameter(typeof(int), "iVal"); var fromIntExp = generator.Generate(new ConversionExpressionRequest(generator, intParam, typeof(TValue))); Assert.NotNull(fromIntExp); var fromIntFunc = Expression.Lambda <Func <int, TValue> >(fromIntExp, intParam).Compile(); var genericParam = Expression.Parameter(typeof(TValue), "tVal"); var toIntExp = generator.Generate(new ConversionExpressionRequest(generator, genericParam, typeof(int))); Assert.NotNull(toIntExp); var toIntFunc = Expression.Lambda <Func <TValue, int> >(toIntExp, genericParam).Compile(); var expectedGenericValue = ConvertTo <TValue>(value); var genericValue = fromIntFunc(value); Assert.Equal(expectedGenericValue, genericValue); var intResult = toIntFunc(genericValue); Assert.Equal(value, intResult); }
private static void FromDoubleAndBackAgain <TValue>(double value) { var generator = new CoreExpressionGenerator(); var doubleParam = Expression.Parameter(typeof(double), "dVal"); var fromDoubleExp = generator.Generate(new ConversionExpressionRequest(generator, doubleParam, typeof(TValue))); Assert.NotNull(fromDoubleExp); var fromDoubleFunc = Expression.Lambda <Func <double, TValue> >(fromDoubleExp, doubleParam).Compile(); var genericParam = Expression.Parameter(typeof(TValue), "tVal"); var toDoubleExp = generator.Generate(new ConversionExpressionRequest(generator, genericParam, typeof(double))); Assert.NotNull(toDoubleExp); var toDoubleFunc = Expression.Lambda <Func <TValue, double> >(toDoubleExp, genericParam).Compile(); var expectedGenericValue = ConvertTo <TValue>(value); var genericValue = fromDoubleFunc(value); Assert.Equal(expectedGenericValue, genericValue); var doubleResult = toDoubleFunc(genericValue); Assert.Equal(value, doubleResult, 5); }
private static void GenericAdd <TValue>(double a, double b) { var generator = new CoreExpressionGenerator(); var expected = ConvertTo <TValue>(a + b); var leftHandSide = Expression.Parameter(typeof(TValue), "leftHandSide"); var rightHandSide = Expression.Parameter(typeof(TValue), "rightHandSide"); var expression = generator.Generate(new FunctionExpressionGenerationRequest(generator, "Add", leftHandSide, rightHandSide)); Assert.NotNull(expression); var func = Expression.Lambda <Func <TValue, TValue, TValue> >(expression, leftHandSide, rightHandSide).Compile(); var result = func(ConvertTo <TValue>(a), ConvertTo <TValue>(b)); Assert.Equal(expected, result); }
private static void ConstantIs <TValue>(string constantName, double value) { var generator = new CoreExpressionGenerator(); var expected = ConvertTo <TValue>(value); var expression = generator.Generate( new ConstantExpressionGenerationRequest(generator, constantName, typeof(TValue))); Assert.NotNull(expression); var func = Expression.Lambda <Func <TValue> >(expression).Compile(); var result = func(); Assert.Equal(expected, result); }