Skip to content

Commit a885742

Browse files
committed
repro
1 parent e2c9e47 commit a885742

File tree

2 files changed

+245
-0
lines changed

2 files changed

+245
-0
lines changed

issue_test.go

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package roaring
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"os"
7+
"testing"
8+
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
type bmRec struct {
13+
Shard int `json:"shard"`
14+
Bucket int `json:"bucket"`
15+
Sid string `json:"sid"`
16+
D string `json:"d"`
17+
ChunkSum string `json:"chunk_sum"`
18+
OriginalSum string `json:"original_sum"`
19+
}
20+
21+
func readAndJoinBm(t *testing.T, filename string, funcOR func(bms ...*Bitmap) *Bitmap) *Bitmap {
22+
file, err := os.ReadFile(filename)
23+
require.NoError(t, err)
24+
25+
var recs []bmRec
26+
err = json.Unmarshal(file, &recs)
27+
require.NoError(t, err)
28+
29+
chunks := make([]*Bitmap, 0)
30+
31+
for _, rec := range recs {
32+
rb := NewBitmap()
33+
_, err = rb.FromBase64(rec.D)
34+
require.NoErrorf(t, err, "rb.FromBase64, sid: %v", rec.Sid)
35+
36+
err = rb.Validate()
37+
if err != nil {
38+
t.Logf(
39+
"readAndJoinBm(%v): rb.Validate(%v); card: %v; %v\n",
40+
filename, rec.Sid, rb.GetCardinality(), err,
41+
)
42+
} else {
43+
t.Logf(
44+
"readAndJoinBm(%v): rb.Validate(%v); card: %v; %v\n",
45+
filename, rec.Sid, rb.GetCardinality(), "valid",
46+
)
47+
}
48+
49+
chunks = append(chunks, rb)
50+
}
51+
52+
total := funcOR(chunks...)
53+
err = total.Validate()
54+
if err != nil {
55+
t.Logf("readAndJoinBm(%v): total.Validate(): %v\n", filename, err)
56+
}
57+
58+
t.Logf("card(%v): %v\n", filename, total.GetCardinality())
59+
b, err := total.ToBytes()
60+
if err != nil {
61+
t.Error("readAndJoinBm : ToBytes error", err.Error())
62+
} else {
63+
testrb := NewBitmap()
64+
err = testrb.UnmarshalBinary(b)
65+
require.NoErrorf(t, err, "readAndJoinBm: UnmarshalBinary")
66+
}
67+
68+
return total
69+
}
70+
71+
const (
72+
bmVersionFrom213 = "mcp-ss-bitmaps_31_10_25_16_59.json"
73+
)
74+
75+
func TestReadBitmapFromRoaring_v2_13_0_And_MakeOperationBy_v2_6_0(t *testing.T) {
76+
// read chunks for join to one bitmap via FastOr
77+
rb := readAndJoinBm(t, bmVersionFrom213, FastOr) // use HeapOr for fixed test. What kind problem with FastOr?
78+
79+
// init masks
80+
masks := make([]*Bitmap, 0, 30)
81+
for i := 0; i < 30; i++ {
82+
bm := NewBitmap()
83+
bm.AddRange(uint64((10_000_000*i)+1), uint64(10_000_000*(i+1)))
84+
masks = append(masks, bm)
85+
}
86+
87+
chunks := make([]*Bitmap, 0)
88+
// split by chunk
89+
for _, mask := range masks {
90+
chunkBm := mask.Clone()
91+
chunkBm.And(rb)
92+
93+
if !chunkBm.IsEmpty() {
94+
chunks = append(chunks, chunkBm)
95+
}
96+
}
97+
98+
// Check validate and UnmarshalBinary
99+
for i, chunk := range chunks {
100+
// Validate ?
101+
err := chunk.Validate()
102+
if err != nil {
103+
fmt.Printf(
104+
"readAndJoinBm(%v): rb.Validate(%v); card: %v; %v\n",
105+
bmVersionFrom213, i, chunk.GetCardinality(), err,
106+
)
107+
} else {
108+
fmt.Printf(
109+
"readAndJoinBm(%v): rb.Validate(%v); card: %v; %v\n",
110+
bmVersionFrom213, i, rb.GetCardinality(), "valid",
111+
)
112+
}
113+
114+
// Binary OK ?
115+
b, err := chunk.ToBytes()
116+
require.NoError(t, err, "chunksToBytes: conver", i)
117+
testrb := NewBitmap()
118+
err = testrb.UnmarshalBinary(b)
119+
// !!! TEST FAIL HERE !!!
120+
require.NoErrorf(t, err, "chunksToBytes: UnmarshalBinary, %s: %v", bmVersionFrom213, i)
121+
}
122+
123+
}

mcp-ss-bitmaps_31_10_25_16_59.json

Lines changed: 122 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)