xref: /aosp_15_r20/external/golang-protobuf/internal/set/ints_test.go (revision 1c12ee1efe575feb122dbf939ff15148a3b3e8f2)
1*1c12ee1eSDan Willemsen// Copyright 2018 The Go Authors. All rights reserved.
2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style
3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file.
4*1c12ee1eSDan Willemsen
5*1c12ee1eSDan Willemsenpackage set
6*1c12ee1eSDan Willemsen
7*1c12ee1eSDan Willemsenimport (
8*1c12ee1eSDan Willemsen	"math/rand"
9*1c12ee1eSDan Willemsen	"testing"
10*1c12ee1eSDan Willemsen)
11*1c12ee1eSDan Willemsen
12*1c12ee1eSDan Willemsenconst maxLimit = 1024
13*1c12ee1eSDan Willemsen
14*1c12ee1eSDan Willemsenvar toSet, toClear [maxLimit]bool
15*1c12ee1eSDan Willemsen
16*1c12ee1eSDan Willemsenfunc init() {
17*1c12ee1eSDan Willemsen	r := rand.New(rand.NewSource(0))
18*1c12ee1eSDan Willemsen	for i := 0; i < maxLimit; i++ {
19*1c12ee1eSDan Willemsen		toSet[i] = r.Intn(2) == 0
20*1c12ee1eSDan Willemsen		toClear[i] = r.Intn(2) == 0
21*1c12ee1eSDan Willemsen	}
22*1c12ee1eSDan Willemsen}
23*1c12ee1eSDan Willemsen
24*1c12ee1eSDan Willemsenfunc TestInts(t *testing.T) {
25*1c12ee1eSDan Willemsen	ns := new(Ints)
26*1c12ee1eSDan Willemsen
27*1c12ee1eSDan Willemsen	// Check that set starts empty.
28*1c12ee1eSDan Willemsen	wantLen := 0
29*1c12ee1eSDan Willemsen	if ns.Len() != wantLen {
30*1c12ee1eSDan Willemsen		t.Errorf("init: Len() = %d, want %d", ns.Len(), wantLen)
31*1c12ee1eSDan Willemsen	}
32*1c12ee1eSDan Willemsen	for i := 0; i < maxLimit; i++ {
33*1c12ee1eSDan Willemsen		if ns.Has(uint64(i)) {
34*1c12ee1eSDan Willemsen			t.Errorf("init: Has(%d) = true, want false", i)
35*1c12ee1eSDan Willemsen		}
36*1c12ee1eSDan Willemsen	}
37*1c12ee1eSDan Willemsen
38*1c12ee1eSDan Willemsen	// Set some numbers.
39*1c12ee1eSDan Willemsen	for i, b := range toSet[:maxLimit] {
40*1c12ee1eSDan Willemsen		if b {
41*1c12ee1eSDan Willemsen			ns.Set(uint64(i))
42*1c12ee1eSDan Willemsen			wantLen++
43*1c12ee1eSDan Willemsen		}
44*1c12ee1eSDan Willemsen	}
45*1c12ee1eSDan Willemsen
46*1c12ee1eSDan Willemsen	// Check that integers were set.
47*1c12ee1eSDan Willemsen	if ns.Len() != wantLen {
48*1c12ee1eSDan Willemsen		t.Errorf("after Set: Len() = %d, want %d", ns.Len(), wantLen)
49*1c12ee1eSDan Willemsen	}
50*1c12ee1eSDan Willemsen	for i := 0; i < maxLimit; i++ {
51*1c12ee1eSDan Willemsen		if got := ns.Has(uint64(i)); got != toSet[i] {
52*1c12ee1eSDan Willemsen			t.Errorf("after Set: Has(%d) = %v, want %v", i, got, !got)
53*1c12ee1eSDan Willemsen		}
54*1c12ee1eSDan Willemsen	}
55*1c12ee1eSDan Willemsen
56*1c12ee1eSDan Willemsen	// Clear some numbers.
57*1c12ee1eSDan Willemsen	for i, b := range toClear[:maxLimit] {
58*1c12ee1eSDan Willemsen		if b {
59*1c12ee1eSDan Willemsen			ns.Clear(uint64(i))
60*1c12ee1eSDan Willemsen			if toSet[i] {
61*1c12ee1eSDan Willemsen				wantLen--
62*1c12ee1eSDan Willemsen			}
63*1c12ee1eSDan Willemsen		}
64*1c12ee1eSDan Willemsen	}
65*1c12ee1eSDan Willemsen
66*1c12ee1eSDan Willemsen	// Check that integers were cleared.
67*1c12ee1eSDan Willemsen	if ns.Len() != wantLen {
68*1c12ee1eSDan Willemsen		t.Errorf("after Clear: Len() = %d, want %d", ns.Len(), wantLen)
69*1c12ee1eSDan Willemsen	}
70*1c12ee1eSDan Willemsen	for i := 0; i < maxLimit; i++ {
71*1c12ee1eSDan Willemsen		if got := ns.Has(uint64(i)); got != toSet[i] && !toClear[i] {
72*1c12ee1eSDan Willemsen			t.Errorf("after Clear: Has(%d) = %v, want %v", i, got, !got)
73*1c12ee1eSDan Willemsen		}
74*1c12ee1eSDan Willemsen	}
75*1c12ee1eSDan Willemsen}
76