135 lines
3.7 KiB
C#
135 lines
3.7 KiB
C#
using System.Collections;
|
|
using Numbers.NumberString;
|
|
|
|
namespace Numbers.Test.NumberString;
|
|
|
|
using NumberString = Numbers.NumberString.NumberString;
|
|
|
|
public sealed class NumberStringTests
|
|
{
|
|
[Theory]
|
|
[InlineData("abc133", 133)]
|
|
[InlineData("4a2b3c", 423)]
|
|
[InlineData("1235abc", 1235)]
|
|
[InlineData("3ab2c", 32)]
|
|
[InlineData("abc", 0)]
|
|
public void NumericValue(string input, int expected)
|
|
{
|
|
var numberString = new NumberString(input);
|
|
|
|
numberString.NumericValue.Should().Be(expected);
|
|
}
|
|
|
|
[Fact]
|
|
public void Equals_Equal()
|
|
{
|
|
var numberString1 = new NumberString("abc123");
|
|
var numberString2 = new NumberString("1a2b3c");
|
|
|
|
numberString1.Should<NumberString>().Be(numberString2);
|
|
}
|
|
|
|
[Fact]
|
|
public void Equals_NotEqual()
|
|
{
|
|
var numberString1 = new NumberString("abc123");
|
|
var numberString2 = new NumberString("abc124");
|
|
|
|
numberString1.Should<NumberString>().NotBe(numberString2);
|
|
}
|
|
|
|
[Fact]
|
|
public void OperatorGreater()
|
|
{
|
|
var numberString1 = new NumberString("abc124");
|
|
var numberString2 = new NumberString("abc123");
|
|
|
|
(numberString1 > numberString2).Should().BeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public void OperatorLess()
|
|
{
|
|
var numberString1 = new NumberString("abc123");
|
|
var numberString2 = new NumberString("abc124");
|
|
|
|
(numberString1 < numberString2).Should().BeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public void CompareTo()
|
|
{
|
|
var numberString1 = new NumberString("abc123");
|
|
var numberString2 = new NumberString("abc124");
|
|
var numberString3 = new NumberString("abc124");
|
|
|
|
numberString1.CompareTo(numberString2).Should().BeNegative();
|
|
numberString2.CompareTo(numberString1).Should().BePositive();
|
|
numberString2.CompareTo(numberString3).Should().Be(0);
|
|
}
|
|
|
|
[Fact]
|
|
public void Equals_Operators()
|
|
{
|
|
var numberString1 = new NumberString("abc123");
|
|
var numberString2 = new NumberString("abc124");
|
|
var numberString3 = new NumberString("abc124");
|
|
|
|
(numberString1 == numberString2).Should().BeFalse();
|
|
(numberString2 == numberString3).Should().BeTrue();
|
|
(numberString1 != numberString3).Should().BeTrue();
|
|
(numberString2 != numberString3).Should().BeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void Equals_Simple()
|
|
{
|
|
var numberString1 = new NumberString("abc123");
|
|
var numberString2 = new NumberString("abc123");
|
|
|
|
numberString1.Equals(new object()).Should().BeFalse();
|
|
numberString1.Equals(null).Should().BeFalse();
|
|
numberString1!.Equals(numberString2).Should().BeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public void GetEnumerator()
|
|
{
|
|
var numberString = new NumberString("abc123");
|
|
|
|
IEnumerator<int> enumerator = numberString.GetEnumerator();
|
|
|
|
enumerator.Should().BeOfType<DigitEnumerator>();
|
|
enumerator.Dispose();
|
|
}
|
|
|
|
[Fact]
|
|
public void GetEnumerator_Redirect()
|
|
{
|
|
var numberString = new NumberString("abc123");
|
|
IEnumerator enumerator = numberString.GetEnumerator();
|
|
|
|
enumerator.Should().BeOfType<DigitEnumerator>();
|
|
((IDisposable) enumerator).Dispose();
|
|
}
|
|
|
|
[Fact]
|
|
public void HashCode()
|
|
{
|
|
var numberString = new NumberString("abc123");
|
|
|
|
numberString.GetHashCode().Should().Be(numberString.NumericValue);
|
|
}
|
|
|
|
[Fact]
|
|
public void Indexer()
|
|
{
|
|
var numberString = new NumberString("5abc1de7fg34");
|
|
|
|
numberString[0].Should().Be(5);
|
|
numberString[2].Should().Be(7);
|
|
numberString[4].Should().Be(4);
|
|
numberString[-1].Should().Be(-1, "invalid index");
|
|
numberString[5].Should().Be(-1, "invalid index (too high)");
|
|
}
|
|
}
|