public void Setup()
 {
     calculator = new CalculatorV1();
 }
        public void FormulasWithSignals()
        {
            var calculator = new CalculatorV1();

            //-------------------------------------------
            var samplingRate = 10;

            WriteLine();
            WriteLine($"Formulas with signals: 3 signals (A, B, C), sampling rate = {samplingRate}");
            WriteLine();


            var signalsInputData = new[]
            {
                new DecodedScan(1, new[] { 1f, 10f, 100f }),
                new DecodedScan(1, new[] { 2f, 20f, 200f }),
                new DecodedScan(1, new[] { 3f, 30f, 300f }),
                new DecodedScan(1, new[] { 4f, 40f, 400f }),
                new DecodedScan(1, new[] { 5f, 50f, 500f }),
                new DecodedScan(1, new[] { 6f, 60f, 600f }),
                new DecodedScan(1, new[] { 7f, 70f, 700f })
            };


            WriteLineTitle(
                "----------------------------- input signals",
                "----------------------------------------------------------");
            WriteLineResult("FORMULA", "RESULT VALUES");
            WriteLine();

            Evaluate(calculator, "A(i)", samplingRate, signalsInputData);
            Evaluate(calculator, "B(i)", samplingRate, signalsInputData);
            Evaluate(calculator, "C(i)", samplingRate, signalsInputData);
            WriteLine();
            WriteLineTitle(
                "------------------------- simple operations",
                "----------------------------------------------------------");
            WriteLineResult("FORMULA", "RESULT VALUES");
            WriteLine();

            Evaluate(calculator, "C(i) + 7", samplingRate, signalsInputData);
            Evaluate(calculator, "SquareRoot(C(i))", samplingRate, signalsInputData);
            Evaluate(calculator, "B(i) + A(i)", samplingRate, signalsInputData);
            Evaluate(calculator, "B(i) - A(i)", samplingRate, signalsInputData);
            Evaluate(calculator, "B(i) * A(i)", samplingRate, signalsInputData);
            Evaluate(calculator, "B(i) / A(i)", samplingRate, signalsInputData);
            Evaluate(calculator, "B(i) / A(i) +1", samplingRate, signalsInputData);
            Evaluate(calculator, "B(i) / (A(i) +1)", samplingRate, signalsInputData);
            WriteLine();
            WriteLineTitle(
                "--------------------- integration operation",
                "-------------------------------------------------------");
            WriteLineResult("FORMULA", "RESULT VALUES");
            WriteLine();

            Evaluate(calculator, "C(i)", samplingRate, signalsInputData);
            Evaluate(calculator, "Integrate(C(i))", samplingRate, signalsInputData);
            Evaluate(calculator, "Integrate(C(i)*10)", samplingRate, signalsInputData);
            Evaluate(calculator, "111 - Integrate(C(i))", samplingRate, signalsInputData);
            WriteLine();

            WriteLineTitle(
                "-------------------differentiate operations",
                "-------------------------------------------------------");
            WriteLineResult("FORMULA", "RESULT VALUES");
            WriteLine();

            Evaluate(calculator, "C(i)", samplingRate, signalsInputData);
            Evaluate(calculator, "Differentiate(indexC, i)", samplingRate, signalsInputData);
            Evaluate(calculator, "111 - Differentiate(indexC, i)", samplingRate, signalsInputData);
        }