blob: 9dac18bd3dbba932754c751badd910a08c338230 [file] [log] [blame]
Joe Tsaid55639e2018-08-09 13:35:22 -07001// Copyright 2018 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package set
6
7import (
8 "math/rand"
9 "testing"
10)
11
12const maxLimit = 1024
13
14var toSet, toClear [maxLimit]bool
15
16func init() {
17 r := rand.New(rand.NewSource(0))
18 for i := 0; i < maxLimit; i++ {
19 toSet[i] = r.Intn(2) == 0
20 toClear[i] = r.Intn(2) == 0
21 }
22}
23
24func TestInts(t *testing.T) {
Joe Tsaiac503592019-04-03 15:16:47 -070025 ns := new(Ints)
26
27 // Check that set starts empty.
28 wantLen := 0
29 if ns.Len() != wantLen {
30 t.Errorf("init: Len() = %d, want %d", ns.Len(), wantLen)
31 }
32 for i := 0; i < maxLimit; i++ {
33 if ns.Has(uint64(i)) {
34 t.Errorf("init: Has(%d) = true, want false", i)
35 }
Joe Tsaid55639e2018-08-09 13:35:22 -070036 }
37
Joe Tsaiac503592019-04-03 15:16:47 -070038 // Set some numbers.
39 for i, b := range toSet[:maxLimit] {
40 if b {
41 ns.Set(uint64(i))
42 wantLen++
43 }
Joe Tsaid55639e2018-08-09 13:35:22 -070044 }
45
Joe Tsaiac503592019-04-03 15:16:47 -070046 // Check that integers were set.
47 if ns.Len() != wantLen {
48 t.Errorf("after Set: Len() = %d, want %d", ns.Len(), wantLen)
49 }
50 for i := 0; i < maxLimit; i++ {
51 if got := ns.Has(uint64(i)); got != toSet[i] {
52 t.Errorf("after Set: Has(%d) = %v, want %v", i, got, !got)
53 }
54 }
Joe Tsaid55639e2018-08-09 13:35:22 -070055
Joe Tsaiac503592019-04-03 15:16:47 -070056 // Clear some numbers.
57 for i, b := range toClear[:maxLimit] {
58 if b {
59 ns.Clear(uint64(i))
60 if toSet[i] {
61 wantLen--
Joe Tsaid55639e2018-08-09 13:35:22 -070062 }
Joe Tsaiac503592019-04-03 15:16:47 -070063 }
64 }
Joe Tsaid55639e2018-08-09 13:35:22 -070065
Joe Tsaiac503592019-04-03 15:16:47 -070066 // Check that integers were cleared.
67 if ns.Len() != wantLen {
68 t.Errorf("after Clear: Len() = %d, want %d", ns.Len(), wantLen)
69 }
70 for i := 0; i < maxLimit; i++ {
71 if got := ns.Has(uint64(i)); got != toSet[i] && !toClear[i] {
72 t.Errorf("after Clear: Has(%d) = %v, want %v", i, got, !got)
73 }
Joe Tsaid55639e2018-08-09 13:35:22 -070074 }
75}