81 lines
2 KiB
C#
81 lines
2 KiB
C#
using Numbers.NumberString;
|
|
|
|
namespace Numbers.Test.NumberString;
|
|
|
|
public sealed class DigitEnumeratorTests
|
|
{
|
|
[Fact]
|
|
public void MoveNext_NoMoreDigits()
|
|
{
|
|
var enumerator = new DigitEnumerator("abc");
|
|
|
|
enumerator.MoveNext().Should().BeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void MoveNext_MoreDigits()
|
|
{
|
|
var enumerator = new DigitEnumerator("abc123");
|
|
|
|
enumerator.MoveNext().Should().BeTrue();
|
|
}
|
|
|
|
[Theory]
|
|
[MemberData(nameof(EnumeratorTestData))]
|
|
public void Current_CorrectDigit(string input, int moveSteps, int expectedDigit)
|
|
{
|
|
var enumerator = new DigitEnumerator(input);
|
|
|
|
enumerator.Current.Should().Be(-1, "enumerator not moved yet");
|
|
for (var i = 0; i < moveSteps; i++)
|
|
{
|
|
enumerator.MoveNext();
|
|
}
|
|
|
|
enumerator.Current.Should().Be(expectedDigit);
|
|
}
|
|
|
|
[Fact]
|
|
public void Reset()
|
|
{
|
|
var enumerator = new DigitEnumerator("abc123");
|
|
enumerator.MoveNext();
|
|
enumerator.MoveNext();
|
|
|
|
enumerator.Reset();
|
|
enumerator.MoveNext();
|
|
|
|
enumerator.Current.Should().Be(1);
|
|
}
|
|
|
|
[Fact]
|
|
public void Interface()
|
|
{
|
|
var enumerator = new DigitEnumerator("abc123");
|
|
|
|
enumerator.Should().BeAssignableTo<IEnumerator<int>>();
|
|
}
|
|
|
|
public static TheoryData<string, int, int> EnumeratorTestData() =>
|
|
new()
|
|
{
|
|
{ "abc132", 1, 1 },
|
|
{ "abc132", 2, 3 },
|
|
{ "abc132", 3, 2 },
|
|
{ "1abc23", 1, 1 },
|
|
{ "1abc23", 2, 2 },
|
|
{ "1abc23", 3, 3 },
|
|
{ "a1b2c3", 1, 1 },
|
|
{ "a1b2c3", 2, 2 },
|
|
{ "a1b2c3", 3, 3 },
|
|
{ "123abc", 1, 1 },
|
|
{ "123abc", 2, 2 },
|
|
{ "123abc", 3, 3 },
|
|
{ "2def456", 1, 2 },
|
|
{ "2def456", 2, 4 },
|
|
{ "2def456", 3, 5 },
|
|
{ "d4ef56", 1, 4 },
|
|
{ "d4ef56", 2, 5 },
|
|
{ "d4ef56", 3, 6 }
|
|
};
|
|
}
|