func TestIterEmpty(t *testing.T) {
	om := New(nil)
	it := itertools.NewIterator(om)
	assert.Panics(t, func() { it.Value() })
	assert.False(t, it.Next())
	it.Stop()
}
func TestNextAfterIterFinished(t *testing.T) {
	var pb PriorityBitmap
	pb.Set(0, 0)
	it := itertools.NewIterator(&pb)
	assert.True(t, it.Next())
	assert.False(t, it.Next())
	assert.False(t, it.Next())
}
func TestEmptyBitmap(t *testing.T) {
	var bm Bitmap
	assert.False(t, bm.Contains(0))
	bm.Remove(0)
	it := itertools.NewIterator(&bm)
	assert.Panics(t, func() { it.Value() })
	assert.False(t, it.Next())
}
func TestRemoveWhileIterating(t *testing.T) {
	var pb PriorityBitmap
	pb.Set(0, 0)
	pb.Set(1, 1)
	it := itertools.NewIterator(&pb)
	go it.Stop()
	pb.Remove(0)
	time.Sleep(time.Millisecond)
	// This should return an empty list, as the iterator was stopped before
	// Next was called.
	assert.EqualValues(t, []interface{}(nil), itertools.IteratorAsSlice(it))
}
func TestEmpty(t *testing.T) {
	var pb PriorityBitmap
	it := itertools.NewIterator(&pb)
	assert.Panics(t, func() { it.Value() })
	assert.False(t, it.Next())
}