public void AddHit()
        {
            var sparseBoolBins       = new SparseGroupedBoolBins(100);
            var binsThatShouldBeTrue = new List <int>();

            // Everything should be false to start off
            CheckBins(binsThatShouldBeTrue, sparseBoolBins);

            // Add a hit
            var added = sparseBoolBins.AddHit(5);

            Assert.True(added);
            binsThatShouldBeTrue.Add(5);
            CheckBins(binsThatShouldBeTrue, sparseBoolBins);

            // Adding same again shouldn't change things
            sparseBoolBins.AddHit(5);
            CheckBins(binsThatShouldBeTrue, sparseBoolBins);

            // Add another hit
            sparseBoolBins.AddHit(7);
            binsThatShouldBeTrue.Add(7);
            CheckBins(binsThatShouldBeTrue, sparseBoolBins);

            // Add a hit that's out of range
            var result = sparseBoolBins.AddHit(1000);

            Assert.False(result);
            // Just barely out of range
            result = sparseBoolBins.AddHit(100);
            Assert.False(result);
            // Negative
            result = sparseBoolBins.AddHit(-1);
            Assert.False(result);
        }
        private static void CheckBins(List <int> binsThatShouldBeTrue, SparseGroupedBoolBins sparseBoolBins)
        {
            for (int i = 0; i < 100; i++)
            {
                if (!binsThatShouldBeTrue.Contains(i))
                {
                    Assert.Equal(false, sparseBoolBins.GetHit(i));
                }
            }

            foreach (var bin in binsThatShouldBeTrue)
            {
                Assert.Equal(true, sparseBoolBins.GetHit(bin));
            }
        }
        public void IncrementHit()
        {
            var sparseBins           = new SparseGroupedBoolBins(100);
            var binsThatShouldBeTrue = new List <int>();

            // Everything should be false to start off
            CheckBins(binsThatShouldBeTrue, sparseBins);

            // Calling this on a bool bin doesn't make the bool bin "truer". Just make sure it stays true with successive updates. Once it's true, it's true.
            var added = sparseBins.AddHit(5);

            Assert.True(added);
            binsThatShouldBeTrue.Add(5);
            CheckBins(binsThatShouldBeTrue, sparseBins);

            sparseBins.IncrementHit(5, 10);
            CheckBins(binsThatShouldBeTrue, sparseBins);

            sparseBins.IncrementHit(4, 5);
            binsThatShouldBeTrue.Add(4);
            CheckBins(binsThatShouldBeTrue, sparseBins);
        }