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