xref: /petsc/src/binding/petsc4py/test/test_log.py (revision 1b37a2a7cc4a4fb30c3e967db1c694c0a1013f51)
1# --------------------------------------------------------------------
2
3if __name__ == "__main__":
4    import sys, petsc4py
5    petsc4py.init(sys.argv+['-log_view'])
6
7# --------------------------------------------------------------------
8
9from petsc4py import PETSc
10import unittest
11
12# --------------------------------------------------------------------
13
14class TestLog(unittest.TestCase):
15
16    def setUp(self):
17        #PETSc.Log.begin()
18        # register stages
19        self.stage1 = PETSc.Log.Stage('Stage 1')
20        self.stage2 = PETSc.Log.Stage('Stage 2')
21        # register classes
22        self.klassA = PETSc.Log.Class('Class A')
23        self.klassB = PETSc.Log.Class('Class B')
24        # register events
25        self.event1 = PETSc.Log.Event('Event 1') # no class
26        self.event2 = PETSc.Log.Event('Event 2') # no class
27        self.eventA = PETSc.Log.Event('Event A', self.klassA)
28        self.eventB = PETSc.Log.Event('Event B', self.klassB)
29
30    def testGetName(self):
31        self.assertEqual(self.klassA.name, 'Class A')
32        self.assertEqual(self.klassB.name, 'Class B')
33        self.assertEqual(self.event1.name, 'Event 1')
34        self.assertEqual(self.event2.name, 'Event 2')
35        self.assertEqual(self.eventA.name, 'Event A')
36        self.assertEqual(self.eventB.name, 'Event B')
37        self.assertEqual(self.stage1.name, 'Stage 1')
38        self.assertEqual(self.stage2.name, 'Stage 2')
39
40    def testLogBeginEnd(self):
41        # -----
42        self._run_events() # in main stage
43        self._run_stages() # in user stages
44        # -----
45        for event in self._get_events():
46            event.deactivate()
47            event.setActive(False)
48            event.active = False
49        self._run_events() # should not be logged
50        for event in self._get_events():
51            event.activate()
52            event.setActive(True)
53            event.active = True
54        # -----
55        for klass in self._get_classes():
56            klass.deactivate()
57            klass.setActive(False)
58            klass.active = False
59        self._run_events() # A and B should not be logged
60        for klass in self._get_classes():
61            klass.activate()
62            klass.setActive(True)
63            klass.active = True
64        # -----
65        for stage in self._get_stages():
66            active = stage.getActive()
67            self.assertTrue(active)
68            self.assertTrue(stage.active)
69            stage.setActive(False)
70            active = stage.getActive()
71            self.assertFalse(active)
72            self.assertFalse(stage.active)
73        self._run_stages() # should not be logged
74        for stage in self._get_stages():
75            stage.setActive(True)
76            stage.active = True
77            active = stage.getActive()
78            self.assertTrue(active)
79            self.assertTrue(stage.active)
80        # -----
81        self._run_events()
82        self._run_stages()
83
84    def _run_stages(self):
85        for stage in self._get_stages():
86            self._run_events(stage)
87
88    def _get_stages(self):
89        return (self.stage1, self.stage2)
90
91    def _get_classes(self):
92        return (self.klassA, self.klassB)
93
94    def _get_events(self):
95        return (self.event1, self.event2,
96                self.eventA, self.eventB)
97
98    def _run_events(self, stage=None):
99        if stage is not None:
100            stage.push()
101        self._events_begin()
102        self._events_end()
103        if stage is not None:
104            stage.pop()
105
106    def _events_begin(self):
107        for event in self._get_events():
108            event.begin()
109
110    def _events_end(self):
111        for event in reversed(self._get_events()):
112            event.end()
113
114
115# --------------------------------------------------------------------
116
117if __name__ == '__main__':
118    unittest.main()
119
120