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().Be(numberString2); } [Fact] public void Equals_NotEqual() { var numberString1 = new NumberString("abc123"); var numberString2 = new NumberString("abc124"); numberString1.Should().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 enumerator = numberString.GetEnumerator(); enumerator.Should().BeOfType(); enumerator.Dispose(); } [Fact] public void GetEnumerator_Redirect() { var numberString = new NumberString("abc123"); IEnumerator enumerator = numberString.GetEnumerator(); enumerator.Should().BeOfType(); ((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)"); } }