public void TestIListExtensions() { // Shuffle, Last Index { int[] values = new int[] { 1, 2, 3, 4, 5 }; Assert.AreEqual(4, values.LastIndex()); int[] shuffled = (int[])values.Clone(); shuffled.Shuffle(); Assert.AreNotEqual(values, shuffled); } // Swap { int[] values = new int[] { 1, 2, 3, 4, 5 }; values.SwapAtIndex(0, 4); Assert.AreEqual(values, new int[] { 5, 2, 3, 4, 1 }); values.Swap(1, 5); Assert.AreEqual(values, new int[] { 1, 2, 3, 4, 5 }); } // First, Last, Random { int[] values = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Assert.AreEqual(1, values.First()); Assert.AreEqual(9, values.Last()); // You see, random can end up hitting the same index... since it's random int a = values.Random(); int b = -1; for (int i = 0; i < values.Length; ++i) { b = values.Random(); if (a != b) { break; } } Assert.AreNotEqual(a, b); } // Remove First/Last { List <int> values = new List <int>() { 1, 2, 3, 4 }; values.RemoveFirst(); values.RemoveLast(); Assert.AreEqual(2, values.First()); Assert.AreEqual(3, values.Last()); } // Has Index, AtIndexOrDefault { TestDataObject a = new TestDataObject("A", 1); TestDataObject[] values = new TestDataObject[] { a }; Assert.False(values.HasIndex(-1)); Assert.True(values.HasIndex(0)); Assert.False(values.HasIndex(1)); Assert.AreEqual(a, values.AtIndexOrDefault(0)); Assert.AreEqual(a, values.AtIndexOrDefault(5, a)); } }