Initial commit
This commit is contained in:
commit
4dda0d330c
11 changed files with 4624 additions and 0 deletions
151
DigitSequence.Test/DigitEnumeratorTests.cs
Normal file
151
DigitSequence.Test/DigitEnumeratorTests.cs
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
37
DigitSequence.Test/DigitSequence.Test.csproj
Normal file
37
DigitSequence.Test/DigitSequence.Test.csproj
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="FluentAssertions" />
|
||||
<Using Include="Xunit" />
|
||||
<Using Include="NSubstitute" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AwesomeAssertions" Version="8.0.2" />
|
||||
<PackageReference Include="HTLLeonding.Utility.LeoAnalyzers" Version="1.0.2" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
|
||||
<PackageReference Include="NSubstitute" Version="5.3.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.3" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.2">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\DigitSequence\DigitSequence.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
81
DigitSequence.Test/DigitsTests.cs
Normal file
81
DigitSequence.Test/DigitsTests.cs
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
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<Digits>().BeAssignableTo<IEnumerable<int>>();
|
||||
|
||||
var idx = 0;
|
||||
foreach (int digit in digits)
|
||||
{
|
||||
digit.Should().Be(digitsArray[idx++]);
|
||||
}
|
||||
|
||||
IEnumerator<int> enumerator1 = digits.GetEnumerator();
|
||||
enumerator1.Should().BeOfType<DigitEnumerator>();
|
||||
enumerator1.Dispose();
|
||||
|
||||
var enumerator2 = (digits as IEnumerable).GetEnumerator();
|
||||
enumerator2.Should()
|
||||
.NotBeNull()
|
||||
.And.BeOfType<DigitEnumerator>();
|
||||
((IDisposable) enumerator2).Dispose();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Comparison()
|
||||
{
|
||||
var a = new Digits(890);
|
||||
var b = new Digits(891);
|
||||
var c = new Digits(890);
|
||||
|
||||
a.Should<Digits>().BeAssignableTo<IComparable<Digits>>();
|
||||
|
||||
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<int> enumerator1 = digits.GetEnumerator();
|
||||
IEnumerator<int> enumerator2 = digits.GetEnumerator();
|
||||
enumerator1.Should()
|
||||
.NotBeSameAs(enumerator2, "for each iteration a new enumerator is created");
|
||||
enumerator1.Dispose();
|
||||
enumerator2.Dispose();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue