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