NAME=pyc load version39
FILE=bins/pyc/py39.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
EOF
RUN

NAME=pyc load version38
FILE=bins/pyc/py38.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.8.0 VM (rev 5d714034866ce1e9f89dc141fe4cc0b50cf20a8e)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version37
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.7.0 VM (rev ae1f6af15f3e4110616801e235873e47fd7d1977)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version36
FILE=bins/pyc/py36.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.6.0 VM (rev 5c4568a05a0a62b5947c55f68f9f2ecfb90a4f12)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version27
FILE=bins/pyc/py27.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python 2.7a2+ VM (rev edfed0e32cedf3b84c6e999052486a750a3f5bee)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc symbols
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
is~?Human
EOF
EXPECT=<<EOF
9
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc sections
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
iS~Bat
EOF
EXPECT=<<EOF
30  0x00001f0d   0x2a 0x00001f0d   0x2a ---- module_.Bat
31  0x00001f5f    0xa 0x00001f5f    0xa ---- module_.Bat.__init
32  0x00001fca    0x8 0x00001fca    0x8 ---- module_.Bat.say
33  0x00002037    0x4 0x00002037    0x4 ---- module_.Bat.sonar
34  0x00002103   0x1c 0x00002103   0x1c ---- module_.Batman
35  0x00002143   0x44 0x00002143   0x44 ---- module_.Batman.__init
36  0x00002235    0x4 0x00002235    0x4 ---- module_.Batman.sing
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc entry
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
ie~program
EOF
EXPECT=<<EOF
vaddr=0x0000002a paddr=0x0000002a haddr=-1 type=program
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc disasm
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
pd 10
EOF
EXPECT=<<EOF
            ;-- entry0:
            ;-- section.module:
            ;-- <module>:
            0x0000002a      LOAD_CONST Multiline strings can be written
    using three "s, and are often used
    as documentation. ; [00] ---- section size 3218 named module
            0x0000002c      STORE_NAME             __doc__
            0x0000002e      LOAD_CONST                True
        ,=< 0x00000030      JUMP_IF_FALSE_OR_POP                  10
        |   0x00000032      LOAD_CONST               False
        `-> 0x00000034      POP_TOP
            0x00000036      LOAD_CONST               False
        ,=< 0x00000038      JUMP_IF_TRUE_OR_POP                  18
        |   0x0000003a      LOAD_CONST                True
        `-> 0x0000003c      POP_TOP
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc symbols for pyc2.7
FILE=bins/pyc/py27.pyc
CMDS=<<EOF
is~hello_world
EOF
EXPECT=<<EOF
1   0x00000052 0x00000052 NONE FUNC 9        <module>.hello_world
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc disasm for 2.7
FILE=bins/pyc/py27.pyc
CMDS=<<EOF
pd 10
EOF
EXPECT=<<EOF
            ;-- entry0:
            ;-- section.module:
            ;-- <module>:
            0x0000001e      LOAD_CONSTCodeObject(hello_world) from hello.py ; [00] ---- section size 25 named module
            0x00000021      MAKE_FUNCTION
            0x00000024      STORE_NAME         hello_world
            0x00000027      LOAD_CONST             'world'
            0x0000002a      PRINT_ITEM
            0x0000002b      PRINT_NEWLINE
            0x0000002c      LOAD_NAME         hello_world
            0x0000002f      CALL_FUNCTION0 positional, 0 named
            0x00000032      POP_TOP
            0x00000033      LOAD_CONST                None
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc function
FILE=bins/pyc/py27.pyc
CMDS=<<EOF
aa
e scr.utf8=false
pdf
EOF
EXPECT=<<EOF
            ;-- section.module:
            ;-- <module>:
/ entry0 ();
|           0x0000001e      LOAD_CONSTCodeObject(hello_world) from hello.py ; [00] ---- section size 25 named module
|           0x00000021      MAKE_FUNCTION
|           0x00000024      STORE_NAME         hello_world
|           0x00000027      LOAD_CONST             'world'
|           0x0000002a      PRINT_ITEM
|           0x0000002b      PRINT_NEWLINE
|           0x0000002c      LOAD_NAME         hello_world
|           0x0000002f      CALL_FUNCTION0 positional, 0 named
|           0x00000032      POP_TOP
|           0x00000033      LOAD_CONST                None
\           0x00000036      RETURN_VALUE
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN