ex-int-01-digits/DigitSequence.Test/DigitEnumeratorTests.cs
github-classroom[bot] 4dda0d330c
Initial commit
2025-04-06 10:48:47 +00:00

151 lines
4.6 KiB
C#

using System.Collections;
namespace DigitSequence.Test;
public sealed class DigitEnumeratorTests
{
[Fact]
public void Simple()
{
var enumerator = new DigitEnumerator(123);
// we cannot check Current value, because it is - according to the spec - currently in an
// undefined (in the sense of 'any value') state since MoveNext has never been called
enumerator.MoveNext().Should().BeTrue("there are more digits");
enumerator.Current.Should().Be(1, "the first digit is 1");
enumerator.MoveNext().Should().BeTrue("there are still more digits");
enumerator.Current.Should().Be(2, "the second digit is 2");
enumerator.MoveNext().Should().BeTrue("there is one more digit");
enumerator.Current.Should().Be(3, "the third digit is 3");
enumerator.MoveNext().Should().BeFalse("exhausted");
// we cannot check Current value, because it is - according to the spec - now in an
// undefined (in the sense of 'any value') state since MoveNext returned false
}
[Fact]
public void NegativeNumber()
{
var enumerator = new DigitEnumerator(-654);
enumerator.MoveNext().Should().BeTrue("there are more digits");
enumerator.Current.Should().Be(6, "negative number turned into positive");
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(5);
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(4);
enumerator.MoveNext().Should().BeFalse("exhausted");
}
[Fact]
public void SingleDigit()
{
var enumerator = new DigitEnumerator(6);
enumerator.MoveNext().Should().BeTrue("one digit present");
enumerator.Current.Should().Be(6, "the only digit is 6");
enumerator.MoveNext().Should().BeFalse("no more digits");
}
[Fact]
public void SingleDigit_Zero()
{
var enumerator = new DigitEnumerator(0);
enumerator.MoveNext().Should().BeTrue("zero is a valid digit");
enumerator.Current.Should().Be(0, "the only digit is 0");
enumerator.MoveNext().Should().BeFalse("no more digits");
}
[Fact]
public void ContainsZero()
{
var enumerator = new DigitEnumerator(504);
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(5);
enumerator.MoveNext().Should().BeTrue("there are still more digits");
enumerator.Current.Should().Be(0, "zero is a valid digit");
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(4);
enumerator.MoveNext().Should().BeFalse();
}
[Fact]
public void ContainsZero_Multiple()
{
var enumerator = new DigitEnumerator(5004);
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(5);
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(0, "zero is a valid digit");
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(0, "zero is a valid digit");
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(4);
enumerator.MoveNext().Should().BeFalse();
}
[Fact]
public void ContainsZero_Multiple_EndsWith()
{
var enumerator = new DigitEnumerator(500);
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(5);
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(0, "zero is a valid digit");
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(0, "zero is a valid digit");
enumerator.MoveNext().Should().BeFalse();
}
[Fact]
public void Reset()
{
var enumerator = new DigitEnumerator(45678);
enumerator.MoveNext().Should().BeTrue();
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(5);
enumerator.Reset();
enumerator.MoveNext().Should().BeTrue();
enumerator.Current.Should().Be(4);
while (enumerator.MoveNext())
{
// loop to end
}
enumerator.Reset();
for (var i = 0; i < 3; i++)
{
enumerator.MoveNext();
}
(enumerator as IEnumerator).Current.Should().NotBeNull()
.And.BeOfType<int>()
.And.Be(6);
}
}