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