xref: /petsc/src/binding/petsc4py/test/test_optdb.py (revision 62e5d2d2208a68fdbd23dac44110783534664de8)
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