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 }