File tree 2 files changed +56
-0
lines changed
2 files changed +56
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments