package gonads import ( "testing" ) func Fib(n int) int { if n <= 1 { return n } return Fib(n-1) + Fib(n-2) } func TestRecurFib(t *testing.T) { t.Log(Fib(40)) } func TestThunkFib(t *testing.T) { cache := make([]*Thunk[int], 41) var fib func(int) int fib = func(n int) int { if cache[n].o.IsSome() { return *cache[n].o.val } return fib(n-1) + fib(n-2) } for i := range cache { i := i cache[i] = NewThunk(func() int { return fib(i) }) } cache[0].o.Set(0) cache[1].o.Set(1) t.Log(cache[40].Force()) } func TestThunkDelay(t *testing.T) { }