public void Sample_OnRandom(int frequency)
        {
            var rand    = new MersenneTwister((uint)Math.Abs(DateTime.Now.Ticks));
            var counter = new SystematicCounter(frequency, SystematicCounter.CounterType.ON_RANDOM, rand);

            var numRuns         = 100;
            var expectedSamples = numRuns / frequency;
            var results         = new bool[numRuns];


            var seenSamples = 0;

            for (int i = 0; i < numRuns; i++)
            {
                var result = counter.Next();
                if (result)
                {
                    seenSamples++;
                }
                results[i] = result;
            }

            //var seenSamples = results.Where(x => x == true).Count();
            seenSamples.Should().Be(expectedSamples);
        }
        public override SampleResult Sample()
        {
            var isSample = SystematicCounter.Next();

            if (isSample)
            {
                if (IsSelectingITrees && InsuranceSampler.Next())
                {
                    return(SampleResult.I);
                }
                else
                {
                    return(SampleResult.M);
                }
            }
            else
            {
                return(SampleResult.C);
            }
        }
 public SystematicSelecter(int frequency, int iFrequency, bool randomStart)
     : base(frequency, iFrequency)
 {
     SystematicCounter = new SystematicCounter(frequency, (randomStart) ? SystematicCounter.CounterType.ON_RANDOM : SystematicCounter.CounterType.ON_LAST, Rand);
 }
 public SystematicSelecter(int frequency, int iFrequency, int counter, int insuranceIndex, int insuranceCounter, int hitIndex)
     : base(frequency, iFrequency, counter, insuranceIndex, insuranceCounter)
 {
     SystematicCounter = new SystematicCounter(frequency, hitIndex, counter);
 }