public void DivideOperationNodeTest(int left, int right)
        {
            var leftNode = new ConstNode(left);
            var rightNode = new ConstNode(right);
            var node = new OperationNode(leftNode, rightNode, (a, b) => a / b);

            var calculatedValue = node.CalculateValue();

            calculatedValue.Should().Be((double)left / right);
        }
        public void AddOperationNodeTest(int left, int right)
        {
            var leftNode = new ConstNode(left);
            var rightNode = new ConstNode(right);
            var node = new OperationNode(leftNode, rightNode, (a, b) => a + b);

            var calculatedValue = node.CalculateValue();

            calculatedValue.Should().Be(left + right);
        }
        public void LeftNestedExpressionTest(int a, int b, int c)
        {
            var aNode = new ConstNode(a);
            var bNode = new ConstNode(b);
            var cNode = new ConstNode(c);

            var leftNode = new OperationNode(aNode, bNode, (x, y) => x + y);
            var node = new OperationNode(leftNode, cNode, (x, y) => x*y);

            var calculatedValue = node.CalculateValue();

            calculatedValue.Should().Be((a + b)*c);
        }
        public void RightLeftNestedExpressionTest(int a, int b, int c, int d)
        {
            var aNode = new ConstNode(a);
            var bNode = new ConstNode(b);
            var cNode = new ConstNode(c);
            var dNode = new ConstNode(d);

            var leftNode = new OperationNode(aNode, bNode, (x, y) => x + y);
            var rightNode = new OperationNode(cNode, dNode, (x, y) => x - y);
            var node = new OperationNode(leftNode, rightNode, (x, y) => x * y);

            var calculatedValue = node.CalculateValue();

            calculatedValue.Should().Be((a + b) * (c - d));
        }