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 test_log_decorator(self): 87 timed_func = PETSc.Log.EventDecorator()(lambda: None) 88 timed_func() 89 90 def _run_stages(self): 91 for stage in self._get_stages(): 92 self._run_events(stage) 93 94 def _get_stages(self): 95 return (self.stage1, self.stage2) 96 97 def _get_classes(self): 98 return (self.klassA, self.klassB) 99 100 def _get_events(self): 101 return (self.event1, self.event2, self.eventA, self.eventB) 102 103 def _run_events(self, stage=None): 104 if stage is not None: 105 stage.push() 106 self._events_begin() 107 self._events_end() 108 if stage is not None: 109 stage.pop() 110 111 def _events_begin(self): 112 for event in self._get_events(): 113 event.begin() 114 115 def _events_end(self): 116 for event in reversed(self._get_events()): 117 event.end() 118 119 120# -------------------------------------------------------------------- 121 122if __name__ == '__main__': 123 unittest.main() 124