Skip to content

Commit

Permalink
If there are no enumerators, it enters an infinite loop. (#257)
Browse files Browse the repository at this point in the history
* If there are no enumerators, it enters an infinite loop.

* Add test
  • Loading branch information
johnml1135 authored Oct 15, 2024
1 parent 83a06ee commit 204bb50
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/SIL.Machine/Utils/EnumerableExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Func<IEnumerable<TSource>, TResult> selector
{
// ToList is necessary to avoid deferred execution
List<IEnumerator<TSource>> enumerators = source.Select(seq => seq.GetEnumerator()).ToList();
if (enumerators.Count == 0)
yield break;
try
{
while (true)
Expand Down
23 changes: 23 additions & 0 deletions tests/SIL.Machine.Tests/Utils/EnumberableExtensionTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using NUnit.Framework;

namespace SIL.Machine.Utils;

[TestFixture]
public class EnumerableExtensionTests
{
[Test]
public void ZipMany_None()
{
var seqs = new List<IEnumerable<int>>();
IEnumerable<int> result = seqs.ZipMany(x => x.Sum());
Assert.That(result, Is.Empty);
}

[Test]
public void ZipMany_Two()
{
var seqs = new List<IEnumerable<int>> { new[] { 1, 2, 3 }, new[] { 4, 5, 6 } };
IEnumerable<int> result = seqs.ZipMany(x => x.Sum());
Assert.That(result, Is.EqualTo(new[] { 5, 7, 9 }));
}
}

0 comments on commit 204bb50

Please sign in to comment.