Skip to content

Commit

Permalink
Avoid heap allocations in Htonl (#55)
Browse files Browse the repository at this point in the history
* Avoid heap allocations in Htonl

* move new allocation benchmarks in a BenchmarkXXX
  • Loading branch information
jinroh authored Nov 25, 2024
1 parent facee9e commit 7670f0f
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 27 deletions.
30 changes: 6 additions & 24 deletions pkg/inet.go
Original file line number Diff line number Diff line change
@@ -1,35 +1,17 @@
package rpmdb

import (
"bytes"
"encoding/binary"
"log"
)

func Htonl(val int32) int32 {
buf := new(bytes.Buffer)
if err := binary.Write(buf, binary.LittleEndian, val); err != nil {
log.Println(err)
return 0
}

if err := binary.Read(buf, binary.BigEndian, &val); err != nil {
log.Println(err)
return 0
}
return val
var buf [4]byte
binary.LittleEndian.PutUint32(buf[:], uint32(val))
return int32(binary.BigEndian.Uint32(buf[:]))
}

func HtonlU(val uint32) uint32 {
buf := new(bytes.Buffer)
if err := binary.Write(buf, binary.LittleEndian, val); err != nil {
log.Println(err)
return 0
}

if err := binary.Read(buf, binary.BigEndian, &val); err != nil {
log.Println(err)
return 0
}
return val
var buf [4]byte
binary.LittleEndian.PutUint32(buf[:], val)
return binary.BigEndian.Uint32(buf[:])
}
26 changes: 23 additions & 3 deletions pkg/rpmdb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import (
_ "github.com/glebarez/go-sqlite"
)

func TestPackageList(t *testing.T) {
tests := []struct {
var (
packageTests = []struct {
name string
file string // Test input file
pkgList []*PackageInfo
Expand Down Expand Up @@ -87,8 +87,10 @@ func TestPackageList(t *testing.T) {
pkgList: Fedora35PlusMongoDBWithSQLite3(),
},
}
)

for _, tt := range tests {
func TestPackageList(t *testing.T) {
for _, tt := range packageTests {
t.Run(tt.name, func(t *testing.T) {
db, err := Open(tt.file)
require.NoError(t, err)
Expand Down Expand Up @@ -121,6 +123,24 @@ func TestPackageList(t *testing.T) {
}
}

func BenchmarkRpmDB_Package(b *testing.B) {
for _, tt := range packageTests {
b.Run(tt.name, func(b *testing.B) {
for i := 0; i < b.N; i++ {
db, err := Open(tt.file)
if err != nil {
b.Fatal(err)
}
_, err = db.ListPackages()
if err != nil {
b.Fatal(err)
}
}
b.ReportAllocs()
})
}
}

func TestRpmDB_Package(t *testing.T) {
tests := []struct {
name string
Expand Down

0 comments on commit 7670f0f

Please sign in to comment.