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