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 38 def testHasOpts(self): 39 self._putopts() 40 for k, v in self.OPTLIST: 41 self.assertTrue(self.opts.hasName(k)) 42 self.assertTrue(k in self.opts) 43 missing = k+'-missing' 44 self.assertFalse(self.opts.hasName(missing)) 45 self.assertFalse(missing in self.opts) 46 self._delopts() 47 48 def testGetOpts(self): 49 self._putopts() 50 for k, v in self.OPTLIST: 51 getopt = getattr(self.opts, 'get'+k.title()) 52 self.assertEqual(getopt(k), v) 53 self._delopts() 54 55 def testGetAll(self): 56 self._putopts() 57 allopts = self.opts.getAll() 58 self.assertTrue(type(allopts) is dict) 59 optlist = [(k, str(v).lower()) 60 for (k,v) in self.OPTLIST] 61 for k,v in allopts.items(): 62 self.assertTrue((k, v) in optlist) 63 self._delopts() 64 65 def testGetAllQuoted(self): 66 dct = {'o0' : '"0 1 2"', 67 'o1' : '"a b c"', 68 'o2' : '"x y z"',} 69 for k in dct: 70 self.opts[k] = dct[k] 71 allopts = self.opts.getAll() 72 for k in dct: 73 self.assertEqual(allopts[k], dct[k][1:-1]) 74 del self.opts[k] 75 76 def testMonitor(self): 77 optlist = [] 78 mon = lambda n,v: optlist.append((n,v)) 79 self.opts.setMonitor(mon) 80 self.assertEqual(getrefcount(mon)-1, 2) 81 self._putopts() 82 target = [(self.PREFIX+k, str(v).lower()) 83 for k, v in self.OPTLIST] 84 self.assertEqual(optlist, target) 85 self.opts.cancelMonitor() 86 self.assertEqual(getrefcount(mon)-1, 1) 87 self._delopts() 88 89# -------------------------------------------------------------------- 90 91del TestOptions.testMonitor # XXX 92 93if __name__ == '__main__': 94 unittest.main() 95