public void TestCardinality()
        {
            var strategy = new CardinalSubsetSelectionStrategy(30, RandomDefaults.CreateRandomSource());

            for (int i = 0; i < 101; i++)
            {
                int[] idxArr = strategy.SelectSubset(i);
                int   expectedCardinality = Math.Min(30, i);
                Assert.AreEqual(expectedCardinality, idxArr.Length);
            }
        }
        public void TestUniqueness()
        {
            var strategy = new CardinalSubsetSelectionStrategy(30, RandomDefaults.CreateRandomSource());

            for (int i = 0; i < 20; i++)
            {
                int[]         idxArr = strategy.SelectSubset(20);
                HashSet <int> idxSet = new HashSet <int>();

                for (int j = 0; j < idxArr.Length; j++)
                {
                    int val = idxArr[j];
                    Assert.IsFalse(idxSet.Contains(val));
                    idxSet.Add(val);
                }
            }
        }
    public void SelectSubset_Uniqueness()
    {
        IRandomSource rng = RandomDefaults.CreateRandomSource();

        var strategy = new CardinalSubsetSelectionStrategy(30);

        for (int i = 0; i < 20; i++)
        {
            int[]         idxArr = strategy.SelectSubset(20, rng);
            HashSet <int> idxSet = new();

            for (int j = 0; j < idxArr.Length; j++)
            {
                int val = idxArr[j];
                Assert.DoesNotContain(val, idxSet);
                idxSet.Add(val);
            }
        }
    }