diff --git a/src/SIL.Machine/Utils/EnumerableExtensions.cs b/src/SIL.Machine/Utils/EnumerableExtensions.cs index 1c2fc72b0..8bab692e2 100644 --- a/src/SIL.Machine/Utils/EnumerableExtensions.cs +++ b/src/SIL.Machine/Utils/EnumerableExtensions.cs @@ -13,6 +13,8 @@ Func, TResult> selector { // ToList is necessary to avoid deferred execution List> enumerators = source.Select(seq => seq.GetEnumerator()).ToList(); + if (enumerators.Count == 0) + yield break; try { while (true) diff --git a/tests/SIL.Machine.Tests/Utils/EnumberableExtensionTests.cs b/tests/SIL.Machine.Tests/Utils/EnumberableExtensionTests.cs new file mode 100644 index 000000000..7524087e1 --- /dev/null +++ b/tests/SIL.Machine.Tests/Utils/EnumberableExtensionTests.cs @@ -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 result = seqs.ZipMany(x => x.Sum()); + Assert.That(result, Is.Empty); + } + + [Test] + public void ZipMany_Two() + { + var seqs = new List> { new[] { 1, 2, 3 }, new[] { 4, 5, 6 } }; + IEnumerable result = seqs.ZipMany(x => x.Sum()); + Assert.That(result, Is.EqualTo(new[] { 5, 7, 9 })); + } +}