code: def test_function_checker(self):
      @typecheck(f=func_spec(3, int))
      def foo(f):
          return f(1, 2, 3)
  
      l1 = lambda: 5
      l2 = 5
      l3 = lambda x, y, z: x + y + z
  
      self.assertRaises(TypeError, lambda: foo(l1))
      self.assertRaises(TypeError, lambda: foo(l2))
      foo(l3)
  
      @typecheck(f=func_spec(0, int))
      def eval(f):
          return f()
  
      self.assertEqual(eval(lambda x=1: x), 1)
      self.assertEqual(eval(lambda x=None: 1), 1)
      self.assertRaises(TypeError, lambda: eval(lambda x: 1))
  
      @typecheck(f=func_spec(2, int), a=int, b=int)
      def apply(f, a, b):
          return f(a, b)
  
      self.assertEqual(apply(lambda x, y=2, z=3: x + y + z, 5, 7), 15)
  
file_path: hail/hail/python/test/hail/typecheck/test_typecheck.py
imports: import unittest
  from hail.typecheck.check import *
label_desc: Use image node_id 7 for calling the Tests obj's underlying member method code with example usage: obj.test_function_checker() and returns: f, f, f