Skip to content

Commit afb1a5c

Browse files
committed
update test & fix "033" < "33"
1 parent 799af6a commit afb1a5c

File tree

3 files changed

+30
-25
lines changed

3 files changed

+30
-25
lines changed

NaturalStringComparer/NaturalComparer.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,26 @@ public static int Compare(ReadOnlySpan<char> x, ReadOnlySpan<char> y, StringComp
8080

8181
if (char.IsDigit(xCh) && char.IsDigit(yCh))
8282
{
83-
x = GetNumber(x.Slice(i), out var xNum);
84-
y = GetNumber(y.Slice(i), out var yNum);
83+
var xOut = GetNumber(x.Slice(i), out var xNum);
84+
var yOut = GetNumber(y.Slice(i), out var yNum);
8585

8686
if (xNum != yNum)
8787
{
8888
return xNum < yNum ? -1 : 1;
8989
}
9090

9191
i = -1;
92-
length = Math.Min(x.Length, y.Length);
93-
continue;
92+
length = Math.Min(xOut.Length, yOut.Length);
93+
if (length == 0 && xOut.Length == yOut.Length && x.Length != y.Length)
94+
{
95+
return y.Length < x.Length ? -1 : 1; // "033" < "33" === true
96+
}
97+
else
98+
{
99+
x = xOut;
100+
y = yOut;
101+
continue;
102+
}
94103
}
95104

96105
if (xCh != yCh)
@@ -110,7 +119,7 @@ private static ReadOnlySpan<char> GetNumber(ReadOnlySpan<char> span, out int num
110119
i++;
111120
}
112121

113-
#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
122+
#if NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
114123
number = int.Parse(span[..i]);
115124
return span[i..];
116125
#else

NaturalStringComparer/NaturalStringComparer.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<LangVersion>latest</LangVersion>
66
<Nullable>enable</Nullable>
77

8-
<Version>3.0.0</Version>
8+
<Version>3.0.1</Version>
99
<RootNamespace>GihanSoft.String</RootNamespace>
1010
<Authors>Muhammad Babayi</Authors>
1111
<Company>GihanSoft</Company>

NaturalStringComparerTest/UnitTestUnsafe.cs

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void Test00()
2626
{
2727
var num1 = rnd.Next();
2828
var num2 = rnd.Next();
29-
var result = NaturalComparer.Ordinal.Compare($"text {num1}", $"text {num2}");
29+
var result = NaturalComparer.Compare($"text {num1}", $"text {num2}", StringComparison.Ordinal);
3030
Assert.Equal(num1.CompareTo(num2), result);
3131
}
3232

@@ -35,65 +35,63 @@ public void Test01()
3535
{
3636
var r1 = NaturalComparer.Compare("_qwerty", "0qwerty", StringComparison.InvariantCulture);
3737
Assert.True(r1 < 0);
38-
var r2 = NaturalComparer.Ordinal.Compare("[qwerty", "_qwerty");
38+
var r2 = NaturalComparer.Compare("[qwerty", "_qwerty", StringComparison.Ordinal);
3939
Assert.True(r2 < 0);
4040
}
4141

4242
[Fact]
4343
public void Test02()
4444
{
45-
var r = NaturalComparer.Ordinal.Compare("some text", "some text");
45+
var r = NaturalComparer.Compare("some text", "some text", StringComparison.Ordinal);
4646
Assert.True(r == 0);
4747
}
4848

4949
[Fact]
5050
public void Test03()
5151
{
52-
var r = NaturalComparer.Ordinal.Compare("number 1", "number 2");
52+
var r = NaturalComparer.Compare("number 1", "number 2", StringComparison.Ordinal);
5353
Assert.True(r < 0);
5454
}
5555

5656
[Fact]
5757
public void Test04()
5858
{
59-
var r = NaturalComparer.Ordinal.Compare("12 hi 2", "3 hi 11");
59+
var r = NaturalComparer.Compare("12 hi 2", "3 hi 11", StringComparison.Ordinal);
6060
Assert.True(r > 0);
6161
}
6262

6363
[Fact]
6464
public void Test05()
6565
{
66-
var r = NaturalComparer.Ordinal.Compare("text 1326 with", "text 999");
66+
var r = NaturalComparer.Compare("text 1326 with", "text 999", StringComparison.Ordinal);
6767
Assert.True(r > 0);
6868
}
6969

7070
[Fact]
7171
public void Test06()
7272
{
73-
var r = NaturalComparer.Ordinal.Compare("1278.jpg", "33.jpg");
73+
var r = NaturalComparer.Compare("1278.jpg", "33.jpg", StringComparison.Ordinal);
7474
Assert.True(r > 0);
7575
}
7676

7777
[Fact]
7878
public void Test07()
7979
{
80-
var r = NaturalComparer.Ordinal.Compare("compare 01278 and 3", "compare 1278 and 1000");
80+
var r = NaturalComparer.Compare("compare 01278 and 3", "compare 1278 and 1000", StringComparison.Ordinal);
8181
Assert.True(r < 0);
8282
}
8383

84-
85-
8684
[Fact]
8785
public void Test08()
8886
{
89-
var r = NaturalComparer.Ordinal.Compare("033", "33");
90-
Assert.True(r > 0);
87+
var r = NaturalComparer.Compare("033", "33", StringComparison.Ordinal);
88+
Assert.True(r < 0);
9189
}
9290

9391
[Fact]
9492
public void Test08_2()
9593
{
96-
var r = NaturalComparer.Ordinal.Compare("33", "33");
94+
var r = NaturalComparer.Compare("33", "33", StringComparison.Ordinal);
9795
Assert.Equal(0, r);
9896
}
9997

@@ -102,14 +100,14 @@ public void Test09()
102100
{
103101
var num1 = 911651651;
104102
var num2 = 911651615;
105-
var r = NaturalComparer.Ordinal.Compare($"{num1}", $"{num2}");
103+
var r = NaturalComparer.Compare($"{num1}", $"{num2}", StringComparison.Ordinal);
106104
Assert.Equal(num1.CompareTo(num2), r);
107105
}
108106

109107
[Fact]
110108
public void Test10()
111109
{
112-
var r = NaturalComparer.Ordinal.Compare("hi2", "hi2hi");
110+
var r = NaturalComparer.Compare("hi2", "hi2hi", StringComparison.Ordinal);
113111
Assert.True(r < 0);
114112
}
115113

@@ -118,9 +116,7 @@ public void Test21()
118116
{
119117
for (var i = 0; i < n - 1; i++)
120118
{
121-
var result = NaturalComparer.Ordinal.Compare(
122-
$"a long text to show better difference of compare methods {nums[i]}",
123-
$"a long text to show better difference of compare methods {nums[i + 1]} hghf");
119+
var result = NaturalComparer.Compare($"a long text to show better difference of compare methods {nums[i]}", $"a long text to show better difference of compare methods {nums[i + 1]} hghf", StringComparison.Ordinal);
124120
Assert.Equal(nums[i].CompareTo(nums[i + 1]), result);
125121
}
126122
}
@@ -134,7 +130,7 @@ void TT()
134130
, "number9", "number33", "number5", "number12"
135131
};
136132

137-
stringList.Sort(NaturalComparer.Ordinal);
133+
stringList.Sort(new NaturalComparer(StringComparison.Ordinal));
138134
//or
139135
stringList.NaturalSort(); // need "using Gihan.Helpers.Linq;"
140136

0 commit comments

Comments
 (0)