github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/network/bitvector/bitvector_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:43</date> 10 //</624450113418301440> 11 12 13 package bitvector 14 15 import "testing" 16 17 func TestBitvectorNew(t *testing.T) { 18 _, err := New(0) 19 if err != errInvalidLength { 20 t.Errorf("expected err %v, got %v", errInvalidLength, err) 21 } 22 23 _, err = NewFromBytes(nil, 0) 24 if err != errInvalidLength { 25 t.Errorf("expected err %v, got %v", errInvalidLength, err) 26 } 27 28 _, err = NewFromBytes([]byte{0}, 9) 29 if err != errInvalidLength { 30 t.Errorf("expected err %v, got %v", errInvalidLength, err) 31 } 32 33 _, err = NewFromBytes(make([]byte, 8), 8) 34 if err != nil { 35 t.Error(err) 36 } 37 } 38 39 func TestBitvectorGetSet(t *testing.T) { 40 for _, length := range []int{ 41 1, 42 2, 43 4, 44 8, 45 9, 46 15, 47 16, 48 } { 49 bv, err := New(length) 50 if err != nil { 51 t.Errorf("error for length %v: %v", length, err) 52 } 53 54 for i := 0; i < length; i++ { 55 if bv.Get(i) { 56 t.Errorf("expected false for element on index %v", i) 57 } 58 } 59 60 func() { 61 defer func() { 62 if err := recover(); err == nil { 63 t.Errorf("expecting panic") 64 } 65 }() 66 bv.Get(length + 8) 67 }() 68 69 for i := 0; i < length; i++ { 70 bv.Set(i, true) 71 for j := 0; j < length; j++ { 72 if j == i { 73 if !bv.Get(j) { 74 t.Errorf("element on index %v is not set to true", i) 75 } 76 } else { 77 if bv.Get(j) { 78 t.Errorf("element on index %v is not false", i) 79 } 80 } 81 } 82 83 bv.Set(i, false) 84 85 if bv.Get(i) { 86 t.Errorf("element on index %v is not set to false", i) 87 } 88 } 89 } 90 } 91 92 func TestBitvectorNewFromBytesGet(t *testing.T) { 93 bv, err := NewFromBytes([]byte{8}, 8) 94 if err != nil { 95 t.Error(err) 96 } 97 if !bv.Get(3) { 98 t.Fatalf("element 3 is not set to true: state %08b", bv.b[0]) 99 } 100 } 101