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