15808f684SSatish Balay# -------------------------------------------------------------------- 25808f684SSatish Balay 36f336411SStefano Zampiniif __name__ == '__main__': 46f336411SStefano Zampini import sys 56f336411SStefano Zampini import petsc4py 66f336411SStefano Zampini 7d75802c7SJacob Faibussowitsch petsc4py.init(sys.argv + ['-log_view']) 85808f684SSatish Balay 95808f684SSatish Balay# -------------------------------------------------------------------- 105808f684SSatish Balay 115808f684SSatish Balayfrom petsc4py import PETSc 125808f684SSatish Balayimport unittest 135808f684SSatish Balay 145808f684SSatish Balay# -------------------------------------------------------------------- 155808f684SSatish Balay 165808f684SSatish Balay 176f336411SStefano Zampiniclass TestLog(unittest.TestCase): 185808f684SSatish Balay def setUp(self): 195808f684SSatish Balay # PETSc.Log.begin() 205808f684SSatish Balay # register stages 215808f684SSatish Balay self.stage1 = PETSc.Log.Stage('Stage 1') 225808f684SSatish Balay self.stage2 = PETSc.Log.Stage('Stage 2') 235808f684SSatish Balay # register classes 245808f684SSatish Balay self.klassA = PETSc.Log.Class('Class A') 255808f684SSatish Balay self.klassB = PETSc.Log.Class('Class B') 265808f684SSatish Balay # register events 275808f684SSatish Balay self.event1 = PETSc.Log.Event('Event 1') # no class 285808f684SSatish Balay self.event2 = PETSc.Log.Event('Event 2') # no class 295808f684SSatish Balay self.eventA = PETSc.Log.Event('Event A', self.klassA) 305808f684SSatish Balay self.eventB = PETSc.Log.Event('Event B', self.klassB) 315808f684SSatish Balay 325808f684SSatish Balay def testGetName(self): 335808f684SSatish Balay self.assertEqual(self.klassA.name, 'Class A') 345808f684SSatish Balay self.assertEqual(self.klassB.name, 'Class B') 355808f684SSatish Balay self.assertEqual(self.event1.name, 'Event 1') 365808f684SSatish Balay self.assertEqual(self.event2.name, 'Event 2') 375808f684SSatish Balay self.assertEqual(self.eventA.name, 'Event A') 385808f684SSatish Balay self.assertEqual(self.eventB.name, 'Event B') 395808f684SSatish Balay self.assertEqual(self.stage1.name, 'Stage 1') 405808f684SSatish Balay self.assertEqual(self.stage2.name, 'Stage 2') 415808f684SSatish Balay 425808f684SSatish Balay def testLogBeginEnd(self): 435808f684SSatish Balay # ----- 445808f684SSatish Balay self._run_events() # in main stage 455808f684SSatish Balay self._run_stages() # in user stages 465808f684SSatish Balay # ----- 475808f684SSatish Balay for event in self._get_events(): 485808f684SSatish Balay event.deactivate() 495808f684SSatish Balay event.setActive(False) 505808f684SSatish Balay event.active = False 515808f684SSatish Balay self._run_events() # should not be logged 525808f684SSatish Balay for event in self._get_events(): 535808f684SSatish Balay event.activate() 545808f684SSatish Balay event.setActive(True) 555808f684SSatish Balay event.active = True 565808f684SSatish Balay # ----- 575808f684SSatish Balay for klass in self._get_classes(): 585808f684SSatish Balay klass.deactivate() 595808f684SSatish Balay klass.setActive(False) 605808f684SSatish Balay klass.active = False 615808f684SSatish Balay self._run_events() # A and B should not be logged 625808f684SSatish Balay for klass in self._get_classes(): 635808f684SSatish Balay klass.activate() 645808f684SSatish Balay klass.setActive(True) 655808f684SSatish Balay klass.active = True 665808f684SSatish Balay # ----- 675808f684SSatish Balay for stage in self._get_stages(): 685808f684SSatish Balay active = stage.getActive() 695808f684SSatish Balay self.assertTrue(active) 705808f684SSatish Balay self.assertTrue(stage.active) 715808f684SSatish Balay stage.setActive(False) 725808f684SSatish Balay active = stage.getActive() 735808f684SSatish Balay self.assertFalse(active) 745808f684SSatish Balay self.assertFalse(stage.active) 755808f684SSatish Balay self._run_stages() # should not be logged 765808f684SSatish Balay for stage in self._get_stages(): 775808f684SSatish Balay stage.setActive(True) 785808f684SSatish Balay stage.active = True 795808f684SSatish Balay active = stage.getActive() 805808f684SSatish Balay self.assertTrue(active) 815808f684SSatish Balay self.assertTrue(stage.active) 825808f684SSatish Balay # ----- 835808f684SSatish Balay self._run_events() 845808f684SSatish Balay self._run_stages() 855808f684SSatish Balay 86*52c9054eSConnor Ward def test_log_decorator(self): 87*52c9054eSConnor Ward timed_func = PETSc.Log.EventDecorator()(lambda: None) 88*52c9054eSConnor Ward timed_func() 89*52c9054eSConnor Ward 905808f684SSatish Balay def _run_stages(self): 915808f684SSatish Balay for stage in self._get_stages(): 925808f684SSatish Balay self._run_events(stage) 935808f684SSatish Balay 945808f684SSatish Balay def _get_stages(self): 955808f684SSatish Balay return (self.stage1, self.stage2) 965808f684SSatish Balay 975808f684SSatish Balay def _get_classes(self): 985808f684SSatish Balay return (self.klassA, self.klassB) 995808f684SSatish Balay 1005808f684SSatish Balay def _get_events(self): 1016f336411SStefano Zampini return (self.event1, self.event2, self.eventA, self.eventB) 1025808f684SSatish Balay 1035808f684SSatish Balay def _run_events(self, stage=None): 1045808f684SSatish Balay if stage is not None: 1055808f684SSatish Balay stage.push() 1065808f684SSatish Balay self._events_begin() 1075808f684SSatish Balay self._events_end() 1085808f684SSatish Balay if stage is not None: 1095808f684SSatish Balay stage.pop() 1105808f684SSatish Balay 1115808f684SSatish Balay def _events_begin(self): 1125808f684SSatish Balay for event in self._get_events(): 1135808f684SSatish Balay event.begin() 1145808f684SSatish Balay 1155808f684SSatish Balay def _events_end(self): 1165808f684SSatish Balay for event in reversed(self._get_events()): 1175808f684SSatish Balay event.end() 1185808f684SSatish Balay 1195808f684SSatish Balay 1205808f684SSatish Balay# -------------------------------------------------------------------- 1215808f684SSatish Balay 1225808f684SSatish Balayif __name__ == '__main__': 1235808f684SSatish Balay unittest.main() 124