File: test_zinterp.py

package info (click to toggle)
pypy 5.6.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 97,040 kB
  • ctags: 185,069
  • sloc: python: 1,147,862; ansic: 49,642; cpp: 5,245; asm: 5,169; makefile: 529; sh: 481; xml: 232; lisp: 45
file content (57 lines) | stat: -rw-r--r-- 1,654 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# minimal test: just checks that (parts of) rsre can be translated

from rpython.rtyper.test.test_llinterp import gengraph, interpret
from rpython.rlib.rsre import rsre_core
from rpython.rlib.rsre.rsre_re import compile

def main(n):
    assert n >= 0
    pattern = [n] * n
    string = chr(n) * n
    rsre_core.search(pattern, string)
    #
    unicodestr = unichr(n) * n
    ctx = rsre_core.UnicodeMatchContext(pattern, unicodestr,
                                        0, len(unicodestr), 0)
    rsre_core.search_context(ctx)
    #
    return 0


def test_gengraph():
    t, typer, graph = gengraph(main, [int])

m = compile("(a|b)aaaaa")

def test_match():
    def f(i):
        if i:
            s = "aaaaaa"
        else:
            s = "caaaaa"
        g = m.match(s)
        if g is None:
            return 3
        return int("aaaaaa" == g.group(0))
    assert interpret(f, [3]) == 1
    assert interpret(f, [0]) == 3

def test_translates():
    from rpython.rlib.rsre import rsre_re
    def f(i):
        if i:
            s = "aaaaaa"
        else:
            s = "caaaaa"
        print rsre_re.match("(a|b)aa", s)
        print rsre_re.match("a{4}", s)
        print rsre_re.search("(a|b)aa", s)
        print rsre_re.search("a{4}", s)
        for x in rsre_re.findall("(a|b)a", s):  print x
        for x in rsre_re.findall("a{2}", s):    print x
        for x in rsre_re.finditer("(a|b)a", s): print x
        for x in rsre_re.finditer("a{2}", s):   print x
        for x in rsre_re.split("(a|b)a", s):    print x
        for x in rsre_re.split("a{2}", s):      print x
        return 0
    interpret(f, [3])  # assert does not crash