| 118 | } |
| 119 | |
| 120 | func TestBitMapStructure_Integration(t *testing.T) { |
| 121 | opts := config.DefaultOptions |
| 122 | dir, _ := os.MkdirTemp("", "TestBitMapStructure") |
| 123 | opts.DirPath = dir |
| 124 | bitmap, _ := NewBitMapStructure(opts) |
| 125 | defer bitmap.db.Clean() |
| 126 | |
| 127 | key := []byte("testKey") |
| 128 | |
| 129 | // Test with large amount of data |
| 130 | for i := uint(0); i < 10000; i++ { |
| 131 | err := bitmap.SetBit(string(key), i, i%2 == 0) |
| 132 | assert.Nil(t, err) |
| 133 | } |
| 134 | |
| 135 | for i := uint(0); i < 10000; i++ { |
| 136 | value, err := bitmap.GetBit(string(key), i) |
| 137 | assert.Nil(t, err) |
| 138 | assert.Equal(t, i%2 == 0, value) |
| 139 | } |
| 140 | |
| 141 | // Test boundary conditions |
| 142 | err := bitmap.SetBit(string(key), 0, true) |
| 143 | assert.Nil(t, err) |
| 144 | value, err := bitmap.GetBit(string(key), 0) |
| 145 | assert.Nil(t, err) |
| 146 | assert.True(t, value) |
| 147 | |
| 148 | err = bitmap.SetBit(string(key), 1000000, true) |
| 149 | assert.Nil(t, err) |
| 150 | value, err = bitmap.GetBit(string(key), 1000000) |
| 151 | assert.Nil(t, err) |
| 152 | assert.True(t, value) |
| 153 | |
| 154 | // Test error handling |
| 155 | err = bitmap.SetBit(string(key), 1000001, true) |
| 156 | assert.Nil(t, err) |
| 157 | value, err = bitmap.GetBit(string(key), 1000002) |
| 158 | assert.Nil(t, err) |
| 159 | assert.False(t, value) |
| 160 | |
| 161 | // Test BitOp |
| 162 | key1 := []byte("testKey1") |
| 163 | key2 := []byte("testKey2") |
| 164 | destKey := []byte("destKey") |
| 165 | |
| 166 | err = bitmap.SetBits(string(key1), 0, true, 1, false, 2, true) |
| 167 | assert.Nil(t, err) |
| 168 | err = bitmap.SetBits(string(key2), 0, false, 1, true, 2, false) |
| 169 | assert.Nil(t, err) |
| 170 | |
| 171 | err = bitmap.BitOp([]byte("AND"), string(destKey), string(key1), string(key2)) |
| 172 | assert.Nil(t, err) |
| 173 | values, err := bitmap.GetBits(string(destKey), 0, 1, 2) |
| 174 | assert.Nil(t, err) |
| 175 | assert.Equal(t, []bool{false, false, false}, values) |
| 176 | |
| 177 | err = bitmap.BitOp([]byte("OR"), string(destKey), string(key1), string(key2)) |