Skip to content

Commit 2049fde

Browse files
committed
add some Benchmarking function
1 parent e835577 commit 2049fde

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

benchmarking.go

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package varint
2+
3+
import (
4+
"github.com/golang-infrastructure/go-gtypes"
5+
"unsafe"
6+
)
7+
8+
// 这个文件中存放的是一些计算压缩率相关的方法
9+
10+
// BenchmarkingValueRatio 计算单个值的压缩率
11+
func BenchmarkingValueRatio[T gtypes.Unsigned](value T) float64 {
12+
rawByteSize := unsafe.Sizeof(value)
13+
varintBytes := Encode(value)
14+
return float64(len(varintBytes)) * 100 / float64(rawByteSize)
15+
}
16+
17+
// BenchmarkingValueSliceRatio 计算整个切片的压缩率
18+
func BenchmarkingValueSliceRatio[T gtypes.Unsigned](valueSlice []T) float64 {
19+
rawByteSizeSum := uint64(0)
20+
varintBytesSum := uint64(0)
21+
for _, v := range valueSlice {
22+
bytes := Encode(v)
23+
varintBytesSum += uint64(len(bytes))
24+
rawByteSizeSum += uint64(unsafe.Sizeof(v))
25+
}
26+
return float64(varintBytesSum) * 100 / float64(rawByteSizeSum)
27+
}

benchmarking_test.go

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package varint
2+
3+
import (
4+
"github.com/stretchr/testify/assert"
5+
"testing"
6+
)
7+
8+
func TestBenchmarkingValueRatio(t *testing.T) {
9+
10+
{
11+
value := uint64(1)
12+
ratio := BenchmarkingValueRatio(value)
13+
assert.Equal(t, 12.5, ratio)
14+
}
15+
16+
}
17+
18+
func TestBenchmarkingValueSliceRatio(t *testing.T) {
19+
20+
{
21+
// 12.5% 是上限,如果出现了较大的值压缩率只会比这个低不会比这个高
22+
values := []uint64{
23+
1, 2, 3, 4, 5, 999999,
24+
}
25+
ratio := BenchmarkingValueSliceRatio(values)
26+
assert.Equal(t, 16.666666666666668, ratio)
27+
}
28+
29+
}

0 commit comments

Comments
 (0)