using System; using System.Linq; using FluentAssertions; using NUnit.Framework; namespace Chernobyl.Collections.Generic { [TestFixture, Description("Tests for LoopingEnumerator{T}")] public class LoopingEnumeratorTests { #region ReturnToStart Tests [Test, Description("Verifies that LoopingEnumerator{T} can handle an empty list when returning to start.")] public void ReturnToStartEmptyTest() { var loopingItems = Array.Empty().AsLooping(false).Take(3); loopingItems.Should().BeEmpty(); } [Test, Description("Verifies that LoopingEnumerator{T} can handle iterating an empty list when returning to start.")] public void ReturnToStartIterateEmptyTest() { using (var enumerator = Array.Empty().AsLooping(false).GetEnumerator()) { enumerator.MoveNext().Should().BeFalse(); enumerator.Current.Should().Be(default); enumerator.MoveNext().Should().BeFalse(); enumerator.Current.Should().Be(default); } } [Test, Description("Verifies that LoopingEnumerator{T} can reverse with one item.")] public void ReturnToStartOneTest() { var items = new[] { 1 }; var loopingItems = items.AsLooping(false).Take(6); loopingItems.Should().Equal(1, 1, 1, 1, 1, 1); } [Test, Description("Verifies that LoopingEnumerator{T} can reset to the beginning of a list .")] public void ReturnToStartTest() { var items = new[] {1, 2, 3, 4}; var loopingItems = items.AsLooping(false).Take(6); loopingItems.Should().Equal(1, 2, 3, 4, 1, 2); } #endregion #region Reverse Tests [Test, Description("Verifies that LoopingEnumerator{T} can handle an empty list when reversing.")] public void ReverseEmptyTest() { var loopingItems = Array.Empty().AsLooping(true).Take(3); loopingItems.Should().BeEmpty(); } [Test, Description("Verifies that LoopingEnumerator{T} can handle iterating an empty list when reversing.")] public void ReverseIterateEmptyTest() { using (var enumerator = Array.Empty().AsLooping(true).GetEnumerator()) { enumerator.MoveNext().Should().BeFalse(); enumerator.Current.Should().Be(default); enumerator.MoveNext().Should().BeFalse(); enumerator.Current.Should().Be(default); } } [Test, Description("Verifies that LoopingEnumerator{T} can reverse with one item.")] public void ReverseOneTest() { var items = new[] { 1 }; var loopingItems = items.AsLooping(true).Take(6); loopingItems.Should().Equal(1, 1, 1, 1, 1, 1); } [Test, Description("Verifies that LoopingEnumerator{T} can reverse.")] public void ReverseTest() { var items = new[] { 1, 2, 3, 4 }; var loopingItems = items.AsLooping(true).Take(6); loopingItems.Should().Equal(1, 2, 3, 4, 4, 3); } #endregion } }