gorgonia.org/tensor@v0.9.24/bitmap_test.go (about) 1 package tensor 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func TestBitMap(t *testing.T) { 10 assert := assert.New(t) 11 bm := NewBitMap(64) 12 assert.Equal(1, len(bm.n)) 13 14 track := uint64(0) 15 for i := 0; i < 64; i++ { 16 bm.Set(i) 17 track |= uint64(1) << uint64(i) 18 assert.Equal(track, bm.n[0]) 19 assert.Equal(true, bm.IsSet(i)) 20 if i < 63 { 21 assert.Equal(false, bm.IsSet(i+1)) 22 } else { 23 fails := func() { 24 bm.IsSet(i + 1) 25 } 26 assert.Panics(fails) 27 } 28 } 29 30 for i := 0; i < 64; i++ { 31 bm.Clear(i) 32 track &= ^(uint64(1) << uint64(i)) 33 assert.Equal(track, bm.n[0]) 34 assert.Equal(false, bm.IsSet(i)) 35 } 36 37 bm = NewBitMap(124) 38 assert.Equal(2, len(bm.n)) 39 40 track0 := uint64(0) 41 track1 := uint64(0) 42 for i := 0; i < 128; i++ { 43 if i < 124 { 44 bm.Set(i) 45 } else { 46 fails := func() { 47 bm.Set(i) 48 } 49 assert.Panics(fails) 50 } 51 if i < 64 { 52 track0 |= uint64(1) << uint64(i) 53 assert.Equal(track0, bm.n[0]) 54 assert.Equal(true, bm.IsSet(i)) 55 } else if i > 123 { 56 fails := func() { 57 bm.IsSet(i) 58 } 59 assert.Panics(fails) 60 } else { 61 track1 |= uint64(1) << uint64(i-64) 62 assert.Equal(track1, bm.n[1]) 63 assert.Equal(true, bm.IsSet(i)) 64 } 65 66 if i < 123 { 67 assert.Equal(false, bm.IsSet(i+1)) 68 } else { 69 fails := func() { 70 bm.IsSet(i + 1) 71 } 72 assert.Panics(fails) 73 } 74 } 75 76 for i := 48; i < 70; i++ { 77 bm.Clear(i) 78 } 79 80 for i := 48; i < 70; i++ { 81 assert.Equal(false, bm.IsSet(i)) 82 } 83 84 fails := func() { 85 bm.Clear(125) 86 } 87 assert.Panics(fails) 88 89 // idiots section! 90 bm = NewBitMap(3) 91 fails = func() { 92 bm.Set(-1) 93 } 94 assert.Panics(fails) 95 96 fails = func() { 97 bm.Set(3) 98 } 99 assert.Panics(fails) 100 101 }