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) cache[0].o.Set(0) cache[1].o.Set(1) fib := func(n int) int { return cache[n-1].Force(n-1) + cache[n-2].Force(n-2) } for i := range cache { cache[i].doer = fib } t.Log(cache[40].Force(40)) }