public void BuyOrder_ExistingOrdersByTimeRank_OldestOrderProcessed()
        {
            var currentMatcher = new OrderMatcher();
            var currentOrder1  = new Order(1001, 46, 56, OrderType.Sell, 13);
            var currentOrder2  = new Order(1002, 46, 56, OrderType.Sell, 14);
            var currentOrder3  = new Order(1003, 46, 56, OrderType.Sell, 4);
            var currentOrder4  = new Order(1004, 46, 56, OrderType.Sell, 1);
            var currentOrder5  = new Order(1005, 46, 56, OrderType.Buy, 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.BuyTrade(currentOrder5, oppositeOrders);
            var orders = new List <Order>()
            {
                currentOrder1, currentOrder2, currentOrder3
            };

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

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

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

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

            currentMatcher.BuyTrade(currentOrder2, oppositeOrders);
            var currentOrder4 = new Order(1002, 10, 55, OrderType.Buy, 14);

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

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