public void Range_with_dymanice_cells_matches_range_with_cells()
        {
            FSharpTransformationRule R = new FSharpTransformationRule();

            R.from = R.ParseToTree("{i,j}: {i,j+1}");

            Assert.AreEqual(true, R.CanBeAppliedonBool("A1:A2"));
        }
        public void Dynamic_Argument_Can_Be_Formula()
        {
            var Original = ExcelFormulaParser.Parse("SUM(A1)");

            FSharpTransformationRule S1 = new FSharpTransformationRule();

            S1.from = S1.ParseToTree("[c]");

            Assert.AreEqual(true, S1.CanBeAppliedonBool(Original));
        }
        public void Can_Not_Apply_Different_Dynamic_Range()
        {
            var Original = ExcelFormulaParser.Parse("SUM(A2:C7)+SUM(A2:C6)");
            FSharpTransformationRule T = new FSharpTransformationRule();

            T.from = T.ParseToTree("SUM({r})+SUM({r})");
            T.to   = null;

            Assert.IsFalse(T.CanBeAppliedonBool(Original));
        }
        public void Can_Not_Apply_Different_Dynamic_Cells()
        {
            var Original = ExcelFormulaParser.Parse("A3");
            FSharpTransformationRule T = new FSharpTransformationRule();

            T.from = T.ParseToTree("{i,i}");
            T.to   = null;

            Assert.IsFalse(T.CanBeAppliedonBool(Original));
        }
        public void Repeat_Merge()
        {
            var Original = ExcelFormulaParser.Parse("SUM(A1,A2,A3,A4)");

            FSharpTransformationRule S1 = new FSharpTransformationRule();

            S1.from = S1.ParseToTree("SUM({i,j}, {i,j+1})");
            S1.to   = S1.ParseToTree("SUM({i,j}:{i,j+1})");

            Assert.AreEqual(false, S1.CanBeAppliedonBool(Original));
        }
        public void Merge_Three_Ranges()
        {
            FSharpTransformationRule R = new FSharpTransformationRule();

            R.from = R.ParseToTree("SUM({i,j}: {i,j+1}, {i,j+2})");
            R.to   = R.ParseToTree("SUM({i,j}:{i,j+2})");

            Assert.AreEqual(true, R.CanBeAppliedonBool("SUM(A1:A2,A3)"));

            Assert.AreEqual("SUM(A1:A3)", R.ApplyOn("SUM(A1:A2,A3)"));
        }
        public void Dynamic_Range_Transform_on_Argument_list()
        {
            FSharpTransformationRule T = new FSharpTransformationRule();

            T.from = T.ParseToTree("SUM([c])");
            T.to   = T.ParseToTree("SUM([c])+1");

            Assert.AreEqual(true, T.CanBeAppliedonBool("SUM(A1,B1)"));

            Assert.AreEqual("SUM(A1,B1)+1", T.ApplyOn("SUM(A1,B1)"));
        }
        public void Can_not_Apply_Dynamic_Cell_Reference_Multiple_Places()
        {
            var Original = ExcelFormulaParser.Parse("A1+A2");

            FSharpTransformationRule T = new FSharpTransformationRule();

            T.from = T.ParseToTree("{i,j}+{i+1,j}");
            T.to   = null;

            Assert.IsFalse(T.CanBeAppliedonBool(Original));
        }
        public void Can_Apply_In_SubFormulas()
        {
            var Original = ExcelFormulaParser.Parse("SUM(A1+A2)");

            FSharpTransformationRule T = new FSharpTransformationRule();

            T.from = (ExcelFormulaParser.Parse("SUM(A1+A2)"));
            T.to   = (ExcelFormulaParser.Parse("A1+A2"));

            Assert.IsTrue(T.CanBeAppliedonBool(Original));

            var map = (T.CanBeAppliedonMap(Original));
        }
        public void Transform_in_Arguments()
        {
            var Original = ExcelFormulaParser.Parse("(A1+A2)/3");

            FSharpTransformationRule T = new FSharpTransformationRule();

            T.from = (ExcelFormulaParser.Parse("A1+A2"));
            T.to   = (ExcelFormulaParser.Parse("SUM(A1:A2)"));

            bool x = T.CanBeAppliedonBool(Original);

            FSharpTransform.Formula Result = T.ApplyOn(Original);

            Assert.AreEqual("(SUM(A1:A2))/3", T.Print(Result));
        }
        public void Merge_Ranges()
        {
            var Original = ExcelFormulaParser.Parse("SUM(A1,A2)");

            FSharpTransformationRule T = new FSharpTransformationRule();

            T.from = T.ParseToTree("SUM({i,j}, {i,j+1})");

            T.to = T.ParseToTree("SUM({i,j}:{i,j+1})"); //hier heb je een gewone range met dt=ynamische cellen


            Assert.IsTrue(T.CanBeAppliedonBool(Original));
            FSharpTransform.Formula Result = T.ApplyOn(Original);

            Assert.AreEqual("SUM(A1:A2)", T.Print(Result));
        }
        public void Can_Apply_Dynamic_Cell_Reference()
        {
            var Original = ExcelFormulaParser.Parse("A1");

            FSharpTransformationRule T = new FSharpTransformationRule();

            T.from = T.ParseToTree("{i,j}");

            var Result = T.CanBeAppliedonBool(Original);

            Assert.IsTrue(Result);

            var Map = T.CanBeAppliedonMap(Original);

            Assert.IsTrue(Map.ContainsKey('i'));
            Assert.IsTrue(Map.ContainsKey('j'));

            Assert.AreEqual(2, Map.Count);
        }
        public void Can_Apply_Dynamic_Range_On_Cell_Reference()
        {
            var Original = ExcelFormulaParser.Parse("SUM(A1)");

            FSharpTransformationRule T = new FSharpTransformationRule();

            T.from = T.ParseToTree("SUM({r})");
            T.to   = null;

            Assert.IsTrue(T.CanBeAppliedonBool(Original));
            var Map = T.CanBeAppliedonMap(Original);

            Assert.IsTrue(Map.ContainsKey('r'));

            var ValueList = Map.TryFind('r').Value;
            var IntList   = (FSharpTransform.mapElement.Ints)ValueList;

            Assert.IsTrue(IntList.Item.Contains(0));
            Assert.AreEqual(2, IntList.Item.Count());
        }
        public void Can_Apply_Double_Dynamic_Reference()
        {
            var Original = ExcelFormulaParser.Parse("SUM(A2:B5)+C5");

            FSharpTransformationRule T = new FSharpTransformationRule();

            T.from = T.ParseToTree("SUM({r})+{i,j}");
            T.to   = null;

            Assert.IsTrue(T.CanBeAppliedonBool(Original));

            var Map = T.CanBeAppliedonMap(Original);

            Assert.IsTrue(Map.ContainsKey('r'));

            var ValueList = Map.TryFind('r').Value;
            var IntList   = (FSharpTransform.mapElement.Ints)ValueList;


            Assert.IsTrue(IntList.Item.Contains(0));
            Assert.IsTrue(IntList.Item.Contains(1));
            Assert.IsTrue(IntList.Item.Contains(4));

            Assert.IsTrue(Map.ContainsKey('i'));

            var ValueListi = Map.TryFind('i').Value;
            var IntListi   = (FSharpTransform.mapElement.Ints)ValueListi;

            Assert.IsTrue(IntListi.Item.Contains(2));

            Assert.IsTrue(Map.ContainsKey('j'));
            var ValueListj = Map.TryFind('j').Value;
            var IntListj   = (FSharpTransform.mapElement.Ints)ValueListj;

            Assert.IsTrue(IntListj.Item.Contains(4));
        }