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