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
            }
        }