def __init__(self):
     self._line_feeder = LineFeeder()
     self._combinations = []  # combination of file path and pattern
     self._algorithms = set()
     self._time_results = {}
     self._mem_results = {}
     self._tick_labels = []
 def test_match_letter(self):
     self._algorithm.get_pattern = Mock(return_value="l")
     self._algorithm.get_results = Mock(
         side_effect=[[1], [3, 7], [], [0, 5, 10, 16], [6, 10, 12, 15, 23],
                      [11, 16], [1], [0, 4], [14], [1]])
     lf = LineFeeder(self._algorithm, self._filename)
     self.assertEqual([
         1, 5, 9, 21, 26, 31, 37, 44, 48, 50, 53, 61, 74, 79, 83, 87, 91,
         106, 111
     ], lf.get_results())
    def test_single_letter(self):
        _filename = "line_feeder_integrationtest_file.txt"
        file = open(_filename, 'w')
        file.write("aa\naa\naaa\naa")
        file.close()

        pattern = "a"
        algorithm = BoyerMoore(self._get_heuristic(), pattern)
        lf = LineFeeder(algorithm, _filename)
        res = lf.get_results()
        self.assertEqual(res, [0, 1, 2, 3, 4, 5, 6, 7, 8])
        os.remove(_filename)
    def test_find_single_match(self):
        _filename = "line_feeder_integrationtest_file.txt"
        file = open(_filename, 'w')
        file.write("asdjasd\nvhajsdv\najsdbh\nasjd\n asdbha sjasdjasv\nbdjas")
        file.close()

        pattern = "jasdj"
        algorithm = BoyerMoore(self._get_heuristic(), pattern)
        lf = LineFeeder(algorithm, _filename)
        res = lf.get_results()
        self.assertEqual(res, [33])
        os.remove(_filename)
    def test_more_match(self):
        _filename = "line_feeder_integrationtest_file.txt"
        file = open(_filename, 'w')
        file.write(
            "\nasaj\nakvhajsdajakvvajsd\nbajakvhas\njd asajakvdbha sjasdjaja\nkvasvbd\njas\n\n\n"
        )
        file.close()

        pattern = "ajakv"
        algorithm = BoyerMoore(self._get_heuristic(), pattern)
        lf = LineFeeder(algorithm, _filename)
        res = lf.get_results()
        self.assertEqual(res, [2, 12, 23, 36, 52])
        os.remove(_filename)
class PerformanceAnalyser:
    def __init__(self):
        self._line_feeder = LineFeeder()
        self._combinations = []  # combination of file path and pattern
        self._algorithms = set()
        self._time_results = {}
        self._mem_results = {}
        self._tick_labels = []

    def add_path_pattern(self, path, pattern):
        self._combinations.append((path, pattern))

    def add_algorithm(self, algorithm_):
        self._algorithms.add(algorithm_)

    def analyse(self):

        for path, pattern in self._combinations:
            self._tick_labels.append('PATTERN: ' + pattern + '     PATH: ' +
                                     path)
            for algo in self._algorithms:

                algo.set_pattern(pattern)
                self._line_feeder.set_algorithm(algo)
                self._line_feeder.set_file_path(path)

                execution_time = timer_decorator(
                    self._line_feeder.get_results)()
                self._time_results.setdefault(algo.get_name(),
                                              []).append(execution_time)

                algo.set_pattern(pattern)
                self._line_feeder.set_algorithm(algo)
                self._line_feeder.set_file_path(path)

                self._mem_results.setdefault(algo.get_name(), []).append(
                    memory_decorator(
                        self._line_feeder.get_results)(execution_time))

    def show_results(self):
        BarChartTable.create_result_window(
            "Time analysis", '', 'Time(sec)', self._time_results,
            [str(i + 1) for i in range(len(self._tick_labels))])
        BarChartTable.create_result_window(
            "Memory analysis", '', 'Memory(MB)', self._mem_results,
            [str(i + 1) for i in range(len(self._tick_labels))])
        data = [[str(i + 1), elem] for i, elem in enumerate(self._tick_labels)]
        BarChartTable.create_table(data)
        BarChartTable.show_result()
 def test_match(self):
     self._algorithm.get_pattern = Mock(return_value="lamil")
     self._algorithm.get_results = Mock(
         side_effect=[[5], [], [], [10], [], [], [4], [], []])
     lf = LineFeeder(self._algorithm, self._filename)
     self.assertEqual([5, 44, 87], lf.get_results())
 def test_no_match(self):
     self._algorithm.get_pattern = Mock(return_value="aaaaa")
     self._algorithm.get_results = Mock(return_value=[])
     lf = LineFeeder(self._algorithm, self._filename)
     self.assertEqual([], lf.get_results())