github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/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 12:09:47</date> 10 //</624342672005402624> 11 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 // 25 // 26 // 27 28 package bitvector 29 30 import "testing" 31 32 func TestBitvectorNew(t *testing.T) { 33 _, err := New(0) 34 if err != errInvalidLength { 35 t.Errorf("expected err %v, got %v", errInvalidLength, err) 36 } 37 38 _, err = NewFromBytes(nil, 0) 39 if err != errInvalidLength { 40 t.Errorf("expected err %v, got %v", errInvalidLength, err) 41 } 42 43 _, err = NewFromBytes([]byte{0}, 9) 44 if err != errInvalidLength { 45 t.Errorf("expected err %v, got %v", errInvalidLength, err) 46 } 47 48 _, err = NewFromBytes(make([]byte, 8), 8) 49 if err != nil { 50 t.Error(err) 51 } 52 } 53 54 func TestBitvectorGetSet(t *testing.T) { 55 for _, length := range []int{ 56 1, 57 2, 58 4, 59 8, 60 9, 61 15, 62 16, 63 } { 64 bv, err := New(length) 65 if err != nil { 66 t.Errorf("error for length %v: %v", length, err) 67 } 68 69 for i := 0; i < length; i++ { 70 if bv.Get(i) { 71 t.Errorf("expected false for element on index %v", i) 72 } 73 } 74 75 func() { 76 defer func() { 77 if err := recover(); err == nil { 78 t.Errorf("expecting panic") 79 } 80 }() 81 bv.Get(length + 8) 82 }() 83 84 for i := 0; i < length; i++ { 85 bv.Set(i, true) 86 for j := 0; j < length; j++ { 87 if j == i { 88 if !bv.Get(j) { 89 t.Errorf("element on index %v is not set to true", i) 90 } 91 } else { 92 if bv.Get(j) { 93 t.Errorf("element on index %v is not false", i) 94 } 95 } 96 } 97 98 bv.Set(i, false) 99 100 if bv.Get(i) { 101 t.Errorf("element on index %v is not set to false", i) 102 } 103 } 104 } 105 } 106 107 func TestBitvectorNewFromBytesGet(t *testing.T) { 108 bv, err := NewFromBytes([]byte{8}, 8) 109 if err != nil { 110 t.Error(err) 111 } 112 if !bv.Get(3) { 113 t.Fatalf("element 3 is not set to true: state %08b", bv.b[0]) 114 } 115 } 116