Skip to content

Commit f0212b6

Browse files
committed
add roaring bitmap examples
1 parent 5604195 commit f0212b6

File tree

4 files changed

+237
-0
lines changed

4 files changed

+237
-0
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"testing"
6+
7+
"github.com/RoaringBitmap/roaring"
8+
"github.com/bytedance/sonic"
9+
)
10+
11+
type Foo struct {
12+
N int `json:"num"`
13+
Name string `json:"name"`
14+
Addr string `json:"addr"`
15+
Age string `json:"age"`
16+
RB MyRB `json:"myrb"`
17+
}
18+
19+
func BenchmarkSonicJsonEncode(b *testing.B) {
20+
var f = Foo{
21+
N: 5,
22+
RB: MyRB{
23+
RB: roaring.NewBitmap(),
24+
},
25+
}
26+
27+
for i := 0; i < 3000; i++ {
28+
f.RB.RB.Add(uint32(i))
29+
}
30+
31+
b.ReportAllocs()
32+
b.ResetTimer()
33+
for i := 0; i < b.N; i++ {
34+
_, err := sonic.Marshal(&f)
35+
if err != nil {
36+
panic(err)
37+
}
38+
}
39+
}
40+
41+
func BenchmarkSonicJsonDecode(b *testing.B) {
42+
var f = Foo{
43+
N: 5,
44+
RB: MyRB{
45+
RB: roaring.NewBitmap(),
46+
},
47+
}
48+
49+
for i := 0; i < 3000; i++ {
50+
f.RB.RB.Add(uint32(i))
51+
}
52+
53+
buf, err := sonic.Marshal(&f)
54+
if err != nil {
55+
panic(err)
56+
}
57+
var f1 = Foo{
58+
RB: MyRB{
59+
RB: roaring.NewBitmap(),
60+
},
61+
}
62+
63+
b.ReportAllocs()
64+
b.ResetTimer()
65+
for i := 0; i < b.N; i++ {
66+
err = sonic.Unmarshal(buf, &f1)
67+
if err != nil {
68+
panic(err)
69+
}
70+
}
71+
}
72+
73+
func BenchmarkStdJsonEncode(b *testing.B) {
74+
var f = Foo{
75+
N: 5,
76+
RB: MyRB{
77+
RB: roaring.NewBitmap(),
78+
},
79+
}
80+
81+
for i := 0; i < 3000; i++ {
82+
f.RB.RB.Add(uint32(i))
83+
}
84+
85+
b.ReportAllocs()
86+
b.ResetTimer()
87+
for i := 0; i < b.N; i++ {
88+
_, err := json.Marshal(&f)
89+
if err != nil {
90+
panic(err)
91+
}
92+
}
93+
}
94+
95+
func BenchmarkStdJsonDecode(b *testing.B) {
96+
var f = Foo{
97+
N: 5,
98+
RB: MyRB{
99+
RB: roaring.NewBitmap(),
100+
},
101+
}
102+
103+
for i := 0; i < 3000; i++ {
104+
f.RB.RB.Add(uint32(i))
105+
}
106+
107+
buf, err := json.Marshal(&f)
108+
if err != nil {
109+
panic(err)
110+
}
111+
var f1 = Foo{
112+
RB: MyRB{
113+
RB: roaring.NewBitmap(),
114+
},
115+
}
116+
117+
b.ReportAllocs()
118+
b.ResetTimer()
119+
for i := 0; i < b.N; i++ {
120+
err = json.Unmarshal(buf, &f1)
121+
if err != nil {
122+
panic(err)
123+
}
124+
}
125+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/RoaringBitmap/roaring"
7+
"github.com/bytedance/sonic"
8+
)
9+
10+
type MyRB struct {
11+
RB *roaring.Bitmap
12+
}
13+
14+
func (rb *MyRB) MarshalJSON() ([]byte, error) {
15+
s, err := rb.RB.ToBase64()
16+
if err != nil {
17+
return nil, err
18+
}
19+
20+
r := fmt.Sprintf(`{"rb":"%s"}`, s)
21+
return []byte(r), nil
22+
}
23+
24+
func (rb *MyRB) UnmarshalJSON(data []byte) error {
25+
_, err := rb.RB.FromBase64(string(data[7 : len(data)-2]))
26+
if err != nil {
27+
return err
28+
}
29+
30+
return nil
31+
}
32+
33+
func main() {
34+
var myrb = MyRB{
35+
RB: roaring.NewBitmap(),
36+
}
37+
38+
for i := 0; i < 31; i++ {
39+
myrb.RB.Add(uint32(i))
40+
}
41+
fmt.Printf("the cardinality of origin bitmap = %d\n", myrb.RB.GetCardinality())
42+
43+
buf, err := sonic.Marshal(&myrb)
44+
if err != nil {
45+
panic(err)
46+
}
47+
48+
fmt.Printf("bitmap2json: %s\n", string(buf))
49+
50+
var myrb1 = MyRB{
51+
RB: roaring.NewBitmap(),
52+
}
53+
err = sonic.Unmarshal(buf, &myrb1)
54+
if err != nil {
55+
panic(err)
56+
}
57+
58+
fmt.Printf("after json2bitmap, the cardinality of new bitmap = %d\n", myrb1.RB.GetCardinality())
59+
}

roaring-bitmap-examples/go.mod

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module demo
2+
3+
go 1.19
4+
5+
require github.com/RoaringBitmap/roaring v1.2.1
6+
7+
require (
8+
github.com/bits-and-blooms/bitset v1.2.0 // indirect
9+
github.com/bytedance/sonic v1.7.0 // indirect
10+
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
11+
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
12+
github.com/mschoch/smat v0.2.0 // indirect
13+
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
14+
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
15+
)

roaring-bitmap-examples/go.sum

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
github.com/RoaringBitmap/roaring v1.2.1 h1:58/LJlg/81wfEHd5L9qsHduznOIhyv4qb1yWcSvVq9A=
2+
github.com/RoaringBitmap/roaring v1.2.1/go.mod h1:icnadbWcNyfEHlYdr+tDlOTih1Bf/h+rzPpv4sbomAA=
3+
github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
4+
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
5+
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
6+
github.com/bytedance/sonic v1.7.0 h1:P7DyGrkLbVDzcuqagPsSFnAwwljjhmB3qVF5wzmHOxE=
7+
github.com/bytedance/sonic v1.7.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
8+
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
9+
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
10+
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
11+
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
12+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
13+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
14+
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
15+
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
16+
github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM=
17+
github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw=
18+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
19+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
20+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
21+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
22+
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
23+
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
24+
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
25+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
26+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
27+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
28+
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
29+
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
30+
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
31+
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU=
32+
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
33+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
34+
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
35+
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
36+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
37+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
38+
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=

0 commit comments

Comments
 (0)