Quellcode durchsuchen

Simplify AlphanumericComparator

Bond_009 vor 2 Jahren
Ursprung
Commit
b7f2c8de5b

+ 4 - 39
src/Jellyfin.Extensions/AlphanumericComparator.cs

@@ -86,47 +86,12 @@ namespace Jellyfin.Extensions
                     {
                         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);
+                if (result != 0)
                 {
-                    int result = span1.CompareTo(span2, StringComparison.InvariantCulture);
-                    if (result != 0)
-                    {
-                        return result;
-                    }
+                    return result;
                 }
             } while (pos1 < len1 && pos2 < len2);
 

+ 5 - 0
tests/Jellyfin.Extensions.Tests/AlphanumericComparatorTests.cs

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