public void Test043()
        {
            var e1 = Expression.Constant(10, typeof(int));

            var e2 = Expression.Parameter(typeof(Exception));
            var e3 = Expression.Constant(11, typeof(int));
            var e4 = Expression.Catch(e2, e3);

            var e6 = Expression.Parameter(typeof(NullReferenceException));
            var e7 = Expression.Constant(13, typeof(int));
            var e8 = Expression.Catch(e6, e7);

            var e10  = Expression.Parameter(typeof(AggregateException));
            var e11  = Expression.Constant(15, typeof(int));
            var e12  = Expression.Catch(e10, e11);
            var e12n = Expression.Catch(e10, e11);

            var e14 = Expression.TryCatch(e1, e4, e8, e12);

            var assert = ExpressionVisitorVerifierTool.Create();

            assert.CatchBlockReplace.Add(e12, e12n);
            assert.Execute(e14);

            assert.WasVisited(e1);
            assert.WasProduced(e1);
            assert.WasVisited(e2);
            assert.WasProduced(e2);
            assert.WasVisited(e3);
            assert.WasProduced(e3);

            assert.WasVisited(e6);
            assert.WasProduced(e6);
            assert.WasVisited(e7);
            assert.WasProduced(e7);

            assert.WasVisited(e10);
            assert.WasProduced(e10);
            assert.WasVisited(e11);
            assert.WasProduced(e11);

            assert.WasVisited(e14);
            assert.WasNotProduced(e14);
            assert.WasProduced(assert.Result);

            // fault, finally, and 3x catch block filter
            assert.WasVisited(null, 5);
            assert.WasProduced(null, 5);

            assert.TotalVisits(13);
            assert.TotalProduced(13);

            var cbResult = (TryExpression)assert.Result;

            Assert.AreEqual(cbResult.Handlers[0], e4);
            Assert.AreEqual(cbResult.Handlers[1], e8);
            Assert.AreEqual(cbResult.Handlers[2], e12n);
        }