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