From c67879f1cc03341eaeb89f9ee787f5e220f1e06d Mon Sep 17 00:00:00 2001 From: Fernando Zandona Date: Fri, 18 Jul 2014 18:30:21 -0300 Subject: [PATCH] Readme updates --- README.md | 38 +++++++++++++++++++++++++++++++++++++- example_goroar_test.go | 3 ++- example_large_test.go | 23 +++++++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 example_large_test.go diff --git a/README.md b/README.md index df93723..8867715 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ import ( func main() { rb1 := goroar.BitmapOf(1, 2, 3, 4, 5) rb2 := goroar.BitmapOf(2, 3, 4) - rb3 := goroar.BitmapOf(1) + rb3 := goroar.New() fmt.Println("Cardinality: ", rb1.Cardinality()) @@ -33,6 +33,7 @@ func main() { rb1.And(rb2) + rb3.Add(1) rb3.Add(5) rb3.Or(rb1) @@ -48,10 +49,45 @@ func main() { Documentation of the latest code in master is available at [godoc](http://godoc.org/github.com/fzandona/goroar). +Compression +----------- + +`RoaringBitmap.Stats()` will print some bitmap stats, mostly for debugging purposes, but it also gives an idea of the bitmap's compression rate. + +```go +func Example_stats() { + rb1 := goroar.New() + rb2 := goroar.New() + + for i := 0; i < 1000000; i += 2 { + rb1.Add(uint32(i)) + rb2.Add(uint32(i + 1)) + } + + rb1.Or(rb2) + rb1.Stats() +} +``` + +The code above outputs: + +```text +* Roaring Bitmap Stats * +Cardinality: 1000000 +Size uncompressed: 4000000 bytes +Size compressed: 131532 bytes +Number of containers: 16 + 0 ArrayContainers + 16 BitmapContainers +Average entries per ArrayContainer: -- +Max entries per ArrayContainer: -- +``` + TODO ---- * Immutable bitwise operations +* Flip, clone, clear operations * Serialization * More idiomatic Go * Test re-factoring & coverage diff --git a/example_goroar_test.go b/example_goroar_test.go index 4293939..cc1744b 100644 --- a/example_goroar_test.go +++ b/example_goroar_test.go @@ -10,7 +10,7 @@ import ( func Example_goroar() { rb1 := goroar.BitmapOf(1, 2, 3, 4, 5) rb2 := goroar.BitmapOf(2, 3, 4) - rb3 := goroar.BitmapOf(1) + rb3 := goroar.New() fmt.Println("Cardinality: ", rb1.Cardinality()) @@ -18,6 +18,7 @@ func Example_goroar() { rb1.And(rb2) + rb3.Add(1) rb3.Add(5) rb3.Or(rb1) diff --git a/example_large_test.go b/example_large_test.go new file mode 100644 index 0000000..5f76ec6 --- /dev/null +++ b/example_large_test.go @@ -0,0 +1,23 @@ +package goroar_test + +import ( + "fmt" + + "github.com/fzandona/goroar" +) + +// ExampleLarge demonstrates how to use the goroar library. +func Example_large() { + rb1 := goroar.New() + rb2 := goroar.New() + + for i := 0; i < 1000000; i += 2 { + rb1.Add(uint32(i)) + rb2.Add(uint32(i + 1)) + } + fmt.Println(rb1.Cardinality(), rb2.Cardinality()) + + rb1.Or(rb2) + + rb1.Stats() +}