public void WontRemoveEnumeratorsReturningTrueWithCurrentNull()
        {
            var time    = new DateTime(2016, 03, 03, 12, 05, 00);
            var stream1 = Enumerable.Range(0, 20)
                          // return null except the last value and check if its emitted
                          .Select(x => x == 19 ? new Tick {
                Time = time.AddSeconds(x * 100), Quantity = 998877
            } : null
                                  ).GetEnumerator();
            var stream2 = Enumerable.Range(0, 5).Select(x => new Tick {
                Time = time.AddSeconds(x * 2)
            }).GetEnumerator();
            var stream3 = Enumerable.Range(0, 20).Select(x => new Tick {
                Time = time.AddSeconds(x * 0.5)
            }).GetEnumerator();

            var previous = new Tick {
                Time = DateTime.MinValue
            };
            var synchronizer = new SynchronizingBaseDataEnumerator(stream1, stream2, stream3);

            while (synchronizer.MoveNext())
            {
                Assert.That(synchronizer.Current.EndTime, Is.GreaterThanOrEqualTo(previous.EndTime));
                previous = synchronizer.Current as Tick;
            }
            Assert.AreEqual(998877, previous.Quantity);

            synchronizer.Dispose();
        }
        public void WillStopIfAllEnumeratorsCurrentIsNullAndReturningFalse()
        {
            var stream1 = new TestEnumerator {
                MoveNextReturnValue = false
            };
            var synchronizer = new SynchronizingBaseDataEnumerator(stream1);

            while (synchronizer.MoveNext())
            {
                Assert.Fail();
            }
            Assert.IsTrue(stream1.MoveNextWasCalled);
            Assert.Pass();

            synchronizer.Dispose();
        }
        public void WillRemoveEnumeratorsReturningFalse()
        {
            var time    = new DateTime(2016, 03, 03, 12, 05, 00);
            var stream1 = new TestEnumerator {
                MoveNextReturnValue = false
            };
            var stream2 = Enumerable.Range(0, 10).Select(x => new Tick {
                Time = time.AddSeconds(x * 2)
            }).GetEnumerator();
            var synchronizer = new SynchronizingBaseDataEnumerator(stream1, stream2);
            var emitted      = false;

            while (synchronizer.MoveNext())
            {
                emitted = true;
            }
            Assert.IsTrue(emitted);
            Assert.IsTrue(stream1.MoveNextWasCalled);
            Assert.AreEqual(1, stream1.MoveNextCallCount);

            synchronizer.Dispose();
        }
        public void SynchronizesData()
        {
            var time    = new DateTime(2016, 03, 03, 12, 05, 00);
            var stream1 = Enumerable.Range(0, 10).Select(x => new Tick {
                Time = time.AddSeconds(x * 1)
            }).GetEnumerator();
            var stream2 = Enumerable.Range(0, 5).Select(x => new Tick {
                Time = time.AddSeconds(x * 2)
            }).GetEnumerator();
            var stream3 = Enumerable.Range(0, 20).Select(x => new Tick {
                Time = time.AddSeconds(x * 0.5)
            }).GetEnumerator();

            var previous     = DateTime.MinValue;
            var synchronizer = new SynchronizingBaseDataEnumerator(stream1, stream2, stream3);

            while (synchronizer.MoveNext())
            {
                Assert.That(synchronizer.Current.EndTime, Is.GreaterThanOrEqualTo(previous));
                previous = synchronizer.Current.EndTime;
            }

            synchronizer.Dispose();
        }