diff options
Diffstat (limited to 'blockpool/test/hash_pool.go')
-rw-r--r-- | blockpool/test/hash_pool.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/blockpool/test/hash_pool.go b/blockpool/test/hash_pool.go new file mode 100644 index 000000000..4e0332d7d --- /dev/null +++ b/blockpool/test/hash_pool.go @@ -0,0 +1,57 @@ +package test + +import ( + "sync" + + "github.com/ethereum/go-ethereum/crypto" +) + +// test helpers +// TODO: move into common test helper package (see p2p/crypto etc.) + +func NewHashPool() *TestHashPool { + return &TestHashPool{intToHash: make(intToHash), hashToInt: make(hashToInt)} +} + +type intToHash map[int][]byte + +type hashToInt map[string]int + +// hashPool is a test helper, that allows random hashes to be referred to by integers +type TestHashPool struct { + intToHash + hashToInt + lock sync.Mutex +} + +func newHash(i int) []byte { + return crypto.Sha3([]byte(string(i))) +} + +func (self *TestHashPool) IndexesToHashes(indexes []int) (hashes [][]byte) { + self.lock.Lock() + defer self.lock.Unlock() + for _, i := range indexes { + hash, found := self.intToHash[i] + if !found { + hash = newHash(i) + self.intToHash[i] = hash + self.hashToInt[string(hash)] = i + } + hashes = append(hashes, hash) + } + return +} + +func (self *TestHashPool) HashesToIndexes(hashes [][]byte) (indexes []int) { + self.lock.Lock() + defer self.lock.Unlock() + for _, hash := range hashes { + i, found := self.hashToInt[string(hash)] + if !found { + i = -1 + } + indexes = append(indexes, i) + } + return +} |