File: bitmap_test.go

package info (click to toggle)
golang-github-gorgonia-tensor 0.9.24-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,696 kB
  • sloc: sh: 18; asm: 18; makefile: 8
file content (101 lines) | stat: -rw-r--r-- 1,658 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package tensor

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestBitMap(t *testing.T) {
	assert := assert.New(t)
	bm := NewBitMap(64)
	assert.Equal(1, len(bm.n))

	track := uint64(0)
	for i := 0; i < 64; i++ {
		bm.Set(i)
		track |= uint64(1) << uint64(i)
		assert.Equal(track, bm.n[0])
		assert.Equal(true, bm.IsSet(i))
		if i < 63 {
			assert.Equal(false, bm.IsSet(i+1))
		} else {
			fails := func() {
				bm.IsSet(i + 1)
			}
			assert.Panics(fails)
		}
	}

	for i := 0; i < 64; i++ {
		bm.Clear(i)
		track &= ^(uint64(1) << uint64(i))
		assert.Equal(track, bm.n[0])
		assert.Equal(false, bm.IsSet(i))
	}

	bm = NewBitMap(124)
	assert.Equal(2, len(bm.n))

	track0 := uint64(0)
	track1 := uint64(0)
	for i := 0; i < 128; i++ {
		if i < 124 {
			bm.Set(i)
		} else {
			fails := func() {
				bm.Set(i)
			}
			assert.Panics(fails)
		}
		if i < 64 {
			track0 |= uint64(1) << uint64(i)
			assert.Equal(track0, bm.n[0])
			assert.Equal(true, bm.IsSet(i))
		} else if i > 123 {
			fails := func() {
				bm.IsSet(i)
			}
			assert.Panics(fails)
		} else {
			track1 |= uint64(1) << uint64(i-64)
			assert.Equal(track1, bm.n[1])
			assert.Equal(true, bm.IsSet(i))
		}

		if i < 123 {
			assert.Equal(false, bm.IsSet(i+1))
		} else {
			fails := func() {
				bm.IsSet(i + 1)
			}
			assert.Panics(fails)
		}
	}

	for i := 48; i < 70; i++ {
		bm.Clear(i)
	}

	for i := 48; i < 70; i++ {
		assert.Equal(false, bm.IsSet(i))
	}

	fails := func() {
		bm.Clear(125)
	}
	assert.Panics(fails)

	// idiots section!
	bm = NewBitMap(3)
	fails = func() {
		bm.Set(-1)
	}
	assert.Panics(fails)

	fails = func() {
		bm.Set(3)
	}
	assert.Panics(fails)

}