github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/common/bitutil/compress_fuzz.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:33</date> 10 //</624450072909713408> 11 12 13 //+构建GouuZZ 14 15 package bitutil 16 17 import "bytes" 18 19 //Fuzz实现了Go-Fuzz引信方法来测试各种编码方法 20 //调用。 21 func Fuzz(data []byte) int { 22 if len(data) == 0 { 23 return -1 24 } 25 if data[0]%2 == 0 { 26 return fuzzEncode(data[1:]) 27 } 28 return fuzzDecode(data[1:]) 29 } 30 31 //Fuzzencode实现了一种go-fuzz引信方法来测试位集编码和 32 //解码算法。 33 func fuzzEncode(data []byte) int { 34 proc, _ := bitsetDecodeBytes(bitsetEncodeBytes(data), len(data)) 35 if !bytes.Equal(data, proc) { 36 panic("content mismatch") 37 } 38 return 0 39 } 40 41 //fuzzdecode实现了一种go-fuzz引信方法来测试位解码和 42 //重新编码算法。 43 func fuzzDecode(data []byte) int { 44 blob, err := bitsetDecodeBytes(data, 1024) 45 if err != nil { 46 return 0 47 } 48 if comp := bitsetEncodeBytes(blob); !bytes.Equal(comp, data) { 49 panic("content mismatch") 50 } 51 return 0 52 } 53