public void LimitOrderShouldCaptureExec()
        {
            var market = new Market { SellPrice = 100M, SellQuantity = 50 };
            var executed = false;
            var order = market.CreateLimitOrder(Way.Buy, price: 100M, quantity: 10, allowPartialExecution: false);

            market.OrderExecuted += (s, a) => executed = true;
            market.Send(order);

            Check.That(executed).IsTrue();
            Check.That(market.SellQuantity).IsEqualTo(40);
        }
        public void LimitOrderShouldFailIfPriceTooHigh()
        {
            var market = new Market { SellPrice = 100M, SellQuantity = 50 };
            var executed = false;
            bool failed = false;
            string failureReason = null;
            var order = market.CreateLimitOrder(Way.Buy, price: 101M, quantity: 10, allowPartialExecution: false);

            market.OrderExecuted += (s, a) => executed = true;
            market.OrderFailed += (s, failure) =>
                                  {
                                      failed = true;
                                      failureReason = failure;
                                  };
            market.Send(order);

            Check.That(executed).IsFalse();
            Check.That(failed).IsTrue();
            Check.That(failureReason).IsEqualTo("Invalid price");
            Check.That(market.SellQuantity).IsEqualTo(50);
        }
        public void LimitOrderShouldSupportPartialExecution()
        {
            var market = new Market { SellPrice = 100M, SellQuantity = 50 };
            var executed = false;
            var order = market.CreateLimitOrder(Way.Buy, price: 100M, quantity: 110, allowPartialExecution: true);

            var execQuantity = 0;
            market.OrderExecuted += (s, a) =>
            {
                executed = true;
                execQuantity = a.Quantity;
            };
            market.Send(order);

            Check.That(execQuantity).IsEqualTo(50);
            Check.That(executed).IsTrue();
            Check.That(market.SellQuantity).IsEqualTo(0);
        }