15808f684SSatish Balayimport unittest 25808f684SSatish Balayfrom petsc4py import PETSc 35808f684SSatish Balayfrom sys import getrefcount 45808f684SSatish Balay 55808f684SSatish Balay# -------------------------------------------------------------------- 65808f684SSatish Balay 75808f684SSatish Balayclass TestOptions(unittest.TestCase): 85808f684SSatish Balay 95808f684SSatish Balay PREFIX = 'myopts-' 105808f684SSatish Balay OPTLIST = [('bool', True), 115808f684SSatish Balay ('int', -7), 125808f684SSatish Balay ('real', 5), 135808f684SSatish Balay ('scalar', 3), 145808f684SSatish Balay ('string', 'petsc4py'), 155808f684SSatish Balay ] 165808f684SSatish Balay 175808f684SSatish Balay def _putopts(self, opts=None, OPTLIST=None): 185808f684SSatish Balay if opts is None: 195808f684SSatish Balay opts = self.opts 205808f684SSatish Balay if OPTLIST is None: 215808f684SSatish Balay OPTLIST = self.OPTLIST 225808f684SSatish Balay for k,v in OPTLIST: 235808f684SSatish Balay opts[k] = v 245808f684SSatish Balay def _delopts(self, opts=None, OPTLIST=None): 255808f684SSatish Balay if opts is None: 265808f684SSatish Balay opts = self.opts 275808f684SSatish Balay if OPTLIST is None: 285808f684SSatish Balay OPTLIST = self.OPTLIST 295808f684SSatish Balay for k,v in OPTLIST: 305808f684SSatish Balay del opts[k] 315808f684SSatish Balay 325808f684SSatish Balay def setUp(self): 335808f684SSatish Balay self.opts = PETSc.Options(self.PREFIX) 345808f684SSatish Balay 355808f684SSatish Balay def tearDown(self): 365808f684SSatish Balay self.opts = None 37*62e5d2d2SJDBetteridge PETSc.garbage_cleanup() 385808f684SSatish Balay 395808f684SSatish Balay def testHasOpts(self): 405808f684SSatish Balay self._putopts() 415808f684SSatish Balay for k, v in self.OPTLIST: 425808f684SSatish Balay self.assertTrue(self.opts.hasName(k)) 435808f684SSatish Balay self.assertTrue(k in self.opts) 445808f684SSatish Balay missing = k+'-missing' 455808f684SSatish Balay self.assertFalse(self.opts.hasName(missing)) 465808f684SSatish Balay self.assertFalse(missing in self.opts) 475808f684SSatish Balay self._delopts() 485808f684SSatish Balay 495808f684SSatish Balay def testGetOpts(self): 505808f684SSatish Balay self._putopts() 515808f684SSatish Balay for k, v in self.OPTLIST: 525808f684SSatish Balay getopt = getattr(self.opts, 'get'+k.title()) 535808f684SSatish Balay self.assertEqual(getopt(k), v) 545808f684SSatish Balay self._delopts() 555808f684SSatish Balay 565808f684SSatish Balay def testGetAll(self): 575808f684SSatish Balay self._putopts() 585808f684SSatish Balay allopts = self.opts.getAll() 595808f684SSatish Balay self.assertTrue(type(allopts) is dict) 605808f684SSatish Balay optlist = [(k, str(v).lower()) 615808f684SSatish Balay for (k,v) in self.OPTLIST] 625808f684SSatish Balay for k,v in allopts.items(): 635808f684SSatish Balay self.assertTrue((k, v) in optlist) 645808f684SSatish Balay self._delopts() 655808f684SSatish Balay 665808f684SSatish Balay def testGetAllQuoted(self): 675808f684SSatish Balay dct = {'o0' : '"0 1 2"', 685808f684SSatish Balay 'o1' : '"a b c"', 695808f684SSatish Balay 'o2' : '"x y z"',} 705808f684SSatish Balay for k in dct: 715808f684SSatish Balay self.opts[k] = dct[k] 725808f684SSatish Balay allopts = self.opts.getAll() 735808f684SSatish Balay for k in dct: 745808f684SSatish Balay self.assertEqual(allopts[k], dct[k][1:-1]) 755808f684SSatish Balay del self.opts[k] 765808f684SSatish Balay 775808f684SSatish Balay def testMonitor(self): 785808f684SSatish Balay optlist = [] 795808f684SSatish Balay mon = lambda n,v: optlist.append((n,v)) 805808f684SSatish Balay self.opts.setMonitor(mon) 815808f684SSatish Balay self.assertEqual(getrefcount(mon)-1, 2) 825808f684SSatish Balay self._putopts() 835808f684SSatish Balay target = [(self.PREFIX+k, str(v).lower()) 845808f684SSatish Balay for k, v in self.OPTLIST] 855808f684SSatish Balay self.assertEqual(optlist, target) 865808f684SSatish Balay self.opts.cancelMonitor() 875808f684SSatish Balay self.assertEqual(getrefcount(mon)-1, 1) 885808f684SSatish Balay self._delopts() 895808f684SSatish Balay 905808f684SSatish Balay# -------------------------------------------------------------------- 915808f684SSatish Balay 925808f684SSatish Balaydel TestOptions.testMonitor # XXX 935808f684SSatish Balay 945808f684SSatish Balayif __name__ == '__main__': 955808f684SSatish Balay unittest.main() 96