Skip to content

Commit 1999a5d

Browse files
committed
Made batch extension much less fragile.
Simplified unit tests accordingly.
1 parent c9b8750 commit 1999a5d

3 files changed

Lines changed: 13 additions & 23 deletions

File tree

LinkMobility.PSWin.Client.Tests/EnumerableBatchExtensionTests.cs

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,9 @@ public void Test_no_multiple_enumeration()
2929
{
3030
var checker = new MultipleEnumerationChecker();
3131
var items = checker.GetItems(30);
32-
33-
var iteratedItems = 0;
34-
foreach (var batch in items.Batch(10))
35-
foreach (var item in batch)
36-
iteratedItems++;
3732

38-
Assume.That(iteratedItems, Is.GreaterThan(0));
33+
items.Batch(10).Count();
34+
3935
Assert.That(checker.Enumerations, Is.EqualTo(1), "Enumerations");
4036
}
4137

@@ -54,11 +50,9 @@ public void Test_zero_batches()
5450
public void Test_one_batch(int itemCount)
5551
{
5652
var items = Enumerable.Range(0, itemCount).ToArray();
57-
var batches = items.Batch(10);
58-
var enumerator = batches.GetEnumerator();
59-
Assert.That(enumerator.MoveNext(), Is.True, "At least one batch");
60-
Assert.That(enumerator.Current, Is.EqualTo(Enumerable.Range(0, itemCount)), "Batch content");
61-
Assert.That(enumerator.MoveNext(), Is.False, "No second batch");
53+
var batches = items.Batch(10).ToArray();
54+
Assert.That(batches.Length, Is.EqualTo(1), "Number of batches");
55+
Assert.That(batches[0], Is.EqualTo(Enumerable.Range(0, itemCount)), "Batch content");
6256
}
6357

6458
[Test]
@@ -68,13 +62,10 @@ public void Test_one_batch(int itemCount)
6862
public void Test_two_batches(int itemCount)
6963
{
7064
var items = Enumerable.Range(0, itemCount).ToArray();
71-
var batches = items.Batch(10);
72-
var enumerator = batches.GetEnumerator();
73-
Assert.That(enumerator.MoveNext(), Is.True, "At least one batch");
74-
Assert.That(enumerator.Current, Is.EqualTo(Enumerable.Range(0, 10)), "First batch content");
75-
Assert.That(enumerator.MoveNext(), Is.True, "At least two batches");
76-
Assert.That(enumerator.Current, Is.EqualTo(Enumerable.Range(10, itemCount - 10)), "Second batch content");
77-
Assert.That(enumerator.MoveNext(), Is.False, "No third batch");
65+
var batches = items.Batch(10).ToArray();
66+
Assert.That(batches.Length, Is.EqualTo(2), "Number of batches");
67+
Assert.That(batches[0], Is.EqualTo(Enumerable.Range(0, 10)), "First batch content");
68+
Assert.That(batches[1], Is.EqualTo(Enumerable.Range(10, itemCount - 10)), "Second batch content");
7869
}
7970

8071
public class MultipleEnumerationChecker

PSWin.Client/Extensions/EnumerableBatchExtension.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Linq;
34

45
namespace LinkMobility.PSWin.Client.Extensions
56
{
67
internal static class EnumerableBatchExtension
78
{
8-
public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> self, uint batchSize)
9+
public static IEnumerable<T[]> Batch<T>(this IEnumerable<T> self, uint batchSize)
910
{
1011
if (batchSize <= 0)
1112
throw new ArgumentOutOfRangeException(nameof(batchSize), batchSize, "Batch size must be greater than zero.");
@@ -25,7 +26,7 @@ IEnumerable<T> GetBatch()
2526

2627
while (enumerator.MoveNext())
2728
{
28-
yield return GetBatch();
29+
yield return GetBatch().ToArray();
2930
}
3031
}
3132
}

PSWin.Client/Transports/XmlTransport.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ public XmlTransport(string username, string password) : this(username, password,
5252
/// <inheritdoc/>
5353
public async Task<IEnumerable<MessageResult>> SendAsync(IEnumerable<Sms> messages, string sessionData = null)
5454
{
55-
var messageBatches = messages
56-
.Batch(BatchSize)
57-
.Select(b => b.ToArray());
55+
var messageBatches = messages.Batch(BatchSize);
5856
var results = new List<MessageResult>();
5957
foreach (var messageBatch in messageBatches)
6058
{

0 commit comments

Comments
 (0)