public void IncrementValueAndReturn()
        {
            AtomicInteger ai = new AtomicInteger(1);

            Assert.AreEqual(2, ai.IncrementValueAndReturn());
            Assert.AreEqual(2, ai.Value);
            ai.Value = -2;
            Assert.AreEqual(-1, ai.IncrementValueAndReturn());
            Assert.AreEqual(0, ai.IncrementValueAndReturn());
            Assert.AreEqual(1, ai.IncrementValueAndReturn());
            Assert.AreEqual(1, ai.Value);
        }
        public void TestWithListener()
        {
            var mocker = new AutoMoqer();

            var mockConnectionFactory = mocker.GetMock<RabbitMQ.Client.ConnectionFactory>();
            var mockConnection = mocker.GetMock<RabbitMQ.Client.IConnection>();

            mockConnectionFactory.Setup(c => c.CreateConnection()).Returns(mockConnection.Object);

            var called = new AtomicInteger(0);
            var connectionFactory = new CachingConnectionFactory(mockConnectionFactory.Object);

            var mockConnectionListener = new Mock<IConnectionListener>();
            mockConnectionListener.Setup(m => m.OnCreate(It.IsAny<IConnection>())).Callback((IConnection conn) => called.IncrementValueAndReturn());
            mockConnectionListener.Setup(m => m.OnClose(It.IsAny<IConnection>())).Callback((IConnection conn) => called.DecrementValueAndReturn());

            connectionFactory.ConnectionListeners = new List<IConnectionListener>() { mockConnectionListener.Object };

            var con = connectionFactory.CreateConnection();
            Assert.AreEqual(1, called.Value);

            con.Close();
            Assert.AreEqual(1, called.Value);
            mockConnection.Verify(c => c.Close(), Times.Never());

            connectionFactory.CreateConnection();
            Assert.AreEqual(1, called.Value);

            connectionFactory.Dispose();
            Assert.AreEqual(0, called.Value);
            mockConnection.Verify(c => c.Close(), Times.AtLeastOnce());

            mockConnectionFactory.Verify(c => c.CreateConnection(), Times.Exactly(1));
        }
        public void ShutdownNowReturnsTasksThatWereNotRun()
        {
            var nRun = new AtomicInteger(0);
            var action = ThreadManager.GetManagedAction(
                () =>
                {
                    nRun.IncrementValueAndReturn();
                    try { Thread.Sleep(Delays.Medium); }
                    catch (ThreadInterruptedException) { }
                });
            var es = ExecutorService;
            int submitCount = 0;

            try
            {
                for (int i = 0; i < 100; i++)
                {
                    es.Execute(action);
                    submitCount++;
                }
            }
            catch (RejectedExecutionException) { }

            IList<IRunnable> l = es.ShutdownNow();
            Assert.IsTrue(es.IsShutdown);
            Assert.IsNotNull(l);
            Assert.That(l.Count, Is.LessThanOrEqualTo(submitCount-nRun.Value));
            ThreadManager.JoinAndVerify(Delays.Long);
        }
 public void IncrementValueAndReturn()
 {
     AtomicInteger ai = new AtomicInteger(1);
     Assert.AreEqual(2, ai.IncrementValueAndReturn());
     Assert.AreEqual(2, ai.Value);
     ai.Value = -2;
     Assert.AreEqual(-1, ai.IncrementValueAndReturn());
     Assert.AreEqual(0, ai.IncrementValueAndReturn());
     Assert.AreEqual(1, ai.IncrementValueAndReturn());
     Assert.AreEqual(1, ai.Value);
 }