mirror of
https://gitlab.com/pulsechaincom/go-pulse.git
synced 2024-12-25 04:47:17 +00:00
58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
|
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
|
||
|
}
|