예제 #1
0
def TestTheSameSwitch():
    for _ in range(100):
        X, Y = RandomNew()
        A = induce(X, Y)
        B = induce(X, Y)

        rand = randint(2, count(A))

        (A2, A2Par) = walkWithParent(A, rand)
        (B2, B2Par) = walkWithParent(B, rand)

        switch(A2, A2Par, B2, B2Par)

        for word in X:
            if not A.consume(word):
                raise AssertionError

            if not B.consume(word):
                raise AssertionError

        for word in Y:
            if A.consume(word):
                raise AssertionError

            if B.consume(word):
                raise AssertionError
예제 #2
0
def TestSwitchConsistency4():
    #unary 2

    a = Terminal('a')
    b = Terminal('b')
    c = Terminal('c')
    A = Expression('A')
    B = Expression('B')
    A = a >> ~a | c
    B = a | b >> b

    (nodeA, parA) = walkWithParent(A, 5)
    (nodeB, parB) = walkWithParent(B, 3)

    switch(nodeA, parA, nodeB, parB)

    assert (A.__str__() == 'a >> ~(b >> b) | c')
    assert (B.__str__() == 'a | a')
예제 #3
0
def TestSwitchConsistency1():
    #non terminal

    a = Terminal('a')
    b = Terminal('b')
    c = Terminal('c')
    A = Expression('A')
    B = Expression('B')
    A = a >> ~a | c
    B = a | b >> b

    (nodeA, parA) = walkWithParent(A, 2)
    (nodeB, parB) = walkWithParent(B, 3)

    switch(nodeA, parA, nodeB, parB)

    assert (A.__str__() == 'b >> b | c')
    assert (B.__str__() == 'a | a >> ~a')
예제 #4
0
def TestHeightUp():
    a = Terminal('a')
    b = Terminal('b')
    c = Terminal('c')
    d = Terminal('d')
    A = Expression('A')
    A = a >> b >> (b | a | c >> ~d)

    (exp, parExp) = walkWithParent(A, 8)
    assert (heightUp(A, exp, parExp) == 3)

    (exp, parExp) = walkWithParent(A, 12)
    assert (heightUp(A, exp, parExp) == 4)

    (exp, parExp) = walkWithParent(A, 4)
    assert (heightUp(A, exp, parExp) == 2)

    (exp, parExp) = walkWithParent(A, 2)
    assert (heightUp(A, exp, parExp) == 1)
예제 #5
0
def SimpleWalkTest():
    a = Terminal('a')
    b = Terminal('b')
    A = Expression('A')
    A = a | ~b >> a | ~b
    assert (walkWithParent(A, 1)[1] == None)
    assert (walkWithParent(A, 1)[0].symbol == '|')
    assert (walkWithParent(A, 2)[1].symbol == '|')
    assert (walkWithParent(A, 2)[0].symbol == '|')
    assert (walkWithParent(A, 3)[1].symbol == '|')
    assert (walkWithParent(A, 3)[0].symbol == 'a')
    assert (walkWithParent(A, 4)[1].symbol == '|')
    assert (walkWithParent(A, 4)[0].symbol == '>>')
    assert (walkWithParent(A, 5)[1].symbol == '>>')
    assert (walkWithParent(A, 5)[0].symbol == '~')
    assert (walkWithParent(A, 6)[1].symbol == '~')
    assert (walkWithParent(A, 6)[0].symbol == 'b')
    assert (walkWithParent(A, 7)[1].symbol == '>>')
    assert (walkWithParent(A, 7)[0].symbol == 'a')
    assert (walkWithParent(A, 8)[1].symbol == '|')
    assert (walkWithParent(A, 8)[0].symbol == '~')
    assert (walkWithParent(A, 9)[1].symbol == '~')
    assert (walkWithParent(A, 9)[0].symbol == 'b')
    assert (walkWithParent(A, 10)[0] == None)
    assert (walkWithParent(A, 10)[1] == None)