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