Files
zszq-trs/UnitTestProject/BasicTests/LinqExpressionTest.cs
2024-05-09 14:06:26 +08:00

60 lines
2.0 KiB
C#

using System.Linq.Expressions;
namespace YLErp.BasicTests
{
[TestClass]
public class LinqExpressionTest
{
[TestMethod]
public void TestAddAssign()
{
var data = new LinqData { N1 = 3 };
Expression<Func<LinqData, double>> propExp = n => n.N1;
var pinvoke = Expression.Invoke(propExp, propExp.Parameters);
var addExp = Expression.Add(pinvoke, Expression.Constant(2d, typeof(double)));
var assign = Expression.Assign(propExp.Body, addExp);
var action = Expression.Lambda<Action<LinqData>>(assign, propExp.Parameters).Compile();
action(data);
Assert.AreEqual(data.N1, 5);
var data2 = new LinqData { N1 = 3 };
var assign2 = Expression.AddAssign(propExp.Body, Expression.Constant(3d, typeof(double)));
var action2 = Expression.Lambda<Action<LinqData>>(assign2, propExp.Parameters).Compile();
action2(data2);
Assert.AreEqual(data2.N1, 6);
}
[TestMethod]
public void TestMultiplyAssign()
{
var data = new LinqData { N1 = 3 };
Expression<Func<LinqData, double>> propExp = n => n.N1;
var pinvoke = Expression.Invoke(propExp, propExp.Parameters);
var multiply = Expression.Multiply(pinvoke, Expression.Constant(1 + 0.2, typeof(double)));
var assign = Expression.Assign(propExp.Body, multiply);
var action = Expression.Lambda<Action<LinqData>>(assign, propExp.Parameters).Compile();
action(data);
Assert.AreEqual(data.N1, 3.6, 1e-4);
var data2 = new LinqData { N1 = 3 };
var assign2 = Expression.MultiplyAssign(propExp.Body, Expression.Constant(1.5, typeof(double)));
var action2 = Expression.Lambda<Action<LinqData>>(assign2, propExp.Parameters).Compile();
action2(data2);
Assert.AreEqual(data2.N1, 4.5, 1e-4);
}
class LinqData
{
public double N1 { get; set; }
}
}
}