internal static void AllNValuesCanChangePositions(this Assert _, IShuffle <ValuePriorityPair <int> > shuffle)
        {
            var elements = new ValuePriorityPairs <int>
            {
                new ValuePriorityPair <int>(1, 1),
                new ValuePriorityPair <int>(2, 2),
                new ValuePriorityPair <int>(3, 3),
                new ValuePriorityPair <int>(4, 4),
                new ValuePriorityPair <int>(5, 5),
            };

            var value1Set = new HashSet <int>();
            var value2Set = new HashSet <int>();
            var value3Set = new HashSet <int>();

            for (var i = 0; i < _iterations; i++)
            {
                var shuffled = shuffle.Shuffle(elements, 3).ToList();
                value1Set.Add(shuffled[0].Value);
                value2Set.Add(shuffled[1].Value);
                value3Set.Add(shuffled[2].Value);
            }

            Assert.AreEqual(elements.Count(), value1Set.Count);
            Assert.AreEqual(elements.Count(), value2Set.Count);
            Assert.AreEqual(elements.Count(), value3Set.Count);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultPicker{T}"/> class.
 /// </summary>
 /// <param name="rng">The random number generator.</param>
 /// <param name="pairs">The value-priority paris to pick from.</param>
 /// <param name="numberOfElements">The number of elements to pick.</param>
 public DefaultPicker(IRandomNumberGenerator rng, ValuePriorityPairs <T> pairs, int numberOfElements)
 {
     _rng = rng;
     _numberOfElements = numberOfElements;
     _pairs            = pairs;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultPicker{T}"/> class.
 /// </summary>
 /// <param name="rng">The random number generator.</param>
 /// <param name="pairs">The value-priority paris to pick from.</param>
 public DefaultPicker(IRandomNumberGenerator rng, ValuePriorityPairs <T> pairs)
     : this(rng, pairs, 1)
 {
 }