github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/swarm/network/bitvector/bitvector_test.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 // 10 // 11 // 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 25 package bitvector 26 27 import "testing" 28 29 func TestBitvectorNew(t *testing.T) { 30 _, err := New(0) 31 if err != errInvalidLength { 32 t.Errorf("expected err %v, got %v", errInvalidLength, err) 33 } 34 35 _, err = NewFromBytes(nil, 0) 36 if err != errInvalidLength { 37 t.Errorf("expected err %v, got %v", errInvalidLength, err) 38 } 39 40 _, err = NewFromBytes([]byte{0}, 9) 41 if err != errInvalidLength { 42 t.Errorf("expected err %v, got %v", errInvalidLength, err) 43 } 44 45 _, err = NewFromBytes(make([]byte, 8), 8) 46 if err != nil { 47 t.Error(err) 48 } 49 } 50 51 func TestBitvectorGetSet(t *testing.T) { 52 for _, length := range []int{ 53 1, 54 2, 55 4, 56 8, 57 9, 58 15, 59 16, 60 } { 61 bv, err := New(length) 62 if err != nil { 63 t.Errorf("error for length %v: %v", length, err) 64 } 65 66 for i := 0; i < length; i++ { 67 if bv.Get(i) { 68 t.Errorf("expected false for element on index %v", i) 69 } 70 } 71 72 func() { 73 defer func() { 74 if err := recover(); err == nil { 75 t.Errorf("expecting panic") 76 } 77 }() 78 bv.Get(length + 8) 79 }() 80 81 for i := 0; i < length; i++ { 82 bv.Set(i, true) 83 for j := 0; j < length; j++ { 84 if j == i { 85 if !bv.Get(j) { 86 t.Errorf("element on index %v is not set to true", i) 87 } 88 } else { 89 if bv.Get(j) { 90 t.Errorf("element on index %v is not false", i) 91 } 92 } 93 } 94 95 bv.Set(i, false) 96 97 if bv.Get(i) { 98 t.Errorf("element on index %v is not set to false", i) 99 } 100 } 101 } 102 } 103 104 func TestBitvectorNewFromBytesGet(t *testing.T) { 105 bv, err := NewFromBytes([]byte{8}, 8) 106 if err != nil { 107 t.Error(err) 108 } 109 if !bv.Get(3) { 110 t.Fatalf("element 3 is not set to true: state %08b", bv.b[0]) 111 } 112 }