Exemplo n.º 1
0
    def test_macro_name(self):
        source_scanner = SourceScanner()

        report = Report('/root')
        io_object = io.StringIO('#define MACRO __asm__("mov r0, r1")')
        source_scanner.scan_file_object('test.c', io_object, report)
        self.assertEqual(len(report.issues), 1)
        self.assertEqual(report.issues[0].function, 'MACRO')
Exemplo n.º 2
0
    def test_function_name(self):
        source_scanner = SourceScanner()

        report = Report('/root')
        io_object = io.StringIO('void func(void) {\n__asm__("mov r0, r1");\n}')
        source_scanner.scan_file_object('test.c', io_object, report)
        self.assertEqual(len(report.issues), 1)
        self.assertEqual(report.issues[0].function, 'func')
Exemplo n.º 3
0
    def test_no_equivalent_intrinsic_file(self):
        source_scanner = SourceScanner()
        port_filter = PortFilter()

        report = Report('/root')
        port_filter.initialize_report(report)
        source_scanner.initialize_report(report)
        io_object = io.StringIO('_otherarch_intrinsic_xyz(123)')
        report.add_source_file('otherarch.c')
        source_scanner.scan_file_object('otherarch.c', io_object, report)
        io_object = io.StringIO('foo')
        report.add_source_file('aarch64.c')
        source_scanner.scan_file_object('aarch64.c', io_object, report)
        source_scanner.finalize_report(report)
        port_filter.finalize_report(report)
        self.assertEqual(len(report.issues), 1)
Exemplo n.º 4
0
    def test_no_equivalent_inline_asm_single_file(self):
        source_scanner = SourceScanner()

        report = Report('/root')
        source_scanner.initialize_report(report)
        io_object = io.StringIO('__asm__("mov r0, r1"')
        source_scanner.scan_file_object('test.c', io_object, report)
        source_scanner.finalize_report(report)
        self.assertEqual(len(report.issues), 2)
Exemplo n.º 5
0
    def test_no_equivalent_intrinsic_function_inline(self):
        source_scanner = SourceScanner()

        report = Report('/root')
        source_scanner.initialize_report(report)
        io_object = io.StringIO(
            'void func() {\n#if defined(__otherarch__)\n_otherarch_intrinsic_xyz(123));\n#elif defined(__aarch64__)\nfoo\n#endif\n}'
        )
        source_scanner.scan_file_object('test.c', io_object, report)
        source_scanner.finalize_report(report)
        self.assertEqual(len(report.issues), 1)
Exemplo n.º 6
0
    def test_equivalent_inline_asm_function_outline(self):
        source_scanner = SourceScanner()

        report = Report('/root')
        source_scanner.initialize_report(report)
        io_object = io.StringIO(
            '#if defined(__otherarch__)\nvoid func() {\n__asm__("mov r0, r1");\n}\n#elif defined(__aarch64__)\nvoid func() {\n__asm__("mov r0, r1");\n}\n#endif'
        )
        source_scanner.scan_file_object('test.c', io_object, report)
        source_scanner.finalize_report(report)
        self.assertEqual(len(report.issues), 0)
Exemplo n.º 7
0
 def test_accepts_file(self):
     source_scanner = SourceScanner()
     self.assertFalse(source_scanner.accepts_file('test'))
     self.assertTrue(source_scanner.accepts_file('test.c'))
     self.assertTrue(source_scanner.accepts_file('test.cc'))
     self.assertTrue(source_scanner.accepts_file('test.CC'))
     self.assertTrue(source_scanner.accepts_file('test.f90'))
     self.assertTrue(source_scanner.accepts_file('test.F'))
Exemplo n.º 8
0
    def test_equivalent_inline_asm_file(self):
        source_scanner = SourceScanner()
        port_filter = PortFilter()

        report = Report('/root')
        port_filter.initialize_report(report)
        source_scanner.initialize_report(report)
        io_object = io.StringIO('__asm__("mov r0, r1")')
        report.add_source_file('otherarch.c')
        source_scanner.scan_file_object('otherarch.c', io_object, report)
        io_object = io.StringIO('__asm__("mov r0, r1")')
        report.add_source_file('aarch64.c')
        source_scanner.scan_file_object('aarch64.c', io_object, report)
        source_scanner.finalize_report(report)
        port_filter.finalize_report(report)
        self.assertEqual(len(report.issues), 0)
        found_ported_remark = False
        for remark in report.remarks:
            if isinstance(remark, PortedInlineAsmRemark):
                found_ported_remark = True
                break
        self.assertTrue(found_ported_remark)
Exemplo n.º 9
0
    def test_comments_are_ignored(self):
        source_scanner = SourceScanner()

        report = Report('/root')
        io_object = io.StringIO('// __asm__("mov r0, r1")')
        source_scanner.scan_file_object('test.c', io_object, report)
        self.assertEqual(len(report.issues), 0)

        report = Report('/root')
        io_object = io.StringIO('/*\n__asm__("mov r0, r1")\n*/')
        source_scanner.scan_file_object('test.c', io_object, report)
        self.assertEqual(len(report.issues), 0)
