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