예제 #1
0
        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);
        }
예제 #2
0
        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.");
        }