Beispiel #1
0
def test_cons():
    assert str(PtObject.nil) == 'nil'
    assert PtObject.nil == PtObject.nil

    obj = PtObject.cons(PtObject.intern('def'), PtObject.intern('ghi'))
    assert str(obj) == '(def . ghi)'
    assert obj == PtObject.cons(PtObject.intern('def'), PtObject.intern('ghi'))
    assert obj != PtObject.cons(PtObject.symbol('def'), PtObject.intern('ghi'))
    assert obj != PtObject.cons(PtObject.intern('def'), PtObject.symbol('ghi'))

    obj = PtObject.cons(
        PtObject.intern('a'),
        PtObject.cons(
            PtObject.intern('b'),
            PtObject.cons(
                PtObject.intern('c'),
                PtObject.intern('d'))))
    assert str(obj) == '(a b c . d)'
    assert obj == PtObject.cons(
        PtObject.intern('a'),
        PtObject.cons(
            PtObject.intern('b'),
            PtObject.cons(
                PtObject.intern('c'),
                PtObject.intern('d'))))

    obj = PtObject.cons(
        PtObject.intern('a'),
        PtObject.cons(
            PtObject.intern('b'),
            PtObject.cons(
                PtObject.intern('c'),
                PtObject.nil)))
    assert str(obj) == '(a b c)'
    assert obj == PtObject.cons(
        PtObject.intern('a'),
        PtObject.cons(
            PtObject.intern('b'),
            PtObject.cons(
                PtObject.intern('c'),
                PtObject.nil)))

    obj = PtObject.list([
        PtObject.intern('a'),
        PtObject.intern('b'),
        PtObject.intern('c'),
        PtObject.intern('d'),
        PtObject.intern('e'),
    ])
    assert str(obj) == '(a b c d e)'
    assert obj == PtObject.list([
        PtObject.intern('a'),
        PtObject.intern('b'),
        PtObject.intern('c'),
        PtObject.intern('d'),
        PtObject.intern('e'),
    ])
Beispiel #2
0
def test_quote():
    check_result("'symbol", PtObject.intern('symbol'))
    check_result(
        "''symbol",
        PtObject.list([PtObject.intern('quote'),
                       PtObject.intern('symbol')]))
    check_result("'(a b c)",
                 PtObject.list([PtObject.intern(s) for s in ['a', 'b', 'c']]))
    check_result("'(a . b)",
                 PtObject.cons(PtObject.intern('a'), PtObject.intern('b')))
    check_result(
        "'(a b . c)",
        PtObject.cons(
            PtObject.intern('a'),
            PtObject.cons(PtObject.intern('b'), PtObject.intern('c'))))
Beispiel #3
0
 def sexp(self, elements):
     if len(elements) > 1 and elements[-2] == PtObject.intern('.'):
         assert len(elements) > 2
         final = elements[-1]
         elements = elements[:-2]
     else:
         final = PtObject.nil
     return PtObject.list(elements, final)
Beispiel #4
0
 def unquot_splice(self, value):
     return PtObject.list([PtObject.intern('unquote-splice'), value])
Beispiel #5
0
 def unquot(self, value):
     return PtObject.list([PtObject.intern('unquote'), value])
Beispiel #6
0
 def bquot(self, value):
     return PtObject.list([PtObject.intern('backquote'), value])
Beispiel #7
0
def test_parsing():
    parser = PaltryParser(semantics=PaltrySemantics())
    parse = lambda s: parser.parse(s, 'exp')

    assert parse('quux') == PtObject.intern('quux')
    assert parse('"alpha"') == PtObject('alpha')
    assert parse('""') == PtObject('')
    assert parse('120') == PtObject(120)
    assert parse('-2') == PtObject(-2)
    assert parse('120.0e1') == PtObject(1200.0)
    assert parse('-3.14') == PtObject(-3.14)
    assert parse('0xf') == PtObject(15)
    assert parse('-0xf') == PtObject(-15)
    assert parse('0o7') == PtObject(7)
    assert parse('-0o7') == PtObject(-7)
    assert parse('0b1') == PtObject(1)
    assert parse('-0b1') == PtObject(-1)
    assert parse('(a b c d "e")') == PtObject.list([
        PtObject.intern('a'),
        PtObject.intern('b'),
        PtObject.intern('c'),
        PtObject.intern('d'),
        PtObject('e'),
    ])
    assert parse("'quoted") == PtObject.list(
        [PtObject.intern('quote'),
         PtObject.intern('quoted')])
    assert parse("'(a list goes here)") == PtObject.list([
        PtObject.intern('quote'),
        PtObject.list([
            PtObject.intern('a'),
            PtObject.intern('list'),
            PtObject.intern('goes'),
            PtObject.intern('here'),
        ]),
    ])
    assert parse('`(a list goes here)') == PtObject.list([
        PtObject.intern('backquote'),
        PtObject.list([
            PtObject.intern('a'),
            PtObject.intern('list'),
            PtObject.intern('goes'),
            PtObject.intern('here'),
        ]),
    ])
    assert parse(',sym') == PtObject.list([
        PtObject.intern('unquote'),
        PtObject.intern('sym'),
    ])
    assert parse(',(a b)') == PtObject.list([
        PtObject.intern('unquote'),
        PtObject.list([
            PtObject.intern('a'),
            PtObject.intern('b'),
        ])
    ])
    assert parse(',@sym') == PtObject.list([
        PtObject.intern('unquote-splice'),
        PtObject.intern('sym'),
    ])
    assert parse(',@(a b)') == PtObject.list([
        PtObject.intern('unquote-splice'),
        PtObject.list([
            PtObject.intern('a'),
            PtObject.intern('b'),
        ])
    ])