public void AddBuyOrder_BuyLess_PartialMatch_NewTrade()
        {
            var currentMatcher = new OrderMatcher();
            var currentOrder1  = new Order(1001, 65, 55, OrderType.Sell, 14);
            var currentOrder2  = new Order(1002, 55, 55, OrderType.Buy, 15);

            currentMatcher.ProcessOrder(currentOrder1);
            currentMatcher.ProcessOrder(currentOrder2);
            var returnedTrade = currentMatcher.CurrentTrade;
            var currentTrade  = new Trade(currentOrder2.AccountNumber, 55, currentOrder2.Price, currentOrder2.Action);

            Assert.Equal(currentTrade, returnedTrade);
        }
        public void AddBuyOrder_OneExistingOrder_MatcherWithTwoOrders()
        {
            var currentMatcher = new OrderMatcher();
            var currentOrder1  = new Order(1001, 45, 55, OrderType.Buy, 14);
            var currentOrder2  = new Order(1002, 46, 56, OrderType.Buy, 15);

            currentMatcher.ProcessOrder(currentOrder1);
            currentMatcher.ProcessOrder(currentOrder2);
            var orders = new List <Order>()
            {
                currentOrder1, currentOrder2
            };

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

            currentMatcher.ProcessOrder(currentOrder1);
            currentMatcher.ProcessOrder(currentOrder2);

            var trades = new List <Trade> {
                currentMatcher.CurrentTrade
            };

            Assert.Equal(trades, currentMatcher.ExistingTrades);
        }
        public void AddBuyOrder_EmptyMatcher_OneOrderAdded()
        {
            var currentOrder   = new Order(1001, 45, 55, OrderType.Buy, 13);
            var currentMatcher = new OrderMatcher();

            currentMatcher.ProcessOrder(currentOrder);
            Assert.Same(currentOrder, currentMatcher.ExistingOrders[0]);
        }
        public void AddBuyOrder_EmptyMatcher_NullTrade()
        {
            var currentOrder   = new Order(1001, 45, 55, OrderType.Buy, 13);
            var currentMatcher = new OrderMatcher();

            currentMatcher.ProcessOrder(currentOrder);
            var currentTrade = currentMatcher.CurrentTrade;

            Assert.Null(currentTrade);
        }
        public void TwoExistingTrades()
        {
            var currentMatcher = new OrderMatcher();
            var currentOrder1  = new Order(1001, 65, 55, OrderType.Sell, 14);
            var currentOrder2  = new Order(1002, 65, 55, OrderType.Buy, 15);

            currentMatcher.ProcessOrder(currentOrder1);
            currentMatcher.ProcessOrder(currentOrder2);

            var currentOrder3 = new Order(1001, 75, 55, OrderType.Sell, 16);
            var currentOrder4 = new Order(1002, 75, 55, OrderType.Buy, 17);

            currentMatcher.ProcessOrder(currentOrder3);
            currentMatcher.ProcessOrder(currentOrder4);

            var currentTrade1 = new Trade(currentOrder2.AccountNumber, 65, currentOrder2.Price, currentOrder2.Action);
            var currentTrade2 = new Trade(currentOrder4.AccountNumber, 75, currentOrder4.Price, currentOrder4.Action);
            var trades        = new List <Trade>()
            {
                currentTrade1, currentTrade2
            };

            Assert.Equal(trades, currentMatcher.ExistingTrades);
        }