public void Async()
        {
            var pp = new PublishProcessor <int>();

            pp.Start();

            Task.Factory.StartNew(() =>
            {
                while (!pp.HasSubscribers)
                {
                    Thread.Sleep(10);
                }
                for (int i = 0; i < 5; i++)
                {
                    while (!pp.Offer(i))
                    {
                        ;
                    }
                }
                pp.OnComplete();
            }, TaskCreationOptions.LongRunning);

            pp.Test().AwaitDone(TimeSpan.FromSeconds(5))
            .AssertResult(0, 1, 2, 3, 4);
        }
        public void Normal()
        {
            var dp = new PublishProcessor <int>();

            dp.Start();
            Assert.IsFalse(dp.HasSubscribers);

            var ts = dp.Test();

            Assert.IsTrue(dp.HasSubscribers);

            dp.OnNext(1);
            dp.OnNext(2);
            dp.OnNext(3);
            dp.OnNext(4);

            ts.AssertValues(1, 2, 3, 4);

            dp.OnComplete();

            ts.AssertResult(1, 2, 3, 4);
        }
        public override IPublisher <int> CreatePublisher(long elements)
        {
            var pp = new PublishProcessor <int>();

            pp.Start();

            Task.Factory.StartNew(() => {
                while (!pp.HasSubscribers)
                {
                    Thread.Sleep(10);
                }
                for (int i = 0; i < elements; i++)
                {
                    while (!pp.Offer(i))
                    {
                        ;
                    }
                }
                pp.OnComplete();
            }, TaskCreationOptions.LongRunning);

            return(pp);
        }