// some extra tests func TestBitmapExtraCOW(t *testing.T) { for N := uint32(1); N <= 65536; N *= 2 { Convey("extra tests"+strconv.Itoa(int(N)), t, func() { for gap := uint32(1); gap <= 65536; gap *= 2 { bs1 := bitset.New(0) rb1 := NewBitmap() rb1.SetCopyOnWrite(true) rb1.SetCopyOnWrite(true) for x := uint32(0); x <= N; x += gap { bs1.Set(uint(x)) rb1.Add(x) } So(bs1.Count(), ShouldEqual, rb1.GetCardinality()) So(equalsBitSet(bs1, rb1), ShouldEqual, true) for offset := uint32(1); offset <= gap; offset *= 2 { bs2 := bitset.New(0) rb2 := NewBitmap() rb2.SetCopyOnWrite(true) for x := uint32(0); x <= N; x += gap { bs2.Set(uint(x + offset)) rb2.Add(x + offset) } So(bs2.Count(), ShouldEqual, rb2.GetCardinality()) So(equalsBitSet(bs2, rb2), ShouldEqual, true) clonebs1 := bs1.Clone() clonebs1.InPlaceIntersection(bs2) if !equalsBitSet(clonebs1, And(rb1, rb2)) { t := rb1.Clone() t.And(rb2) So(equalsBitSet(clonebs1, t), ShouldEqual, true) } // testing OR clonebs1 = bs1.Clone() clonebs1.InPlaceUnion(bs2) So(equalsBitSet(clonebs1, Or(rb1, rb2)), ShouldEqual, true) // testing XOR clonebs1 = bs1.Clone() clonebs1.InPlaceSymmetricDifference(bs2) So(equalsBitSet(clonebs1, Xor(rb1, rb2)), ShouldEqual, true) //testing NOTAND clonebs1 = bs1.Clone() clonebs1.InPlaceDifference(bs2) So(equalsBitSet(clonebs1, AndNot(rb1, rb2)), ShouldEqual, true) } } }) } }