aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Common/Extensions/ShuffleExtensions.cs3
-rw-r--r--tests/Jellyfin.Common.Tests/Extensions/ShuffleExtensionsTests.cs22
2 files changed, 23 insertions, 2 deletions
diff --git a/MediaBrowser.Common/Extensions/ShuffleExtensions.cs b/MediaBrowser.Common/Extensions/ShuffleExtensions.cs
index 459bec110..6f0ea9bd5 100644
--- a/MediaBrowser.Common/Extensions/ShuffleExtensions.cs
+++ b/MediaBrowser.Common/Extensions/ShuffleExtensions.cs
@@ -33,8 +33,7 @@ namespace MediaBrowser.Common.Extensions
int n = list.Count;
while (n > 1)
{
- n--;
- int k = rng.Next(n + 1);
+ int k = rng.Next(n--);
T value = list[k];
list[k] = list[n];
list[n] = value;
diff --git a/tests/Jellyfin.Common.Tests/Extensions/ShuffleExtensionsTests.cs b/tests/Jellyfin.Common.Tests/Extensions/ShuffleExtensionsTests.cs
new file mode 100644
index 000000000..cbdbcf112
--- /dev/null
+++ b/tests/Jellyfin.Common.Tests/Extensions/ShuffleExtensionsTests.cs
@@ -0,0 +1,22 @@
+using System;
+using MediaBrowser.Common.Extensions;
+using Xunit;
+
+namespace Jellyfin.Common.Tests.Extensions
+{
+ public static class ShuffleExtensionsTests
+ {
+ private static readonly Random _rng = new Random();
+
+ [Fact]
+ public static void Shuffle_Valid_Correct()
+ {
+ byte[] original = new byte[1 << 6];
+ _rng.NextBytes(original);
+ byte[] shuffled = (byte[])original.Clone();
+ shuffled.Shuffle();
+
+ Assert.NotEqual(original, shuffled);
+ }
+ }
+}