github.com/mitranim/gg@v0.1.17/lazy_test.go (about) 1 package gg_test 2 3 import ( 4 "testing" 5 6 "github.com/mitranim/gg" 7 "github.com/mitranim/gg/gtest" 8 ) 9 10 // TODO: test with concurrency. 11 func TestLazy(t *testing.T) { 12 defer gtest.Catch(t) 13 14 var count int 15 16 once := gg.NewLazy(func() int { 17 count++ 18 if count > 1 { 19 panic(gg.Errf(`excessive count %v`, count)) 20 } 21 return count 22 }) 23 24 gtest.Eq(*gg.CastUnsafe[*int](once), 0) 25 gtest.Eq(once.Get(), 1) 26 gtest.Eq(once.Get(), once.Get()) 27 gtest.Eq(*gg.CastUnsafe[*int](once), 1) 28 } 29 30 func BenchmarkLazy(b *testing.B) { 31 once := gg.NewLazy(gg.Cwd) 32 33 for ind := 0; ind < b.N; ind++ { 34 gg.Nop1(once.Get()) 35 } 36 }