File: test_zinterp.py

package info (click to toggle)
pypy 7.0.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 107,216 kB
  • sloc: python: 1,201,787; ansic: 62,419; asm: 5,169; cpp: 3,017; sh: 2,534; makefile: 545; xml: 243; lisp: 45; awk: 4
file content (58 lines) | stat: -rw-r--r-- 1,703 bytes parent folder | download | duplicates (7)
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
58
# 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
    pattern = rsre_core.CompiledPattern(pattern)
    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