def testOrderOfParamsMerges(self): (t1, t2) = (fsymbol.T("a"), fsymbol.T("b")) t1["@a"] = Var(Int, 1) t1["d"] = Var(Int, 100) t2["d"] = Var(Int, 200) t2["@a"] = Var(Int, 3) t2["@b"] = Var(Float, 2) t1["@myfunc"] = fsymbol.OverloadList( [function.Func([Int], Int, "ident")]) t2["@myotherfunc"] = fsymbol.OverloadList( [function.Func([Int], Int, "ident")]) t1.merge(t2) op = t1.order_of_params() self.assertEqual(0, op["t__a_a"]) self.assertEqual(1, op["t__a_ba"]) self.assertEqual(2, op["t__a_bb"]) self.assertEqual(-1, t1["d"].param_slot) self.assertEqual(-1, t2["d"].param_slot)
def testFunc(self): f = function.Func([fracttypes.Int, fracttypes.Int], fracttypes.Int, "wibble", pos=7) self.assertEqual([fracttypes.Int, fracttypes.Int], f.args) self.assertEqual(fracttypes.Int, f.ret) self.assertEqual(7, f.pos) self.assertEqual("wibble", f.cname) self.assertEqual("wibble_ii_i", f.genFunc) self.assertEqual([], f.implicit_args) f.set_implicit_arg("fish") f.set_implicit_arg("blouse") self.assertEqual(["fish", "blouse"], f.implicit_args)
def testParamSlots(self): t = fsymbol.T("boo") v = Var(Int, 1) self.assertEqual(-1, v.param_slot) t["x"] = v self.assertEqual(-1, v.param_slot) v2 = Var(Complex, [1.0, 2.0]) self.assertEqual(-1, v2.param_slot) t["@p"] = v2 self.assertEqual(0, v2.param_slot) self.assertEqual(2, t.nextParamSlot) v3 = Var(Hyper, [1.0, 2.0, 3.0, 4.0]) self.assertEqual(-1, v3.param_slot) t["@pc"] = v3 self.assertEqual(2, v3.param_slot) self.assertEqual(6, t.nextParamSlot) v4 = Var(Int, 77) self.assertEqual(-1, v4.param_slot) t["@pi"] = v4 self.assertEqual(6, v4.param_slot) self.assertEqual(7, t.nextParamSlot) # functions shouldn't affect this f = fsymbol.OverloadList([function.Func([Int], Int, "ident")]) t["@myfunc"] = f self.assertNotEqual(True, hasattr(f, "param_slot")) self.assertEqual(7, t.nextParamSlot) v5 = Var(Image, None) self.assertEqual(-1, v5.param_slot) t["@image"] = v5 self.assertEqual(7, v5.param_slot) self.assertEqual(8, t.nextParamSlot)