mirror of
https://github.com/Crocmagnon/fat-contexts-article-companion.git
synced 2024-11-14 20:43:54 +01:00
51 lines
952 B
Go
51 lines
952 B
Go
package main_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"math/rand/v2"
|
|
"testing"
|
|
)
|
|
|
|
const key = "key"
|
|
|
|
func BenchmarkContext(b *testing.B) {
|
|
benchmarks := []struct {
|
|
times uint64
|
|
}{
|
|
{1_000},
|
|
{10_000},
|
|
{100_000},
|
|
}
|
|
for _, bm := range benchmarks {
|
|
ctx := context.WithValue(context.Background(), key, "some value")
|
|
b.Run(fmt.Sprintf("shadow %v", bm.times), func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
shadow(ctx, bm.times)
|
|
}
|
|
})
|
|
b.Run(fmt.Sprintf("fat %v", bm.times), func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
fat(ctx, bm.times)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func shadow(ctx context.Context, times uint64) {
|
|
for range times {
|
|
ctx := contextWithRandom(ctx)
|
|
_ = ctx.Value(key)
|
|
}
|
|
}
|
|
|
|
func fat(ctx context.Context, times uint64) {
|
|
for range times {
|
|
ctx = contextWithRandom(ctx)
|
|
_ = ctx.Value(key)
|
|
}
|
|
}
|
|
|
|
func contextWithRandom(ctx context.Context) context.Context {
|
|
return context.WithValue(ctx, "other_key", rand.Int64())
|
|
}
|