public void AggregateEquivalentNotSame()
        {
            var r1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var d1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var t1 = new StatementAggregate(r1, d1);

            var r2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var d2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var t2 = new StatementAggregate(r2, new ValSimple($"{d2.RawValue}+b", typeof(int), new IDeclaredParameter[] { d1 }));

            var r = t1.RequiredForEquivalence(t2);
            Assert.IsFalse(r.Item1);
        }
        public void AggregateEquivalentSameWithPreRenames()
        {
            var r1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var d1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var t1 = new StatementAggregate(r1, d1);

            var r2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var d2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var t2 = new StatementAggregate(r2, d2);

            var r = t1.RequiredForEquivalence(t2, new Tuple<string, string>[] { new Tuple<string, string>(d2.RawValue, d1.RawValue) });
            Assert.IsTrue(r.Item1);
            var renames = r.Item2.ToArray();
            Assert.AreEqual(1, renames.Length);
            Assert.AreEqual(r1.RawValue, renames.Where(p => p.Item1 == r2.RawValue).First().Item2);
        }
        public void AggregateEquivalentSameWithTwoSums()
        {
            var r1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var d1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var d2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var t1 = new StatementAggregate(r1, new ValSimple($"{d1.RawValue}+{d2.RawValue}", typeof(int), new IDeclaredParameter[] { d1, d2 }));

            var r2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var d3 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var d4 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var t2 = new StatementAggregate(r2, new ValSimple($"{d3.RawValue}+{d4.RawValue}", typeof(int), new IDeclaredParameter[] { d4, d3 }));

            var r = t1.RequiredForEquivalence(t2);
            Assert.IsTrue(r.Item1);
            var renames = r.Item2.ToArray();
            Assert.AreEqual(3, renames.Length);
        }