public void SellOrder_ExistingOrdersByTimeRank_OldestOrderProcessed()
        {
            var currentMatcher = new OrderMatcher();
            var currentOrder1  = new Order(1001, 45, 55, OrderType.Buy, 13);
            var currentOrder2  = new Order(1002, 46, 56, OrderType.Buy, 14);
            var currentOrder3  = new Order(1003, 46, 56, OrderType.Buy, 4);
            var currentOrder4  = new Order(1004, 46, 56, OrderType.Buy, 1);
            var currentOrder5  = new Order(1005, 46, 56, OrderType.Sell, 15);

            currentMatcher.ExistingOrders.Add(currentOrder1);
            currentMatcher.ExistingOrders.Add(currentOrder2);
            currentMatcher.ExistingOrders.Add(currentOrder3);
            currentMatcher.ExistingOrders.Add(currentOrder4);
            var oppositeOrders = new List <Order>()
            {
                currentOrder4, currentOrder3, currentOrder1, currentOrder2
            };

            currentMatcher.SellTrade(currentOrder5, oppositeOrders);
            var orders = new List <Order>()
            {
                currentOrder1, currentOrder2, currentOrder3
            };

            Assert.Equal <List <Order> >(orders, currentMatcher.ExistingOrders);
        }
        public void AddSellOrder_PerfectMatch_ExistingOrdersEmpty()
        {
            var currentMatcher = new OrderMatcher();
            var currentOrder1  = new Order(1001, 45, 55, OrderType.Buy, 14);
            var currentOrder2  = new Order(1002, 45, 55, OrderType.Sell, 15);

            currentMatcher.ExistingOrders.Add(currentOrder1);
            var oppositeOrders = new List <Order>()
            {
                currentOrder1
            };

            currentMatcher.SellTrade(currentOrder2, oppositeOrders);
            Assert.Empty(currentMatcher.ExistingOrders);
        }
        public void AddSellOrder_SellLess_PartialMatch()
        {
            var currentMatcher = new OrderMatcher();
            var currentOrder1  = new Order(1001, 55, 55, OrderType.Buy, 13);
            var currentOrder2  = new Order(1002, 45, 55, OrderType.Sell, 14);

            currentMatcher.ExistingOrders.Add(currentOrder1);
            var oppositeOrders = new List <Order>()
            {
                currentOrder1
            };

            currentMatcher.SellTrade(currentOrder2, oppositeOrders);
            var currentOrder4 = new Order(1001, 10, 55, OrderType.Buy, 13);

            var orders = new List <Order>()
            {
                currentOrder4
            };

            Assert.Equal(orders, currentMatcher.ExistingOrders);
        }