public void CanSubmitBuyMarketOrderSimple() { //ARRANGE ILimitOrderBook lob = new LimitOrderBook.StandardLimitOrderBook(); Assert.IsNotNull(lob); Assert.AreEqual(0, lob.Bids.Count); Assert.IsInstanceOfType(lob, typeof(ILimitOrderBook)); var setupOrder = new Order() { Price = 101, Quantity = 20, Side = OrderSide.Sell, Type = OrderType.LimitOrder, UserID = "Test" }; var result = lob.ProcessLimitOrder(setupOrder,true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); setupOrder = new Order() { Price = 101, Quantity = 10, Side = OrderSide.Sell, Type = OrderType.LimitOrder, UserID = "Test" }; result = lob.ProcessLimitOrder(setupOrder, true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); setupOrder = new Order() { Price = 103, Quantity = 30, Side = OrderSide.Sell, Type = OrderType.LimitOrder, UserID = "Test" }; result = lob.ProcessLimitOrder(setupOrder, true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); setupOrder = new Order() { Price = 104, Quantity = 15, Side = OrderSide.Sell, Type = OrderType.LimitOrder, UserID = "Test" }; result = lob.ProcessLimitOrder(setupOrder, true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); setupOrder = new Order() { Price = 104, Quantity = 5, Side = OrderSide.Sell, Type = OrderType.LimitOrder, UserID = "Test" }; result = lob.ProcessLimitOrder(setupOrder, true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); setupOrder = new Order() { Price = 105, Quantity = 50, Side = OrderSide.Sell, Type = OrderType.LimitOrder, UserID = "Test" }; result = lob.ProcessLimitOrder(setupOrder, true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); setupOrder = new Order() { Price = 94, Quantity = 30, Side = OrderSide.Buy, Type = OrderType.LimitOrder, UserID = "Test" }; result = lob.ProcessLimitOrder(setupOrder, true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); setupOrder = new Order() { Price = 96, Quantity = 50, Side = OrderSide.Buy, Type = OrderType.LimitOrder, UserID = "Test" }; result = lob.ProcessLimitOrder(setupOrder, true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); setupOrder = new Order() { Price = 97, Quantity = 40, Side = OrderSide.Buy, Type = OrderType.LimitOrder, UserID = "Test" }; result = lob.ProcessLimitOrder(setupOrder, true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); setupOrder = new Order() { Price = 97, Quantity = 10, Side = OrderSide.Buy, Type = OrderType.LimitOrder, UserID = "Test" }; result = lob.ProcessLimitOrder(setupOrder, true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); setupOrder = new Order() { Price = 97, Quantity = 10, Side = OrderSide.Buy, Type = OrderType.LimitOrder, UserID = "Test" }; result = lob.ProcessLimitOrder(setupOrder, true); Assert.AreEqual(1, result.Count()); Assert.AreEqual(true, result.First().Placed); //ACT var marketOrder = new Order() { Quantity = 15, Side = OrderSide.Buy, Type = OrderType.MarketOrder, UserID = "Test2" }; var testResult = lob.ProcessMarketOrder(marketOrder, true); Assert.AreEqual(1, result.Count()); //ASSERT Assert.AreEqual(2, lob.Asks[101].Count); Assert.AreEqual(5,lob.Asks[101].ElementAt(0).Quantity); Assert.AreEqual(10, lob.Asks[101].ElementAt(1).Quantity); Assert.AreEqual(1, lob.Asks[103].Count); Assert.AreEqual(30, lob.Asks[103].ElementAt(0).Quantity); Assert.AreEqual(2, lob.Asks[104].Count); Assert.AreEqual(15, lob.Asks[104].ElementAt(0).Quantity); Assert.AreEqual(5, lob.Asks[104].ElementAt(1).Quantity); Assert.AreEqual(1, lob.Asks[105].Count); Assert.AreEqual(50, lob.Asks[105].ElementAt(0).Quantity); Assert.AreEqual(3, lob.Bids[97].Count); Assert.AreEqual(40, lob.Bids[97].ElementAt(0).Quantity); Assert.AreEqual(10, lob.Bids[97].ElementAt(1).Quantity); Assert.AreEqual(10, lob.Bids[97].ElementAt(2).Quantity); Assert.AreEqual(1, lob.Bids[96].Count); Assert.AreEqual(50, lob.Bids[96].ElementAt(0).Quantity); Assert.AreEqual(1, lob.Bids[94].Count); Assert.AreEqual(30, lob.Bids[94].ElementAt(0).Quantity); }