Exemple #1
0
def test_transform(testcase):
    """Perform a runtime checking transformation test case."""
    expected = remove_comment_lines(testcase.output)
    try:
        # Construct input as a single single.
        src = "\n".join(testcase.input)
        # Parse and type check the input program. Perform transform manually
        # so that we can skip some files.
        result = build.build(program_text=src, program_path="main", target=build.TRANSFORM, alt_lib_path=test_temp_dir)
        a = []
        first = True
        # Transform each file separately.
        for fnam in sorted(result.files.keys()):
            f = result.files[fnam]
            # Skip the builtins module and files with '_skip.' in the path.
            if not f.path.endswith("/builtins.py") and "_skip." not in f.path:
                if not first:
                    # Display path for files other than the first.
                    a.append("{}:".format(remove_prefix(f.path, test_temp_dir)))

                # Pretty print the transformed tree.
                v2 = PrettyPrintVisitor()
                f.accept(v2)
                s = v2.output()
                if s != "":
                    a += s.split("\n")
            first = False
    except CompileError as e:
        a = e.messages
    assert_string_arrays_equal_wildcards(
        expected, a, "Invalid source code output ({}, line {})".format(testcase.file, testcase.line)
    )
Exemple #2
0
def test_transform(testcase):
    """Perform a runtime checking transformation test case."""
    expected = remove_comment_lines(testcase.output)

    func_names = get_func_names(expected)

    try:
        # Construct input as a single single.
        src = '\n'.join(testcase.input)
        # Parse and type check the input program.
        result = build.build(src, program_path='main',
                             target=build.ICODE,
                             alt_lib_path=test_temp_dir)
        a = []
        for fn in func_names:
            a.append('def {}:'.format(fn))
            try:
                funccode = result.icode[fn]
            except KeyError:
                raise RuntimeError('no icode for %s (%s)' % (
                    fn, list(result.icode.keys())))
            code = icode.render(funccode)
            a.extend(code)
    except CompileError as e:
        a = e.messages
    assert_string_arrays_equal_wildcards(
        expected, a,
        'Invalid source code output ({}, line {})'.format(testcase.file,
                                                          testcase.line))
Exemple #3
0
def test_op_gen(testcase):
    """Perform a type operation support data and code genereation test case."""
    any a
    expected = remove_comment_lines(testcase.output)
    try:
        src = '\n'.join(testcase.input)
        # Parse and type check the input program.
        trees, symtable, infos, types = build(src, 'main', False,
                                              test_temp_dir, True)
        a = []
        first = True
        # Transform each file separately.
        for t in trees:
            # Skip the builtins module and files with '_skip.' in the path.
            if not t.path.endswith('/builtins.py') and '_skip.' not in t.path:
                if not first:
                    # Display path for files other than the first.
                    a.append('{}:'.format(
                        remove_prefix(t.path, test_temp_dir)))
                
                # Transform parse tree and produce the code for operations.
                # Note that currently we generate this for each file
                # separately; this needs to be fixed eventually.
                v = DyncheckTransformVisitor(types, symtable, True)
                t.accept(v)
                s = generate_runtime_support(t)
                if s != '':
                    a += s.split('\n')
            first = False
    except CompileError as e:
        a = e.messages
    assert_string_arrays_equal_wildcards(
        expected, a,
        'Invalid source code output ({}, line {})'.format(testcase.file,
                                                          testcase.line))
Exemple #4
0
def test_cgen_compile(testcase):
    # Build the program.
    text = '\n'.join(testcase.input)
    try:
        build.build(text, '_program.py', target=build.C, alt_lib_path='lib',
                    flags=[build.COMPILE_ONLY])
        outfile = '_program.c'
        f = open(outfile)
        out = [s.rstrip('\n\r') for s in f.readlines()]
        f.close()
        os.remove(outfile)
    except errors.CompileError as e:
        out = e.messages
    # Verify output.
    assert_string_arrays_equal_wildcards(testcase.output, out,
                               'Invalid output ({}, line {})'.format(
                                   testcase.file, testcase.line))
Exemple #5
0
def test_transform(testcase):
    """Perform a runtime checking transformation test case."""
    expected = remove_comment_lines(testcase.output)
    try:
        # Construct input as a single single.
        src = "\n".join(testcase.input)
        # Parse and type check the input program.
        trees, symtable, infos, types = build(
            program_text=src,
            program_file_name="main",
            use_test_builtins=False,
            alt_lib_path=test_temp_dir,
            do_type_check=True,
        )
        a = []
        first = True
        # Transform each file separately.
        for t in trees:
            # Skip the builtins module and files with '_skip.' in the path.
            if not t.path.endswith("/builtins.py") and "_skip." not in t.path:
                if not first:
                    # Display path for files other than the first.
                    a.append("{}:".format(remove_prefix(t.path, test_temp_dir)))

                # Transform parse tree and produce pretty-printed output.
                v = DyncheckTransformVisitor(types, symtable, True)
                t.accept(v)
                # Pretty print the transformed tree.
                v2 = PrettyPrintVisitor()
                t.accept(v2)
                s = v2.output()
                if s != "":
                    a += s.split("\n")
            first = False
    except CompileError as e:
        a = e.messages
    assert_string_arrays_equal_wildcards(
        expected, a, "Invalid source code output ({}, line {})".format(testcase.file, testcase.line)
    )