github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/core/bloombits/generator_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:35</date>
    10  //</624450078152593408>
    11  
    12  
    13  package bloombits
    14  
    15  import (
    16  	"bytes"
    17  	"math/rand"
    18  	"testing"
    19  
    20  	"github.com/ethereum/go-ethereum/core/types"
    21  )
    22  
    23  //测试成批的钢坯钻头是否从输入钢坯正确旋转
    24  //过滤器。
    25  func TestGenerator(t *testing.T) {
    26  //生成输入和旋转输出
    27  	var input, output [types.BloomBitLength][types.BloomByteLength]byte
    28  
    29  	for i := 0; i < types.BloomBitLength; i++ {
    30  		for j := 0; j < types.BloomBitLength; j++ {
    31  			bit := byte(rand.Int() % 2)
    32  
    33  			input[i][j/8] |= bit << byte(7-j%8)
    34  			output[types.BloomBitLength-1-j][i/8] |= bit << byte(7-i%8)
    35  		}
    36  	}
    37  //通过生成器压缩输入并验证结果
    38  	gen, err := NewGenerator(types.BloomBitLength)
    39  	if err != nil {
    40  		t.Fatalf("failed to create bloombit generator: %v", err)
    41  	}
    42  	for i, bloom := range input {
    43  		if err := gen.AddBloom(uint(i), bloom); err != nil {
    44  			t.Fatalf("bloom %d: failed to add: %v", i, err)
    45  		}
    46  	}
    47  	for i, want := range output {
    48  		have, err := gen.Bitset(uint(i))
    49  		if err != nil {
    50  			t.Fatalf("output %d: failed to retrieve bits: %v", i, err)
    51  		}
    52  		if !bytes.Equal(have, want[:]) {
    53  			t.Errorf("output %d: bit vector mismatch have %x, want %x", i, have, want)
    54  		}
    55  	}
    56  }
    57