public void ExpressionEntityTypeRecordizer_Simple() { var netrc = new NoEntityTypesRemainingChecker(); foreach (var e in new Expression[] { (Expression <Func <Qux, int> >)(q => q.Baz), #pragma warning disable IDE0004 // Remove Unnecessary Cast. (Only unnecessary on C# 10 or later.) (Expression <Func <Qux> >)(() => new Qux()), (Expression <Func <Qux> >)(() => new Qux() { Baz = 1 }), (Expression <Func <Qux> >)(() => new Qux(1) { Foo = "bar" }), (Expression <Func <Bar> >)(() => new Bar { Foos = new Foo[] { new Foo { Qux = new Tuple <Func <List <Qux>, long>, bool>(t => t.Count, false) } } }), (Expression <Func <IQueryable <Bar>, IQueryable <long> > >)(xs => from x in xs from y in x.Foos where y.Qux.Item2 select y.Qux.Item1(new List <Qux> { new Qux(1) { Foo = "bar" } })), (Expression <Func <IQueryable <Bar>, IQueryable <Foo> > >)(xs => from x in xs from y in x.Foos select y), (Expression <Func <Qux> >)(() => Activator.CreateInstance <Qux>()), (Expression <Action>)(() => FooIt <Qux>()), (Expression <Func <Qux[]> >)(() => new Qux[1]), (Expression <Func <Qux[]> >)(() => new Qux[] { new Qux(1), new Qux { Baz = 1 } }), (Expression <Func <Tuple <Qux, int> > >)(() => new Tuple <Qux, int>(new Qux(1), 2)), (Expression <Func <Holder <Qux> > >)(() => new Holder <Qux> { Value = new Qux(42) }), #pragma warning restore IDE0004 // Remove Unnecessary Cast }) { var eta = new ExpressionEntityTypeRecordizer(); var res = eta.Apply(e); netrc.Visit(res); var expressionComparer = ObjectComparator.CreateInstance().ExpressionComparator; expressionComparer.Equals(e, res); } }
public void ExpressionEntityTypeAnonymizer_Simple() { var netrc = new NoEntityTypesRemainingChecker(); foreach (var e in new Expression[] { (Expression <Func <Qux, int> >)(q => q.Baz), (Expression <Func <Qux> >)(() => new Qux()), (Expression <Func <Qux> >)(() => new Qux() { Baz = 1 }), (Expression <Func <Qux> >)(() => new Qux(1) { Foo = "bar" }), (Expression <Func <Bar> >)(() => new Bar { Foos = new Foo[] { new Foo { Qux = new Tuple <Func <List <Qux>, long>, bool>(t => t.Count, false) } } }), (Expression <Func <IQueryable <Bar>, IQueryable <long> > >)(xs => from x in xs from y in x.Foos where y.Qux.Item2 select y.Qux.Item1(new List <Qux> { new Qux(1) { Foo = "bar" } })), (Expression <Func <IQueryable <Bar>, IQueryable <Foo> > >)(xs => from x in xs from y in x.Foos select y), (Expression <Func <Qux> >)(() => Activator.CreateInstance <Qux>()), (Expression <Action>)(() => FooIt <Qux>()), (Expression <Func <Qux[]> >)(() => new Qux[1]), (Expression <Func <Qux[]> >)(() => new Qux[] { new Qux(1), new Qux { Baz = 1 } }), (Expression <Func <Tuple <Qux, int> > >)(() => new Tuple <Qux, int>(new Qux(1), 2)), (Expression <Func <Holder <Qux> > >)(() => new Holder <Qux> { Value = new Qux(42) }), }) { var eta = new ExpressionEntityTypeAnonymizer(); var res = eta.Apply(e); netrc.Visit(res); // TODO: semantic equivalence checks } }