TestCardinalityInRangeMultiContainer tests ranges spanning multiple containers (high 16 bits).
(t *testing.T)
| 1106 | |
| 1107 | // TestCardinalityInRangeMultiContainer tests ranges spanning multiple containers (high 16 bits). |
| 1108 | func TestCardinalityInRangeMultiContainer(t *testing.T) { |
| 1109 | rb := NewBitmap() |
| 1110 | // Put values in 3 different containers: |
| 1111 | // Container 0 (key=0): values 0..99 |
| 1112 | for i := uint32(0); i < 100; i++ { |
| 1113 | rb.Add(i) |
| 1114 | } |
| 1115 | // Container 1 (key=1): values 65536..65635 |
| 1116 | for i := uint32(0); i < 100; i++ { |
| 1117 | rb.Add(65536 + i) |
| 1118 | } |
| 1119 | // Container 3 (key=3): values 196608..196707 (skip container 2) |
| 1120 | for i := uint32(0); i < 100; i++ { |
| 1121 | rb.Add(196608 + i) |
| 1122 | } |
| 1123 | |
| 1124 | // Entire range |
| 1125 | assert.EqualValues(t, 300, rb.CardinalityInRange(0, 200000)) |
| 1126 | // Just container 0 |
| 1127 | assert.EqualValues(t, 100, rb.CardinalityInRange(0, 65536)) |
| 1128 | // Just container 1 |
| 1129 | assert.EqualValues(t, 100, rb.CardinalityInRange(65536, 131072)) |
| 1130 | // Containers 0 and 1 |
| 1131 | assert.EqualValues(t, 200, rb.CardinalityInRange(0, 131072)) |
| 1132 | // Partial container 0 + full container 1 + partial container 3 |
| 1133 | assert.EqualValues(t, 50+100+50, rb.CardinalityInRange(50, 196658)) |
| 1134 | // Range in the gap (container 2 doesn't exist) |
| 1135 | assert.EqualValues(t, 0, rb.CardinalityInRange(131072, 196608)) |
| 1136 | // Range spanning the gap |
| 1137 | assert.EqualValues(t, 100+100, rb.CardinalityInRange(65536, 196708)) |
| 1138 | } |
| 1139 | |
| 1140 | // TestCardinalityInRangeRunOptimized tests CardinalityInRange with run-compressed containers. |
| 1141 | func TestCardinalityInRangeRunOptimized(t *testing.T) { |
nothing calls this directly
no test coverage detected
searching dependent graphs…