diff --git a/BitFaster.Caching.UnitTests/Lfu/CmSketchTests.cs b/BitFaster.Caching.UnitTests/Lfu/CmSketchTests.cs index 54e29b6c..761b40d9 100644 --- a/BitFaster.Caching.UnitTests/Lfu/CmSketchTests.cs +++ b/BitFaster.Caching.UnitTests/Lfu/CmSketchTests.cs @@ -76,6 +76,8 @@ public void WhenSampleSizeExceededCountIsReset() if (sketch.Size != i) { + i.Should().NotBe(1, "sketch should not be reset on the first iteration. Resize logic is broken"); + reset = true; break; } diff --git a/BitFaster.Caching/Lfu/CmSketch.cs b/BitFaster.Caching/Lfu/CmSketch.cs index f0ea491d..b0785be5 100644 --- a/BitFaster.Caching/Lfu/CmSketch.cs +++ b/BitFaster.Caching/Lfu/CmSketch.cs @@ -257,7 +257,8 @@ private unsafe void IncrementAvx(T value) *(tablePtr + indexes.GetElement(2)) += inc.GetElement(2); *(tablePtr + indexes.GetElement(3)) += inc.GetElement(3); - bool wasInc = Avx2.MoveMask(masked.AsByte()) != 0; // _mm256_movemask_epi8 + Vector256 result = Avx2.CompareEqual(masked.AsByte(), Vector256.Create(0).AsByte()); + bool wasInc = Avx2.MoveMask(result.AsByte()) == unchecked((int)(0b1111_1111_1111_1111_1111_1111_1111_1111)); if (wasInc && (++size == sampleSize)) {