public IEnumerable <T> Shuffle <T>(IEnumerable <T> items) { IEnumerable <T> ret; int shuffleIndicesCount = _shuffleIndices.Count; if (shuffleIndicesCount == 0) { ret = _realChanceService.Shuffle(items); } else { List <T> retList = new List <T>(); List <T> itemList = items.ToList(); for (var i = 0; i < shuffleIndicesCount; ++i) { int selectedIndex = _shuffleIndices[i]; retList.Add(itemList[selectedIndex]); } ret = retList; } return(ret); }
public void ShuffleMethod([Values(50, 100, 500)] int numberItems) { List <int> preShuffledNumbers = new List <int>(); for (var i = 0; i < numberItems; ++i) { preShuffledNumbers.Add(i); } List <int> shuffledNumbers = _chanceService.Shuffle(preShuffledNumbers).ToList(); Assert.AreEqual(preShuffledNumbers.Count, shuffledNumbers.Count); Assert.AreEqual(numberItems, shuffledNumbers.Count); //Assert original list unaffected for (var i = 0; i < numberItems; ++i) { Assert.AreEqual(i, preShuffledNumbers[i]); } int numberDifferent = 0; int index = 0; preShuffledNumbers.ForEach(number => { //make sure no elements were duplicated/lost during the shuffle Assert.Contains(number, shuffledNumbers); if (index != shuffledNumbers.IndexOf(number)) { ++numberDifferent; } ++index; }); Assert.True(numberDifferent > 0, "chances are at least one number is not in the same index as the other."); }