Ejemplo n.º 1
0
    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))
Ejemplo n.º 2
0
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)