func TestIntersectionWith(t *testing.T) { // Edge cases: the pairs (1,1), (1000,2000), (8000,4000) // exercise the <, >, == cases in IntersectionWith that the // TestSetOperations data is too dense to cover. var X, Y intsets.Sparse X.Insert(1) X.Insert(1000) X.Insert(8000) Y.Insert(1) Y.Insert(2000) Y.Insert(4000) X.IntersectionWith(&Y) if got, want := X.String(), "{1}"; got != want { t.Errorf("IntersectionWith: got %s, want %s", got, want) } }
func TestIntersects(t *testing.T) { prng := rand.New(rand.NewSource(0)) for i := uint(0); i < 12; i++ { X, Y := randomPset(prng, 1<<i), randomPset(prng, 1<<i) x, y := &X.bits, &Y.bits // test the slow way var z intsets.Sparse z.Copy(x) z.IntersectionWith(y) if got, want := x.Intersects(y), !z.IsEmpty(); got != want { t.Errorf("Intersects: got %v, want %v", got, want) } // make it false a := x.AppendTo(nil) for _, v := range a { y.Remove(v) } if got, want := x.Intersects(y), false; got != want { t.Errorf("Intersects: got %v, want %v", got, want) } // make it true if x.IsEmpty() { continue } i := prng.Intn(len(a)) y.Insert(a[i]) if got, want := x.Intersects(y), true; got != want { t.Errorf("Intersects: got %v, want %v", got, want) } } }