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