Simplify AlphanumericComparator

This commit is contained in:
Bond_009 2023-01-24 12:47:59 +01:00
parent 6b006a576d
commit b7f2c8de5b
2 changed files with 9 additions and 39 deletions

View File

@ -86,48 +86,13 @@ namespace Jellyfin.Extensions
{ {
return 1; return 1;
} }
else if (span1Len >= 20) // Number is probably too big for a ulong
{
// Trim all the first digits that are the same
int i = 0;
while (i < span1Len && span1[i] == span2[i])
{
i++;
} }
// If there are no more digits it's the same number
if (i == span1Len)
{
continue;
}
// Only need to compare the most significant digit
span1 = span1.Slice(i, 1);
span2 = span2.Slice(i, 1);
}
if (!ulong.TryParse(span1, out var num1)
|| !ulong.TryParse(span2, out var num2))
{
return 0;
}
else if (num1 < num2)
{
return -1;
}
else if (num1 > num2)
{
return 1;
}
}
else
{
int result = span1.CompareTo(span2, StringComparison.InvariantCulture); int result = span1.CompareTo(span2, StringComparison.InvariantCulture);
if (result != 0) if (result != 0)
{ {
return result; return result;
} }
}
} while (pos1 < len1 && pos2 < len2); } while (pos1 < len1 && pos2 < len2);
return len1 - len2; return len1 - len2;

View File

@ -19,6 +19,11 @@ namespace Jellyfin.Extensions.Tests
[InlineData("12345678912345678912345678913234567891", "12345678912345678912345678913234567892")] [InlineData("12345678912345678912345678913234567891", "12345678912345678912345678913234567892")]
[InlineData("12345678912345678912345678913234567891a", "12345678912345678912345678913234567891a")] [InlineData("12345678912345678912345678913234567891a", "12345678912345678912345678913234567891a")]
[InlineData("12345678912345678912345678913234567891a", "12345678912345678912345678913234567891b")] [InlineData("12345678912345678912345678913234567891a", "12345678912345678912345678913234567891b")]
[InlineData("a5", "a11")]
[InlineData("a05a", "a5b")]
[InlineData("a5a", "a05b")]
[InlineData("6xxx", "007asdf")]
[InlineData("00042Q", "42s")]
public void AlphanumericComparatorTest(params string?[] strings) public void AlphanumericComparatorTest(params string?[] strings)
{ {
var copy = strings.Reverse().ToArray(); var copy = strings.Reverse().ToArray();