github.com/unionj-cloud/go-doudou/v2@v2.3.5/toolkit/cache/bench_test.go (about)

     1  package cache_test
     2  
     3  import (
     4  	"github.com/unionj-cloud/go-doudou/v2/toolkit/cache"
     5  	"strings"
     6  	"testing"
     7  
     8  )
     9  
    10  func BenchmarkOnce(b *testing.B) {
    11  	mycache := newCacheWithLocal(newRing())
    12  	obj := &Object{
    13  		Str: strings.Repeat("my very large string", 10),
    14  		Num: 42,
    15  	}
    16  
    17  	b.ResetTimer()
    18  
    19  	b.RunParallel(func(pb *testing.PB) {
    20  		for pb.Next() {
    21  			var dst Object
    22  			err := mycache.Once(&cache.Item{
    23  				Key:   "bench-once",
    24  				Value: &dst,
    25  				Do: func(*cache.Item) (interface{}, error) {
    26  					return obj, nil
    27  				},
    28  			})
    29  			if err != nil {
    30  				b.Fatal(err)
    31  			}
    32  			if dst.Num != 42 {
    33  				b.Fatalf("%d != 42", dst.Num)
    34  			}
    35  		}
    36  	})
    37  }
    38  
    39  func BenchmarkSet(b *testing.B) {
    40  	mycache := newCacheWithLocal(newRing())
    41  	obj := &Object{
    42  		Str: strings.Repeat("my very large string", 10),
    43  		Num: 42,
    44  	}
    45  
    46  	b.ResetTimer()
    47  
    48  	b.RunParallel(func(pb *testing.PB) {
    49  		for pb.Next() {
    50  			if err := mycache.Set(&cache.Item{
    51  				Key:   "bench-set",
    52  				Value: obj,
    53  			}); err != nil {
    54  				b.Fatal(err)
    55  			}
    56  		}
    57  	})
    58  }