public void TestEnumeratorFetchesCorrectBatchItemsInReverseOrder() { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), q => q, qq => qq.OrderByDescending(q => q), null, 5 ); Assert.AreEqual(0, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(new[] { 21, 20, 19, 18, 17 }, en.Current); Assert.AreEqual(1, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(new[] { 16, 15, 14, 13, 12 }, en.Current); Assert.AreEqual(2, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(new[] { 11, 10, 9, 8, 7 }, en.Current); Assert.AreEqual(3, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(new[] { 6, 5, 4, 3, 2 }, en.Current); Assert.AreEqual(4, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(new[] { 1 }, en.Current); Assert.AreEqual(5, en.BatchNumber); Assert.False(en.MoveNext()); }
public static void EnumerateBatches <T>(this IEnumerable <T> enumerable, int batchSize, Action <IEnumerator <T> > batchAction) { if (enumerable is null) { throw new ArgumentNullException(nameof(enumerable)); } if (batchSize <= 0) { throw new ArgumentException("Batch size should be greater zero.", nameof(batchSize)); } if (batchAction is null) { throw new ArgumentNullException(nameof(batchAction)); } using (var enumerator = enumerable.GetEnumerator()) { while (enumerator.MoveNext()) { using (var batchEnumerator = new BatchEnumerator <T>(enumerator, batchSize)) { batchAction(batchEnumerator); } } } }
public void TestEnumeratorFetchesCorrectBatchItems() { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), q => q, null, null, 5 ); Assert.AreEqual(0, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(new[] { 1, 2, 3, 4, 5 }, en.Current); Assert.AreEqual(1, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(new[] { 6, 7, 8, 9, 10 }, en.Current); Assert.AreEqual(2, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(new[] { 11, 12, 13, 14, 15 }, en.Current); Assert.AreEqual(3, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(new[] { 16, 17, 18, 19, 20 }, en.Current); Assert.AreEqual(4, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(new[] { 21 }, en.Current); Assert.AreEqual(5, en.BatchNumber); Assert.False(en.MoveNext()); }
public void TestEnumeratorThrowsExceptionWithNullResponseArgument() { Assert.Throws <ArgumentNullException>(() => { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), null, null, null ); }); }
public void TestBatchSizeWithoutInitializationHasValueGreaterThan0() { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), q => q, null, null ); Assert.AreEqual(10, en.BatchSize); }
public void TestEnumeratorThrowsExceptionWithNullItems() { Assert.Throws <ArgumentNullException>(() => { var en = new BatchEnumerator <int, int>( null, q => q, null, null, 5 ); }); }
public void TestBatchSizeWithInitializationHasCorrectValue() { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), q => q, null, null, 5 ); Assert.AreEqual(5, en.BatchSize); }
public void TestSetPaddingWithNoIteration() { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), q => q, null, null, 5 ); en.Padding = 6; Assert.AreEqual(6, en.Padding); }
public void TestSetPaddingInsideIterationThrowsException() { Assert.Throws <ArgumentException>(() => { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), q => q, null, null, 5 ); en.MoveNext(); en.Padding = 6; }); }
public void TestEnumeratorFiltersEnumeration() { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), q => q, null, q => q < 4, 5 ); Assert.AreEqual(0, en.BatchNumber); Assert.True(en.MoveNext()); Assert.AreEqual(3, en.Current.Count()); Assert.AreEqual(new[] { 1, 2, 3 }, en.Current); Assert.False(en.MoveNext()); }
public void TestResetResetsPage() { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), q => q, null, null, 5 ); Assert.True(en.MoveNext()); Assert.True(en.MoveNext()); Assert.AreEqual(2, en.BatchNumber); en.Reset(); Assert.AreEqual(0, en.BatchNumber); }
public void TestBaseEnumeratorCurrentProperty() { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), q => q, null, null, 5 ); var baseEnumerator = (IEnumerator)en; baseEnumerator.MoveNext(); Assert.IsInstanceOf <IEnumerable <int> >(baseEnumerator.Current); var value = (IEnumerable <int>)baseEnumerator.Current; Assert.AreEqual(5, value.Count()); }
public void TestDispose(string propertyName) { var en = new BatchEnumerator <int, int>( Items.AsQueryable(), q => q, qq => qq.OrderBy(q => q), null, 5 ); en.Dispose(); var property = en.GetType().GetField( propertyName, BindingFlags.NonPublic | BindingFlags.Instance ); var propertyValue = property.GetValue(en); Assert.AreEqual(null, propertyValue); }