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  }