Skip to content

Commit 4dd55cd

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

File tree

8 files changed

+564
-2
lines changed

8 files changed

+564
-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: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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+
25+
return *o.val, true
26+
}
27+
28+
func (o GenericOverPtr[T]) IsSome() bool {
29+
return o.val != nil
30+
}
31+
32+
func (o GenericOverPtr[T]) EncodeMsgpack(encoder *msgpack.Encoder) error {
33+
if !o.IsSome() {
34+
return encoder.EncodeNil()
35+
}
36+
37+
return encoder.Encode(*o.val)
38+
}
39+
40+
func (o *GenericOverPtr[T]) DecodeMsgpack(decoder *msgpack.Decoder) error {
41+
code, err := decoder.PeekCode()
42+
switch {
43+
case err != nil:
44+
return err
45+
case code == msgpcode.Nil:
46+
o.val = nil
47+
return nil
48+
}
49+
50+
var val T
51+
52+
err = decoder.Decode(&val)
53+
if err != nil {
54+
return err
55+
}
56+
57+
o.val = &val
58+
59+
return nil
60+
}

bench_generic_over_slice_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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+
23+
return o[0], true
24+
}
25+
26+
func (o GenericOverSlice[T]) IsSome() bool {
27+
return len(o) > 0
28+
}
29+
30+
func (o GenericOverSlice[T]) EncodeMsgpack(encoder *msgpack.Encoder) error {
31+
if !o.IsSome() {
32+
return encoder.EncodeNil()
33+
}
34+
return encoder.Encode(o[0])
35+
}
36+
37+
func (o *GenericOverSlice[T]) DecodeMsgpack(decoder *msgpack.Decoder) error {
38+
code, err := decoder.PeekCode()
39+
if err != nil {
40+
return err
41+
}
42+
43+
if code == msgpcode.Nil {
44+
*o = nil
45+
return nil
46+
}
47+
48+
var val T
49+
50+
err = decoder.Decode(&val)
51+
if err != nil {
52+
return err
53+
}
54+
*o = []T{val}
55+
56+
return nil
57+
}

0 commit comments

Comments
 (0)