@oazmi/kitchensink - v0.9.13
    Preparing search index...

    Function memorizeAfterN

    • memorizes a function's return value up-until n-calls, and after this, unmemorized call arguments will either return the optional default_value (if it was provided), or it will return value of the nth call (final call that got memorized).

      Type Parameters

      • K
      • V

      Parameters

      • n: number
      • fn: (arg: K) => V
      • Optionaldefault_value: V

      Returns (arg: K) => V

      import { assertEquals as assertEq } from "jsr:@std/assert"

      let fn_call_count = 0
      const fn = (arg: string | number) => {
      fn_call_count++
      return `you owe ${arg} to the bank.`
      }
      const memorized_fn = memorizeAfterN(2, fn, "DEFAULT VALUE!")

      assertEq(memorized_fn("a camel") , "you owe a camel to the bank.")
      assertEq(fn_call_count , 1)
      assertEq(memorized_fn("a camel") , "you owe a camel to the bank.")
      assertEq(fn_call_count , 1)
      assertEq(memorized_fn("5") , "you owe 5 to the bank.")
      assertEq(fn_call_count , 2)
      // from here on, memorization will be halted and only `"DEFAULT VALUE!"` will be returned for unmemorized args
      assertEq(memorized_fn("5") , "you owe 5 to the bank.")
      assertEq(fn_call_count , 2)
      assertEq(memorized_fn(5) , "DEFAULT VALUE!")
      assertEq(fn_call_count , 2)
      assertEq(memorized_fn("your soul"), "DEFAULT VALUE!")
      assertEq(fn_call_count , 2)
      assertEq(memorized_fn("your soul"), "DEFAULT VALUE!")
      assertEq(fn_call_count , 2)
      assertEq(memorized_fn("a camel") , "you owe a camel to the bank.")
      assertEq(fn_call_count , 2)