Exemplo n.º 10
0
    def test_output(self):
        config_guess_scanner = ConfigGuessScanner()
        source_scanner = SourceScanner()

        report = CsvReport('/root')
        report.add_source_file('test_negative.c')
        io_object = io.StringIO('__asm__("mov r0, r1")')
        source_scanner.scan_file_object(
            'test_negative.c', io_object, report)
        report.add_source_file('test_neutral.c')
        io_object = io.StringIO('#pragma simd foo')
        source_scanner.scan_file_object(
            'test_neutral.c', io_object, report)
        report.add_source_file('config.guess')
        io_object = io.StringIO('aarch64:Linux')
        config_guess_scanner.scan_file_object(
            'config.guess', io_object, report)
        self.assertEqual(len(report.issues), 2)
        self.assertEqual(len(report.remarks), 1)

        with tempfile.NamedTemporaryFile(mode='w', delete=False) as ofp:
            report.write(ofp)
            fname = ofp.name
            ofp.close()

            with open(fname) as ifp:
                csv_reader = csv.DictReader(ifp)
                seen_issue1 = False
                seen_issue2 = False
                for row in csv_reader:
                    if 'test_negative.c' in row['filename']:
                        self.assertIn('InlineAsm', row['issue_type'])
                        seen_issue1 = True
                    elif 'test_neutral.c' in row['filename']:
                        self.assertIn('PragmaSimd', row['issue_type'])
                        seen_issue2 = True
                    else:
                        self.fail('Unexpected row in CSV output')
                self.assertTrue(seen_issue1)
                self.assertTrue(seen_issue2)
Exemplo n.º 11
0
    def test_scan_file_object(self):
        source_scanner = SourceScanner()

        report = Report('/root')
        io_object = io.StringIO('xxx')
        source_scanner.scan_file_object('test.c', io_object, report)
        self.assertEqual(len(report.issues), 0)

        report = Report('/root')
        io_object = io.StringIO('__asm__("")')
        source_scanner.scan_file_object('test.c', io_object, report)
        self.assertEqual(len(report.issues), 0)

        report = Report('/root')
        io_object = io.StringIO('__asm__("mov r0, r1")')
        source_scanner.scan_file_object('test.c', io_object, report)
        self.assertEqual(len(report.issues), 1)

        report = Report('/root')
        io_object = io.StringIO('_otherarch_intrinsic_xyz(123)')
        source_scanner.scan_file_object('test.c', io_object, report)
        self.assertEqual(len(report.issues), 1)

        report = Report('/root')
        io_object = io.StringIO('#pragma simd foo')
        source_scanner.scan_file_object('test.c', io_object, report)
        self.assertEqual(len(report.issues), 1)
        self.assertEqual(report.issues[0].item_type, ReportItem.NEUTRAL)
    def test_output(self):
        config_guess_scanner = ConfigGuessScanner()
        source_scanner = SourceScanner()

        issue_type_config = IssueTypeConfig()
        report = CsvIssueTypeCountByFileReport('/root', issue_type_config=issue_type_config)
        report.add_source_file('test_negative.c')
        io_object = io.StringIO('__asm__("mov r0, r1")')
        source_scanner.scan_file_object(
            'test_negative.c', io_object, report)
        report.add_source_file('test_neutral.c')
        io_object = io.StringIO('#pragma simd foo')
        source_scanner.scan_file_object(
            'test_neutral.c', io_object, report)
        report.add_source_file('config.guess')
        io_object = io.StringIO('aarch64:Linux')
        config_guess_scanner.scan_file_object(
            'config.guess', io_object, report)
        report.add_source_file('test_nothing.c')
        io_object = io.StringIO('foobar')
        source_scanner.scan_file_object(
            'test_nothing.c', io_object, report)
        self.assertEqual(len(report.issues), 2)
        self.assertEqual(len(report.remarks), 1)

        with tempfile.NamedTemporaryFile(mode='w', delete=False) as ofp:
            report.write(ofp)
            fname = ofp.name
            ofp.close()

            with open(fname) as ifp:
                csv_reader = csv.DictReader(ifp)
                seen_negative = False
                seen_neutral = False
                seen_config_guess = False
                seen_nothing = False
                for row in csv_reader:
                    if 'test_negative.c' in row['filename']:
                        seen_negative = True
                        for (field, actual) in row.items():
                            if field == 'filename':
                                continue
                            expected = '1' if field == 'InlineAsm' else '0'
                            self.assertEqual(expected, actual)
                    elif 'test_neutral.c' in row['filename']:
                        seen_neutral = True
                        for (field, actual) in row.items():
                            if field == 'filename':
                                continue
                            expected = '1' if field == 'PragmaSimd' else '0'
                            self.assertEqual(expected, actual)
                    elif 'config.guess' in row['filename']:
                        seen_config_guess = True
                        for (field, actual) in row.items():
                            if field == 'filename':
                                continue
                            self.assertEqual('0', actual)
                    elif 'test_nothing.c' in row['filename']:
                        seen_nothing = True
                        for (field, actual) in row.items():
                            if field == 'filename':
                                continue
                            self.assertEqual('0', actual)
                    else:
                        print(row)
                        self.fail('Unexpected row in CSV output')
                self.assertTrue(seen_negative)
                self.assertTrue(seen_neutral)
                self.assertTrue(seen_config_guess)
                self.assertTrue(seen_nothing)