def test_arity(self): # e.g., def square(n): # return n * n # arity(square) = 1 fn = FunctionRef("", 1, "square") squarearg = ArgRef(fn, "n") self.assertEqual(fn.arity(), 1)
def test_init(self): fn1 = FunctionRef("foo", 1, "fooFn") fn2 = FunctionRef("foo", 1, "fooFn") self.assertEqual(fn1, fn2) self.assertIs(fn1, fn2) with self.assertRaises(Exception) as e: FunctionRef("foo", 1, "foofn")
def test_get_return(self): fn = FunctionRef("baz", 1, "bazFn") argref, returntype = fn.get_return() self.assertIsNone(argref) self.assertEqual(returntype, types.NoneType) retval = ArgRef(fn, "") retval.add_sample(1) argref, returntype = fn.get_return() self.assertIs(argref, ArgRef(fn, "")) self.assertIs(returntype, int)
def test_signaturenature(self): import types fn = FunctionRef("", -1, "map") arg1 = ArgRef(fn, "fn") arg2 = ArgRef(fn, "coll") retval = ArgRef(fn, "") arg1.add_sample(lambda x: x*x) arg2.add_sample([1,2,3]) retval.add_sample([1,4,9]) fn.set_signaturenature() self.assertEqual(fn.signature[""], (-1, ParameterizedList([int]))) self.assertEqual(fn.signature["fn"], (0, types.FunctionType)) self.assertEqual(fn.signature["coll"], (1, ParameterizedList([int])))
def test_get_num_samples(self): fn = FunctionRef("bar", 1, "barFn") arg1 = ArgRef(fn, "arg1") retval = ArgRef(fn, "") # Pretend we observed an input, but an exception was thrown. arg1.add_sample(True) self.assertEqual(fn.get_num_samples(), 1) # Observing an output shouldn't change anything retval.add_sample("asdf") self.assertEqual(fn.get_num_samples(), 1) # Observing a successful run should increment by one. arg1.add_sample(False) retval.add_sample("foo") self.assertEqual(fn.get_num_samples(), 2)
def setUp(self): self.fn = FunctionRef("foo", 1, "fooFn")