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