using System.Collections; namespace DigitSequence.Test; public sealed class DigitsTests { [Fact] public void NegativeValue() { var digits = new Digits(-350); digits.ToString().Should().Be("350", "negative numbers are turned into positive"); } [Fact] public void Enumeration() { var digits = new Digits(220056010); int[] digitsArray = [2, 2, 0, 0, 5, 6, 0, 1, 0]; digits.Should().BeAssignableTo>(); var idx = 0; foreach (int digit in digits) { digit.Should().Be(digitsArray[idx++]); } IEnumerator enumerator1 = digits.GetEnumerator(); enumerator1.Should().BeOfType(); enumerator1.Dispose(); var enumerator2 = (digits as IEnumerable).GetEnumerator(); enumerator2.Should() .NotBeNull() .And.BeOfType(); ((IDisposable) enumerator2).Dispose(); } [Fact] public void Comparison() { var a = new Digits(890); var b = new Digits(891); var c = new Digits(890); a.Should().BeAssignableTo>(); a.CompareTo(b).Should().BeLessThan(0); b.CompareTo(a).Should().BeGreaterThan(0); a.CompareTo(a).Should().Be(0); b.CompareTo(b).Should().Be(0); a.CompareTo(c).Should().Be(0); c.CompareTo(a).Should().Be(0); a.CompareTo(null).Should().BeGreaterThan(0); } [Theory] [InlineData(123, "123")] [InlineData(321, "321")] [InlineData(-45, "45")] [InlineData(01, "1")] [InlineData(10, "10")] public void StringRepresentation(int number, string expected) { var digits = new Digits(number); digits.ToString().Should().Be(expected); } [Fact] public void GetEnumerator_NotShared() { var digits = new Digits(123); IEnumerator enumerator1 = digits.GetEnumerator(); IEnumerator enumerator2 = digits.GetEnumerator(); enumerator1.Should() .NotBeSameAs(enumerator2, "for each iteration a new enumerator is created"); enumerator1.Dispose(); enumerator2.Dispose(); } }