public void Enumerable_Limit_Max_Concurrency()
        {
            var ms1 = new SingleSubject <int>();
            var ms2 = new SingleSubject <int>();

            var to = SingleSource.ConcatEager(
                new List <ISingleSource <int> >()
            {
                ms1, ms2
            }
                , maxConcurrency: 1
                )
                     .Test();

            Assert.True(ms1.HasObserver());
            Assert.False(ms2.HasObserver());

            ms1.OnSuccess(1);

            Assert.False(ms1.HasObserver());
            Assert.True(ms2.HasObserver());

            ms2.OnSuccess(2);

            to.AssertResult(1, 2);
        }
 public void Limit_GetEnumerator_Crash()
 {
     for (int i = 1; i < 10; i++)
     {
         SingleSource.ConcatEager(new FailingEnumerable <ISingleSource <int> >(true, false, false), maxConcurrency: i)
         .Test()
         .AssertFailure(typeof(InvalidOperationException));
     }
 }
 public void Limit_MoveNext_Crash_DelayErrors()
 {
     for (int i = 1; i < 10; i++)
     {
         SingleSource.ConcatEager(new FailingEnumerable <ISingleSource <int> >(false, true, false), true, i)
         .Test()
         .AssertFailure(typeof(InvalidOperationException));
     }
 }
 public void Limit_Empty()
 {
     for (int i = 1; i < 10; i++)
     {
         SingleSource.ConcatEager <int>(maxConcurrency: i)
         .Test()
         .WithTag($"{i}")
         .AssertResult();
     }
 }
 public void Array_Limit_Basic_Delay()
 {
     for (int i = 1; i < 10; i++)
     {
         SingleSource.ConcatEager <int>(true, i,
                                        SingleSource.Just(1),
                                        SingleSource.Just(2),
                                        SingleSource.Just(3)
                                        )
         .Test()
         .WithTag($"{i}")
         .AssertResult(1, 2, 3);
     }
 }
        public void Array_Max_Dispose()
        {
            var ms1 = new SingleSubject <int>();
            var ms2 = new SingleSubject <int>();

            var to = SingleSource.ConcatEager(ms1, ms2)
                     .Test();

            Assert.True(ms1.HasObserver());
            Assert.True(ms2.HasObserver());

            to.Dispose();

            Assert.False(ms1.HasObserver());
            Assert.False(ms2.HasObserver());
        }
        public void Array_Max_Error_Delay()
        {
            var count = 0;

            var src = SingleSource.FromFunc(() => ++ count);

            SingleSource.ConcatEager(true,
                                     SingleSource.Just(0),
                                     SingleSource.Error <int>(new InvalidOperationException()),
                                     src
                                     )
            .Test()
            .AssertFailure(typeof(InvalidOperationException), 0, 1);

            Assert.AreEqual(1, count);
        }
 public void Limit_Basic_Delay()
 {
     for (int i = 1; i < 10; i++)
     {
         SingleSource.ConcatEager <int>(
             new [] {
             SingleSource.Just(1),
             SingleSource.Just(2),
             SingleSource.Just(3)
         }.ToObservable()
             , true, i)
         .Test()
         .WithTag($"{i}")
         .AssertResult(1, 2, 3);
     }
 }
 public void Enumerable_Limit_Basic_Delay()
 {
     for (int i = 1; i < 10; i++)
     {
         SingleSource.ConcatEager <int>(
             new List <ISingleSource <int> >()
         {
             SingleSource.Just(1),
             SingleSource.Just(2),
             SingleSource.Just(3)
         }
             , true, i)
         .Test()
         .WithTag($"{i}")
         .AssertResult(1, 2, 3);
     }
 }
        public void Array_Max_Error_Dispose_Second()
        {
            var ms1 = new SingleSubject <int>();
            var ms2 = new SingleSubject <int>();

            var to = SingleSource.ConcatEager(ms1, ms2)
                     .Test();

            Assert.True(ms1.HasObserver());
            Assert.True(ms2.HasObserver());

            ms2.OnError(new InvalidOperationException());

            Assert.False(ms1.HasObserver());
            Assert.False(ms2.HasObserver());

            to.AssertFailure(typeof(InvalidOperationException));
        }
        public void Enumerable_Max_Dispose()
        {
            var ms1 = new SingleSubject <int>();
            var ms2 = new SingleSubject <int>();

            var to = SingleSource.ConcatEager(
                new List <ISingleSource <int> >()
            {
                ms1, ms2
            })
                     .Test();

            Assert.True(ms1.HasObserver());
            Assert.True(ms2.HasObserver());

            to.Dispose();

            Assert.False(ms1.HasObserver());
            Assert.False(ms2.HasObserver());
        }
        public void Limit_Error_Delay()
        {
            for (int i = 1; i < 10; i++)
            {
                var count = 0;

                var src = SingleSource.FromFunc(() => ++ count);

                SingleSource.ConcatEager(
                    new [] {
                    SingleSource.Just(0),
                    SingleSource.Error <int>(new InvalidOperationException()),
                    src
                }.ToObservable(), true, i
                    )
                .Test()
                .AssertFailure(typeof(InvalidOperationException), 0, 1);

                Assert.AreEqual(1, count);
            }
        }
        public void Array_Limit_Keep_Order()
        {
            var ms1 = new SingleSubject <int>();
            var ms2 = new SingleSubject <int>();

            var to = SingleSource.ConcatEager(2,
                                              ms1, ms2
                                              )
                     .Test();

            Assert.True(ms1.HasObserver());
            Assert.True(ms2.HasObserver());

            ms2.OnSuccess(2);

            to.AssertEmpty();

            ms1.OnSuccess(1);

            to.AssertResult(1, 2);
        }
        public void Array_Limit_Max_Concurrency()
        {
            var ms1 = new SingleSubject <int>();
            var ms2 = new SingleSubject <int>();

            var to = SingleSource.ConcatEager(1,
                                              ms1, ms2
                                              )
                     .Test();

            Assert.True(ms1.HasObserver());
            Assert.False(ms2.HasObserver());

            ms1.OnSuccess(1);

            Assert.False(ms1.HasObserver());
            Assert.True(ms2.HasObserver());

            ms2.OnSuccess(2);

            to.AssertResult(1, 2);
        }
        public void Limit_Keep_Order()
        {
            var ms1 = new SingleSubject <int>();
            var ms2 = new SingleSubject <int>();

            var to = SingleSource.ConcatEager(
                new [] {
                ms1, ms2
            }.ToObservable(), maxConcurrency: 2
                )
                     .Test();

            Assert.True(ms1.HasObserver());
            Assert.True(ms2.HasObserver());

            ms2.OnSuccess(2);

            to.AssertEmpty();

            ms1.OnSuccess(1);

            to.AssertResult(1, 2);
        }
        public void Enumerable_Max_Error_Dispose_First()
        {
            var ms1 = new SingleSubject <int>();
            var ms2 = new SingleSubject <int>();

            var to = SingleSource.ConcatEager(
                new List <ISingleSource <int> >()
            {
                ms1, ms2
            }
                )
                     .Test();

            Assert.True(ms1.HasObserver());
            Assert.True(ms2.HasObserver());

            ms1.OnError(new InvalidOperationException());

            Assert.False(ms1.HasObserver());
            Assert.False(ms2.HasObserver());

            to.AssertFailure(typeof(InvalidOperationException));
        }
        public void Enumerable_Max_Keep_Order()
        {
            var ms1 = new SingleSubject <int>();
            var ms2 = new SingleSubject <int>();

            var to = SingleSource.ConcatEager(
                new List <ISingleSource <int> >()
            {
                ms1, ms2
            }
                )
                     .Test();

            Assert.True(ms1.HasObserver());
            Assert.True(ms2.HasObserver());

            ms2.OnSuccess(2);

            to.AssertEmpty();

            ms1.OnSuccess(1);

            to.AssertResult(1, 2);
        }
 public void Enumerable_Max_MoveNext_Crash_DelayErrors()
 {
     SingleSource.ConcatEager(new FailingEnumerable <ISingleSource <int> >(false, true, false), true)
     .Test()
     .AssertFailure(typeof(InvalidOperationException));
 }
 public void Enumerable_Max_GetEnumerator_Crash()
 {
     SingleSource.ConcatEager(new FailingEnumerable <ISingleSource <int> >(true, false, false))
     .Test()
     .AssertFailure(typeof(InvalidOperationException));
 }