public void RequestsIteratorIsFifo()
        {
            IRequestQueue queue = new MemoryRequestQueue();

            Assert.AreEqual(0, queue.GetCount());

            Request request1 = CreateRequest();
            Request request2 = CreateRequest();
            Request request3 = CreateRequest();
            Request request4 = CreateRequest();

            queue.Enqueue(request1);
            queue.Enqueue(request2);
            queue.Enqueue(request3);
            queue.Enqueue(request4);

            Assert.AreEqual(4, queue.GetCount());

            List <Request> list = new List <Request>();

            foreach (Request req in queue.GetRequests())
            {
                list.Add(req);
                queue.Remove(req);
            }

            Assert.AreEqual(4, list.Count);
            Assert.IsTrue(AreEqual(request1, list[0]));
            Assert.IsTrue(AreEqual(request2, list[1]));
            Assert.IsTrue(AreEqual(request3, list[2]));
            Assert.IsTrue(AreEqual(request4, list[3]));
            Assert.AreEqual(0, queue.GetCount());
        }
        public void CanGetRequestByRequestId()
        {
            IRequestQueue queue = new MemoryRequestQueue();

            Assert.AreEqual(0, queue.GetCount());

            Request request1 = CreateRequest();

            request1.Behavior.Tag = "A";

            Request request2 = CreateRequest();

            request2.Behavior.Tag = "B";

            Request request3 = CreateRequest();

            request3.Behavior.Tag = "A";

            queue.Enqueue(request1);
            queue.Enqueue(request2);
            queue.Enqueue(request3);

            Assert.AreEqual(3, queue.GetCount());

            Request req = queue.GetRequest(request2.RequestId);

            queue.Remove(req);

            Assert.IsNotNull(req);
            Assert.IsTrue(AreEqual(request2, req));
            Assert.AreEqual(2, queue.GetCount());
        }
        public void RemovingARequestsDecreasesCount()
        {
            IRequestQueue queue   = new MemoryRequestQueue();
            Request       request = CreateRequest();

            Assert.AreEqual(0, queue.GetCount());
            queue.Enqueue(request);
            Assert.AreEqual(1, queue.GetCount());

            queue.Remove(request);
            Assert.AreEqual(0, queue.GetCount());
        }
        public void RequestsByPriceAreFifo()
        {
            IRequestQueue queue = new MemoryRequestQueue();

            Assert.AreEqual(0, queue.GetCount());

            Request request1 = CreateRequest();

            request1.Behavior.Stamps = 7;
            Request request2 = CreateRequest();

            request2.Behavior.Stamps = 6;
            Request request3 = CreateRequest();

            request3.Behavior.Stamps = 1;
            Request request4 = CreateRequest();

            request4.Behavior.Stamps = 5;

            queue.Enqueue(request1);
            queue.Enqueue(request2);
            queue.Enqueue(request3);
            queue.Enqueue(request4);

            Assert.AreEqual(4, queue.GetCount());

            List <Request> list = new List <Request>();

            foreach (Request req in queue.GetRequests(5))
            {
                list.Add(req);
                queue.Remove(req);
            }

            Assert.AreEqual(3, list.Count);
            Assert.IsTrue(AreEqual(request1, list[0]));
            Assert.IsTrue(AreEqual(request2, list[1]));
            Assert.IsTrue(AreEqual(request4, list[2]));
            Assert.AreEqual(1, queue.GetCount());
        }
        public void CanGetRequestsIteratorByPrice()
        {
            IRequestQueue queue = new MemoryRequestQueue();

            Assert.AreEqual(0, queue.GetCount());

            Request request1 = CreateRequest();

            request1.Behavior.Stamps = 8;

            Request request2 = CreateRequest();

            request2.Behavior.Stamps = 3;

            Request request3 = CreateRequest();

            request3.Behavior.Stamps = 5;

            queue.Enqueue(request1);
            queue.Enqueue(request2);
            queue.Enqueue(request3);

            Assert.AreEqual(3, queue.GetCount());

            List <Request> list = new List <Request>();

            foreach (Request req in queue.GetRequests(5))
            {
                list.Add(req);
                queue.Remove(req);
            }

            Assert.AreEqual(2, list.Count);
            Assert.IsTrue(AreEqual(request1, list[0]));
            Assert.IsTrue(AreEqual(request3, list[1]));
            Assert.AreEqual(1, queue.GetCount());
        }