diff --git a/dacapo/dynamic_analysis.py b/dacapo/dynamic_analysis.py index 15e04693c79cc5ebc138b763b2aa5df6ab827e80..99f2948d32e6a079d1a4e0f81caa64be28b6c905 100644 --- a/dacapo/dynamic_analysis.py +++ b/dacapo/dynamic_analysis.py @@ -59,3 +59,8 @@ class DynamicAnalysis(object): """Returns the number of dynamic analysis results.""" return len(self._benchmarks) + def __repr__(self): + invocations = range(1, len(self._benchmarks)+1) + return '\n'.join(['Invocation %s\n%s' % pair + for pair in zip(invocations, self._benchmarks)]) + diff --git a/dacapo/report.py b/dacapo/report.py index 1d9b6e59c003912116dbc24b52df43c3f51a76d0..ca16162b6fd98313e2733864134bbb3ed596b28e 100644 --- a/dacapo/report.py +++ b/dacapo/report.py @@ -94,3 +94,22 @@ class Report(object): def label(self, value): """Sets the value of the label that describes this report.""" self._label = value + + def __repr__(self): + + static_analysis = repr(self._static_analysis) + + dyn_analysis_values = ['Benchmark: %s\n%s' % (bm, val) + for bm, val in self._dyn_analysis.iteritems()] + + dyn_analysis = '###'.join(dyn_analysis_values) + + return ''' +############ Dynamic Analysis ############ +%s + +############ Static Analysis ############ +%s + +''' % (dyn_analysis, static_analysis) + diff --git a/dacapo/run.py b/dacapo/run.py index 4abd0734146cc811e994560b4f8138713f76f959..609847cade1957a902a0feb0c052cabbc48bd8c2 100644 --- a/dacapo/run.py +++ b/dacapo/run.py @@ -156,22 +156,21 @@ performed on loaded classes during execution of a given benchmark. def main(): - input_args = vars(_generate_main_args().parse_args()) + parse = _generate_main_args() + input_args = vars(parse.parse_args()) filtered_args = {x: y for x, y in input_args.iteritems() if y} - try: - run = Run() - run.config(**filtered_args) - - if 'static_analysis' in filtered_args: - run.run_ckjm() - elif 'events' in filtered_args: - run.run_perf() - else: - run.run_ckjm() - - except RuntimeError as err: - print err + run = Run() + run.config(**filtered_args) + + if 'static_analysis' in filtered_args: + print run.run_ckjm() + elif 'events' in filtered_args: + print run.run_perf() + elif 'dacapo' in filtered_args: + print run.run_ckjm() + else: + parse.print_help() if __name__ == '__main__': main() diff --git a/dacapo/static_analysis.py b/dacapo/static_analysis.py index 5a3dd681941c920dec6bcdb05fea0ce5365fabe7..af59bba3be429883ff3d880f22aa4ff63db724ba 100644 --- a/dacapo/static_analysis.py +++ b/dacapo/static_analysis.py @@ -144,4 +144,6 @@ class StaticAnalysis(object): return self._df.loc[self._df['class'] == class_name] def __repr__(self): - return repr(self._df) + if self._df.size: + return repr(self._df) + return '' diff --git a/tests/dynamic_analysis_test.py b/tests/dynamic_analysis_test.py index 5bec52d66d5b6e3d6efe279f967358486db1867d..4493b5ab6fdb268ac55c1b028d5b51e30ee0f8d5 100644 --- a/tests/dynamic_analysis_test.py +++ b/tests/dynamic_analysis_test.py @@ -29,5 +29,18 @@ class TestDynamicAnalysis(unittest.TestCase): self.assertTrue(dyn_analysis.get_invocation(0).equals(self._ref_df)) + def test_repr_empty(self): + dyn_analysis = DynamicAnalysis() + str_value = repr(dyn_analysis) + self.assertEqual(str_value, '') + + def test_repr(self): + dyn_analysis = DynamicAnalysis() + dyn_analysis.add_invocation(self._ref_df) + str_value = repr(dyn_analysis) + self.assertEqual(str_value, '\n'.join(['Invocation %s\n%s' % + (1, str(self._ref_df))])) + + if __name__ == '__main__': unittest.main() diff --git a/tests/report_test.py b/tests/report_test.py index 23cfc02abb4414bbfabd2839d59cfe3cbc1ebfe9..b167959a5145d5a99c546da64a6874fd65b01aab 100644 --- a/tests/report_test.py +++ b/tests/report_test.py @@ -1,8 +1,8 @@ """Test class for the report.""" import unittest -import pandas as pd from dacapo.report import Report +import pandas as pd class TestReport(unittest.TestCase): @@ -38,7 +38,19 @@ class TestReport(unittest.TestCase): ref = pd.DataFrame(test_result) report.add_dyn_analysis('fop', test_result) self.assertEqual(report.number_of_dyn_analyses, 1) - self.assertTrue(report.get_dyn_analysis('fop').get_invocation(0).equals(ref)) + self.assertTrue(report.get_dyn_analysis('fop').get_invocation(0) + .equals(ref)) + + def test_repr(self): + report = Report() + str_value = ''' +############ Dynamic Analysis ############ + + +############ Static Analysis ############ + +''' + self.assertEqual(repr(report), str_value) if __name__ == '__main__': unittest.main() diff --git a/tests/static_analysis_test.py b/tests/static_analysis_test.py index 17f94e170cf6d79f10fe1456c90e4e6cd3728a19..a2745101972bc95de7da1b9c4ecfe0374406babf 100644 --- a/tests/static_analysis_test.py +++ b/tests/static_analysis_test.py @@ -2,6 +2,7 @@ import unittest from dacapo.static_analysis import StaticAnalysis +import mock class TestStaticAnalysis(unittest.TestCase): @@ -17,9 +18,26 @@ class TestStaticAnalysis(unittest.TestCase): def test_bad_store(self): static_analysis = StaticAnalysis() - self.assertRaises(ValueError, static_analysis, 'class 1 2 3 4 5 6 7') - self.assertRaises(ValueError, static_analysis, '1 2 3 4 5 6 7 8') - self.assertRaises(ValueError, static_analysis, 'class 1 2 3 4 5 6 7 8 9') + self.assertRaises(ValueError, static_analysis._store_result, + 'class 1 2 3 4 5 6 7') + self.assertRaises(ValueError, static_analysis._store_result, + '1 2 3 4 5 6 7 8') + self.assertRaises(ValueError, static_analysis._store_result, + 'class 1 2 3 4 5 6 7 8 9') + + def test_repr_empty(self): + static_analysis = StaticAnalysis() + str_value = repr(static_analysis) + self.assertEqual(str_value, '') + + @mock.patch('pandas.DataFrame') + def test_repr(self, mock_df): + mock_df.return_value.__repr__ = mock.Mock(return_value='static_analysis') + static_analysis = StaticAnalysis() + static_analysis._store_result('class 1 2 3 4 5 6 7 8') + str_value = repr(static_analysis) + self.assertEqual(str_value, 'static_analysis') + if __name__ == '__main__': unittest.main() diff --git a/tests/testsuite.py b/tests/testsuite.py index 47250825e148ed0c1f8d2ca9e5e888559ccf21f2..5b2a85e87c62b4e8e147c7d3dc225220cca75da6 100644 --- a/tests/testsuite.py +++ b/tests/testsuite.py @@ -9,6 +9,7 @@ from tests.parser_test import TestStaticAnalysisParser from tests.plot_test import TestPlot from tests.report_test import TestReport from tests.run_test import TestRun +from tests.static_analysis_test import TestStaticAnalysis from tests.util_test import TestUtil @@ -17,6 +18,7 @@ def _get_test_cases(): unittest.TestLoader().loadTestsFromTestCase(TestRun), unittest.TestLoader().loadTestsFromTestCase(TestProbesParser), unittest.TestLoader().loadTestsFromTestCase(TestStaticAnalysisParser), + unittest.TestLoader().loadTestsFromTestCase(TestStaticAnalysis), unittest.TestLoader().loadTestsFromTestCase(TestUtil), unittest.TestLoader().loadTestsFromTestCase(TestDynamicAnalysis), unittest.TestLoader().loadTestsFromTestCase(TestReport),