Skip to content

Commit

Permalink
Benchmark existing ways to check for IDENTITY CIDs
Browse files Browse the repository at this point in the history
Add benchmarks that compare two ways of checking for
`multihash.IDENTITY` code:
1. `Cid.Prefix().MhType`
2. Decode of `Cid.Hash()`

Relates to #133
  • Loading branch information
masih committed Sep 27, 2021
1 parent 5640b01 commit c2a6e2b
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions benchmark_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package cid_test

import (
"math/rand"
"testing"

"github.com/ipfs/go-cid"
"github.com/multiformats/go-multihash"
)

// BenchmarkIdentityCheck benchmarks checking whether a CIDv1 has multihash.IDENTITY
// code via two methods: 1) Cid.Prefix() and 2) decoding the Cid.Hash().
func BenchmarkIdentityCheck(b *testing.B) {
rng := rand.New(rand.NewSource(1413))

data := make([]byte, rng.Intn(100)+1024)
if _, err := rng.Read(data); err != nil {
b.Fatal(err)
}
mh, err := multihash.Sum(data, multihash.IDENTITY, -1)
if err != nil {
b.Fatal(err)
}
cv1 := cid.NewCidV1(cid.Raw, mh)

b.SetBytes(int64(cv1.ByteLen()))
b.ReportAllocs()
b.ResetTimer()

b.Run("Prefix", func(b *testing.B) {
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
if cv1.Prefix().MhType != multihash.IDENTITY {
b.Fatal("expected IDENTITY CID")
}
}
})
})

b.Run("MultihashDecode", func(b *testing.B) {
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
dmh, err := multihash.Decode(cv1.Hash())
if err != nil {
b.Fatal(err)
}
if dmh.Code != multihash.IDENTITY {
b.Fatal("expected IDENTITY CID")
}
}
})
})
}

0 comments on commit c2a6e2b

Please sign in to comment.