Skip to content

Commit e796751

Browse files
committed
test: add benchmarks
Closes TNTP-3733
1 parent 93a7028 commit e796751

File tree

8 files changed

+545
-2
lines changed

8 files changed

+545
-2
lines changed

.github/workflows/testing.yaml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,18 @@ jobs:
5151
run: make coverage coveralls-deps coveralls
5252

5353
run-benchmarks:
54-
if: false
54+
if: (github.event_name == 'push') ||
55+
(github.event_name == 'pull_request' &&
56+
github.event.pull_request.head.repo.full_name != github.repository) ||
57+
(github.event_name == 'workflow_dispatch')
5558

5659
runs-on: ubuntu-latest
5760

61+
strategy:
62+
fail-fast: false
63+
matrix:
64+
golang: ['1.24', 'stable']
65+
5866
steps:
5967
- uses: actions/checkout@v4
6068
- uses: actions/setup-go@v5

Makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ testrace:
1717
@echo "Running tests with race flag"
1818
@go test ./... -count=100 -race
1919

20+
.PHONY: bench
21+
bench:
22+
@echo "Running benchmarks"
23+
@go test ./... -count=1 -bench=. -benchmem
24+
2025
.PHONY: coverage
2126
coverage:
2227
@echo "Running tests with coveralls"

bench_generic_over_ptr_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package option_test
2+
3+
import (
4+
"github.com/vmihailenco/msgpack/v5"
5+
"github.com/vmihailenco/msgpack/v5/msgpcode"
6+
)
7+
8+
type GenericOverPtr[T any] struct {
9+
val *T
10+
}
11+
12+
func SomeOverPtr[T any](value T) GenericOverPtr[T] {
13+
return GenericOverPtr[T]{val: &value}
14+
}
15+
16+
func NoneOverPtr[T any]() GenericOverPtr[T] {
17+
return GenericOverPtr[T]{val: nil}
18+
}
19+
20+
func (o GenericOverPtr[T]) Get() (T, bool) {
21+
if o.val == nil {
22+
return zero[T](), false
23+
}
24+
return *o.val, true
25+
}
26+
27+
func (o GenericOverPtr[T]) IsSome() bool {
28+
return o.val != nil
29+
}
30+
31+
func (o GenericOverPtr[T]) EncodeMsgpack(encoder *msgpack.Encoder) error {
32+
if !o.IsSome() {
33+
return encoder.EncodeNil()
34+
}
35+
return encoder.Encode(*o.val)
36+
}
37+
38+
func (o *GenericOverPtr[T]) DecodeMsgpack(decoder *msgpack.Decoder) error {
39+
code, err := decoder.PeekCode()
40+
switch {
41+
case err != nil:
42+
return err
43+
case code == msgpcode.Nil:
44+
o.val = nil
45+
return nil
46+
}
47+
48+
var val T
49+
err = decoder.Decode(&val)
50+
if err != nil {
51+
return err
52+
}
53+
o.val = &val
54+
55+
return nil
56+
}

bench_generic_over_slice_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package option_test
2+
3+
import (
4+
"github.com/vmihailenco/msgpack/v5"
5+
"github.com/vmihailenco/msgpack/v5/msgpcode"
6+
)
7+
8+
type GenericOverSlice[T any] []T
9+
10+
func SomeOverSlice[T any](value T) GenericOverSlice[T] {
11+
return []T{value}
12+
}
13+
14+
func NoneOverSlice[T any]() GenericOverSlice[T] {
15+
return []T{}
16+
}
17+
18+
func (o GenericOverSlice[T]) Get() (T, bool) {
19+
if len(o) == 0 {
20+
return zero[T](), false
21+
}
22+
return o[0], true
23+
}
24+
25+
func (o GenericOverSlice[T]) IsSome() bool {
26+
return len(o) > 0
27+
}
28+
29+
func (o GenericOverSlice[T]) EncodeMsgpack(encoder *msgpack.Encoder) error {
30+
if !o.IsSome() {
31+
return encoder.EncodeNil()
32+
}
33+
return encoder.Encode(o[0])
34+
}
35+
36+
func (o *GenericOverSlice[T]) DecodeMsgpack(decoder *msgpack.Decoder) error {
37+
code, err := decoder.PeekCode()
38+
if err != nil {
39+
return err
40+
}
41+
if code == msgpcode.Nil {
42+
*o = nil
43+
return nil
44+
}
45+
46+
var val T
47+
err = decoder.Decode(&val)
48+
if err != nil {
49+
return err
50+
}
51+
*o = []T{val}
52+
53+
return nil
54+
}

0 commit comments

Comments
 (0)