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  }