def testCircularDependency(self): a = JeevesLib.mkLabel() alice = User(0) bob = User(1) charlie = User(2) guestList = JeevesLib.JList([alice, bob]) guestListS = JeevesLib.mkSensitive(a, guestList, JeevesLib.JList([])) JeevesLib.restrict(a, lambda oc: JeevesLib.jhas(guestListS, oc)) self.assertEqual([alice, bob], JeevesLib.concretize(alice, guestListS)) self.assertEqual([alice, bob], JeevesLib.concretize(bob, guestListS)) self.assertEqual([], JeevesLib.concretize(charlie, guestListS))
def fexpr_cast(a): if isinstance(a, FExpr): return a elif isinstance(a, list): return FObject(JeevesLib.JList(a)) elif is_obj(a): return FObject(a) else: return Constant(a)
def test_jlist(self): x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt: ctxt) l = JeevesLib.mkSensitive(x, JeevesLib.JList([0, 1, 2]), JeevesLib.JList([3, 4, 5, 6])) def add10(): l.append(10) def add11(): l.append(11) JeevesLib.jif(x, add10, add11) self.assertEqual(JeevesLib.concretize(True, l[0]), 0) self.assertEqual(JeevesLib.concretize(True, l[1]), 1) self.assertEqual(JeevesLib.concretize(True, l[2]), 2) self.assertEqual(JeevesLib.concretize(True, l[3]), 10) self.assertEqual(JeevesLib.concretize(False, l[0]), 3) self.assertEqual(JeevesLib.concretize(False, l[1]), 4) self.assertEqual(JeevesLib.concretize(False, l[2]), 5) self.assertEqual(JeevesLib.concretize(False, l[3]), 6) self.assertEqual(JeevesLib.concretize(False, l[4]), 11)