go-ml.dev/pkg/base@v0.0.0-20200610162856-60c38abac71b/tests/util_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"go-ml.dev/pkg/base/fu"
     5  	"gotest.tools/assert"
     6  	"gotest.tools/assert/cmp"
     7  	"reflect"
     8  	"strings"
     9  	"testing"
    10  )
    11  
    12  func Test_BitsAppend(t *testing.T) {
    13  	b := fu.Bits{}
    14  	b = b.Append(fu.Bits{}, 0)
    15  	assert.Assert(t, b.Len() == 0)
    16  	q := b.Append(fu.FillBits(1), 33)
    17  	assert.Assert(t, q.Len() == 34)
    18  	assert.Assert(t, cmp.Panics(func() {
    19  		q.Append(fu.Bits{}, 33)
    20  	}))
    21  }
    22  
    23  func Test_Bits1(t *testing.T) {
    24  	b := fu.FillBits(31)
    25  	assert.Assert(t, b.Bit(0))
    26  	b.Set(0, false)
    27  	assert.Assert(t, !b.Bit(0))
    28  	assert.Assert(t, b.Len() == 31)
    29  	// b => 0111....[i=31]000...
    30  	assert.Assert(t, b.Repr() == "0"+strings.Repeat("1", 30))
    31  	for i := 1; i < 31; i++ {
    32  		assert.Assert(t, b.Bit(i))
    33  	}
    34  	assert.Assert(t, !b.Bit(31))
    35  	z := fu.FillBits(1)
    36  	c := z.Append(b, 31)
    37  	// c => 100....[31]0111...[i=62]000...
    38  	assert.Assert(t, c.Repr() == "1"+strings.Repeat("0", 30)+"0"+strings.Repeat("1", 30))
    39  	assert.Assert(t, c.Bit(0))
    40  	for i := 1; i < 31; i++ {
    41  		assert.Assert(t, !c.Bit(i))
    42  	}
    43  	assert.Assert(t, !c.Bit(31))
    44  	for i := 32; i < 62; i++ {
    45  		assert.Assert(t, c.Bit(i))
    46  	}
    47  	assert.Assert(t, !c.Bit(62))
    48  	assert.Assert(t, !c.Bit(63))
    49  	assert.Assert(t, !c.Bit(64))
    50  	assert.Assert(t, !c.Bit(1064))
    51  	c.Set(255, true)
    52  	assert.Assert(t,
    53  		c.Repr() == "1"+
    54  			strings.Repeat("0", 30)+
    55  			"0"+
    56  			strings.Repeat("1", 30)+
    57  			strings.Repeat("0", 255-62)+
    58  			"1")
    59  	assert.Assert(t, c.Len() == 256)
    60  	assert.Assert(t, !c.Bit(62))
    61  	assert.Assert(t, !c.Bit(63))
    62  	assert.Assert(t, !c.Bit(64))
    63  	assert.Assert(t, !c.Bit(1064))
    64  }
    65  
    66  func Test_Bits2(t *testing.T) {
    67  	b := fu.Bits{}
    68  	assert.Assert(t, b.Len() == 0)
    69  	b.Set(255, false)
    70  	assert.Assert(t, b.Len() == 0)
    71  	b.Set(128, true)
    72  	assert.Assert(t, b.Len() == 129)
    73  	b.Set(128, false)
    74  	assert.Assert(t, b.Len() == 0)
    75  	a := fu.Bits{}
    76  	a.Set(0, true)
    77  	a.Set(256, true)
    78  	a.Set(256, false)
    79  	assert.Assert(t, a.Len() == 1)
    80  }
    81  
    82  func Test_Bits3(t *testing.T) {
    83  	b := fu.FillBits(128)
    84  	assert.Assert(t, b.Len() == 128)
    85  	b = b.Append(fu.FillBits(120), 128)
    86  	assert.Assert(t, b.Len() == 128+120)
    87  	b = b.Append(fu.FillBits(67), 128+120)
    88  	assert.Assert(t, b.Len() == 128+120+67)
    89  }
    90  
    91  func Test_Bits4(t *testing.T) {
    92  	b := fu.Bits{}.Append(fu.FillBits(3), 127)
    93  	s := strings.Repeat("0", 127) + "111"
    94  	r := []uint8{}
    95  	for i := range s {
    96  		if i != 0 && i%8 == 0 {
    97  			r = append(r, uint8('.'))
    98  		}
    99  		r = append(r, s[i])
   100  	}
   101  	assert.Assert(t, string(r) == b.String())
   102  }
   103  
   104  func Test_Bits5(t *testing.T) {
   105  	b := fu.Bits{}.Append(fu.FillBits(3), 127)
   106  	b.Set(0, true)
   107  	q := b.Slice(1, 127)
   108  	assert.Assert(t, q.Len() == 0)
   109  	q = b.Slice(1, 128)
   110  	assert.Assert(t, q.Len() == 127)
   111  	q = b.Slice(0, 127)
   112  	assert.Assert(t, q.Len() == 1)
   113  }
   114  
   115  func Test_Convert(t *testing.T) {
   116  	q := []int{1, 2, 3}
   117  	assert.DeepEqual(t, fu.ConvertSlice(reflect.ValueOf(q), fu.Bits{}, fu.Int).Interface(), q)
   118  	assert.Assert(t, cmp.Panics(func() {
   119  		fu.ConvertSlice(reflect.ValueOf(q), fu.Bits{}, fu.Ts)
   120  	}))
   121  	assert.DeepEqual(t, fu.Convert(reflect.ValueOf(int(1)), false, fu.String).Interface(), "1")
   122  }