package bits import ( "strconv" "testing" ) var sizes []uint = []uint{0, 31, 32, 33, 61, 63, 64, 127, 128, 129} func TestBitSize(t *testing.T) { for _, size := range sizes { v := NewBit(size) if v.Len() < size || v.Len() > size+strconv.IntSize { t.Error("Invalid length", v.Len(), "expected", size) } } } func TestBitEmpty(t *testing.T) { var size uint = 128 v := NewBit(size) // Check if it is empty by default for i := uint(0); i < size; i++ { if v.Peek(i) { t.Error("Invalid raised bit at", i) } } } func TestBitBasic(t *testing.T) { var size uint = 128 v := NewBit(size) // Raise and lower each position explicitly for i := uint(0); i < size; i++ { v.Poke(i, true) if !v.Peek(i) { t.Error("Invalid lowered bit at", i) } v.Poke(i, false) if v.Peek(i) { t.Error("Invalid raised bit at", i) } } } func TestBitFlip(t *testing.T) { var size uint = 128 v := NewBit(size) // Raise and lower each position by flipping for i := uint(0); i < size; i++ { v.Flip(i) if !v.Peek(i) { t.Error("Invalid lowered bit at", i) } v.Flip(i) if v.Peek(i) { t.Error("Invalid raised bit at", i) } } } func TestBoolSize(t *testing.T) { for _, size := range sizes { v := NewBool(size) if v.Len() != size { t.Error("Invalid length", v.Len(), "expected", size) } } } func TestBoolEmpty(t *testing.T) { var size uint = 128 v := NewBool(size) // Check if it is empty by default for i := uint(0); i < size; i++ { if v.Peek(i) { t.Error("Invalid raised bit at", i) } } } func TestBoolBasic(t *testing.T) { var size uint = 128 v := NewBool(size) // Raise and lower each position explicitly for i := uint(0); i < size; i++ { v.Poke(i, true) if !v.Peek(i) { t.Error("Invalid lowered bit at", i) } v.Poke(i, false) if v.Peek(i) { t.Error("Invalid raised bit at", i) } } } func TestBoolFlip(t *testing.T) { var size uint = 128 v := NewBool(size) // Raise and lower each position by flipping for i := uint(0); i < size; i++ { v.Flip(i) if !v.Peek(i) { t.Error("Invalid lowered bit at", i) } v.Flip(i) if v.Peek(i) { t.Error("Invalid raised bit at", i) } } }