Initial commit

This commit is contained in:
github-classroom[bot] 2025-04-06 10:48:47 +00:00 committed by GitHub
commit 4dda0d330c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 4624 additions and 0 deletions

View 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);
}
}

View 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>

View 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();
}
}