File: prioritybitmap_test.go

package info (click to toggle)
golang-github-anacrolix-missinggo 2.1.0-7
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 872 kB
  • sloc: makefile: 4
file content (72 lines) | stat: -rw-r--r-- 1,896 bytes parent folder | download | duplicates (2)
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
package prioritybitmap

import (
	"math"
	"testing"

	"github.com/stretchr/testify/assert"

	"github.com/anacrolix/missinggo/iter"
)

func TestEmpty(t *testing.T) {
	var pb PriorityBitmap
	it := iter.NewIterator(&pb)
	assert.Panics(t, func() { it.Value() })
	assert.False(t, it.Next())
}

func TestIntBounds(t *testing.T) {
	var pb PriorityBitmap
	assert.True(t, pb.Set(math.MaxInt32, math.MinInt32))
	assert.True(t, pb.Set(math.MinInt32, math.MaxInt32))
	assert.EqualValues(t, []interface{}{math.MaxInt32, math.MinInt32}, iter.IterableAsSlice(&pb))
}

func TestDistinct(t *testing.T) {
	var pb PriorityBitmap
	assert.True(t, pb.Set(0, 0))
	pb.Set(1, 1)
	assert.EqualValues(t, []interface{}{0, 1}, iter.IterableAsSlice(&pb))
	pb.Set(0, -1)
	assert.EqualValues(t, []interface{}{0, 1}, iter.IterableAsSlice(&pb))
	pb.Set(1, -2)
	assert.EqualValues(t, []interface{}{1, 0}, iter.IterableAsSlice(&pb))
}

func TestNextAfterIterFinished(t *testing.T) {
	var pb PriorityBitmap
	pb.Set(0, 0)
	it := iter.NewIterator(&pb)
	assert.True(t, it.Next())
	assert.False(t, it.Next())
	assert.False(t, it.Next())
}

func TestMutationResults(t *testing.T) {
	var pb PriorityBitmap
	assert.False(t, pb.Remove(1))
	assert.True(t, pb.Set(1, -1))
	assert.True(t, pb.Set(1, 2))
	assert.True(t, pb.Set(2, 2))
	assert.True(t, pb.Set(2, -1))
	assert.False(t, pb.Set(1, 2))
	assert.EqualValues(t, []interface{}{2, 1}, iter.IterableAsSlice(&pb))
	assert.True(t, pb.Set(1, -1))
	assert.False(t, pb.Remove(0))
	assert.True(t, pb.Remove(1))
	assert.False(t, pb.Remove(0))
	assert.False(t, pb.Remove(1))
	assert.True(t, pb.Remove(2))
	assert.False(t, pb.Remove(2))
	assert.False(t, pb.Remove(0))
	assert.True(t, pb.IsEmpty())
	assert.Len(t, iter.IterableAsSlice(&pb), 0)
}

func TestDoubleRemove(t *testing.T) {
	var pb PriorityBitmap
	assert.True(t, pb.Set(0, 0))
	assert.True(t, pb.Remove(0))
	assert.False(t, pb.Remove(0))
}