protected override async Task <Result?> Explore()
        {
            var distinctValuesResult = await distinctValuesProvider.ResultAsync;

            if (distinctValuesResult == null)
            {
                return(null);
            }

            var config = await sampleValuesGeneratorConfigProvider.ResultAsync;

            if (config == null)
            {
                return(null);
            }

            var sampleValues = Enumerable.Empty <JsonElement>();

            if (config.CategoricalSampling)
            {
                var rand      = new Random(Environment.TickCount);
                var allValues = ValueWithCountList <JsonElement> .FromValueWithCountEnum(
                    distinctValuesResult
                    .DistinctRows
                    .Where(r => !r.IsSuppressed)
                    .Select(r => r.IsNull
                            ? ValueWithCount <JsonElement> .ValueCount(JsonNull, r.Count, r.CountNoise)
                            : r));

                sampleValues = Enumerable
                               .Range(0, Context.SamplesToPublish)
                               .Select(_ => allValues.GetRandomValue(rand));
            }
            return(new Result(sampleValues.ToList()));
        }
        public void FindValueTest(int count)
        {
            var vals = ValueWithCountList <int> .FromValueWithCountEnum(
                Enumerable.Range(0, count).Select(i => ValueWithCount <int> .ValueCount(i, 1L)));

            for (var i = 0; i < vals.Count; i++)
            {
                Assert.Equal(i, vals.FindValue(i));
            }
            Assert.Throws <ArgumentException>(() => vals.FindValue(count));
            Assert.Throws <ArgumentException>(() => vals.FindValue(count + 1));
        }
        public void FindValueFromEmptyList()
        {
            var vals = ValueWithCountList <string> .FromValueWithCountEnum(Enumerable.Empty <ValueWithCount <string> >());

            Assert.Throws <InvalidOperationException>(() => vals.FindValue(1));
        }