1import unittest 2from petsc4py import PETSc 3from sys import getrefcount 4 5# -------------------------------------------------------------------- 6 7class TestOptions(unittest.TestCase): 8 9 PREFIX = 'myopts-' 10 OPTLIST = [('bool', True), 11 ('int', -7), 12 ('real', 5), 13 ('scalar', 3), 14 ('string', 'petsc4py'), 15 ] 16 17 def _putopts(self, opts=None, OPTLIST=None): 18 if opts is None: 19 opts = self.opts 20 if OPTLIST is None: 21 OPTLIST = self.OPTLIST 22 for k,v in OPTLIST: 23 opts[k] = v 24 def _delopts(self, opts=None, OPTLIST=None): 25 if opts is None: 26 opts = self.opts 27 if OPTLIST is None: 28 OPTLIST = self.OPTLIST 29 for k,v in OPTLIST: 30 del opts[k] 31 32 def setUp(self): 33 self.opts = PETSc.Options(self.PREFIX) 34 35 def tearDown(self): 36 self.opts = None 37 PETSc.garbage_cleanup() 38 39 def testHasOpts(self): 40 self._putopts() 41 for k, v in self.OPTLIST: 42 self.assertTrue(self.opts.hasName(k)) 43 self.assertTrue(k in self.opts) 44 missing = k+'-missing' 45 self.assertFalse(self.opts.hasName(missing)) 46 self.assertFalse(missing in self.opts) 47 self._delopts() 48 49 def testGetOpts(self): 50 self._putopts() 51 for k, v in self.OPTLIST: 52 getopt = getattr(self.opts, 'get'+k.title()) 53 self.assertEqual(getopt(k), v) 54 self._delopts() 55 56 def testGetAll(self): 57 self._putopts() 58 allopts = self.opts.getAll() 59 self.assertTrue(type(allopts) is dict) 60 optlist = [(k, str(v).lower()) 61 for (k,v) in self.OPTLIST] 62 for k,v in allopts.items(): 63 self.assertTrue((k, v) in optlist) 64 self._delopts() 65 66 def testGetAllQuoted(self): 67 dct = {'o0' : '"0 1 2"', 68 'o1' : '"a b c"', 69 'o2' : '"x y z"',} 70 for k in dct: 71 self.opts[k] = dct[k] 72 allopts = self.opts.getAll() 73 for k in dct: 74 self.assertEqual(allopts[k], dct[k][1:-1]) 75 del self.opts[k] 76 77 def testMonitor(self): 78 optlist = [] 79 mon = lambda n,v: optlist.append((n,v)) 80 self.opts.setMonitor(mon) 81 self.assertEqual(getrefcount(mon)-1, 2) 82 self._putopts() 83 target = [(self.PREFIX+k, str(v).lower()) 84 for k, v in self.OPTLIST] 85 self.assertEqual(optlist, target) 86 self.opts.cancelMonitor() 87 self.assertEqual(getrefcount(mon)-1, 1) 88 self._delopts() 89 90# -------------------------------------------------------------------- 91 92del TestOptions.testMonitor # XXX 93 94if __name__ == '__main__': 95 unittest.main() 96