9 type testValues struct {
15 var testPairs = make([]testValues, 0, n)
17 func initTestPairs() {
18 if len(testPairs) > 0 {
21 // pre-make the test pairs, so it doesn't take up benchmark time...
22 for i := 0; i < n; i++ {
23 data := make([]byte, 32)
25 testPairs = append(testPairs, testValues{dec: data, enc: FastBase58Encoding(data)})
29 func randAlphabet() *Alphabet {
30 // Permutes [0, 127] and returns the first 58 elements.
31 // Like (math/rand).Perm but using crypto/rand.
32 var randomness [128]byte
33 rand.Read(randomness[:])
36 for i, r := range randomness {
41 return NewAlphabet(string(bts[:58]))
44 func TestFastEqTrivialEncodingAndDecoding(t *testing.T) {
45 for k := 0; k < 10; k++ {
46 testEncDecLoop(t, randAlphabet())
48 testEncDecLoop(t, BTCAlphabet)
49 testEncDecLoop(t, FlickrAlphabet)
52 func testEncDecLoop(t *testing.T, alph *Alphabet) {
53 for j := 1; j < 256; j++ {
54 var b = make([]byte, j)
55 for i := 0; i < 100; i++ {
57 fe := FastBase58EncodingAlphabet(b, alph)
58 te := TrivialBase58EncodingAlphabet(b, alph)
61 t.Errorf("encoding err: %#v", hex.EncodeToString(b))
64 fd, ferr := FastBase58DecodingAlphabet(fe, alph)
66 t.Errorf("fast error: %v", ferr)
68 td, terr := TrivialBase58DecodingAlphabet(te, alph)
70 t.Errorf("trivial error: %v", terr)
73 if hex.EncodeToString(b) != hex.EncodeToString(td) {
74 t.Errorf("decoding err: %s != %s", hex.EncodeToString(b), hex.EncodeToString(td))
76 if hex.EncodeToString(b) != hex.EncodeToString(fd) {
77 t.Errorf("decoding err: %s != %s", hex.EncodeToString(b), hex.EncodeToString(fd))
83 func BenchmarkTrivialBase58Encoding(b *testing.B) {
87 for i := 0; i < b.N; i++ {
88 TrivialBase58Encoding([]byte(testPairs[i].dec))
92 func BenchmarkFastBase58Encoding(b *testing.B) {
96 for i := 0; i < b.N; i++ {
97 FastBase58Encoding(testPairs[i].dec)
101 func BenchmarkTrivialBase58Decoding(b *testing.B) {
105 for i := 0; i < b.N; i++ {
106 TrivialBase58Decoding(testPairs[i].enc)
110 func BenchmarkFastBase58Decoding(b *testing.B) {
114 for i := 0; i < b.N; i++ {
115 FastBase58Decoding(testPairs[i].enc)