ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/test/testcases/pyrad/test_pyradproc.py
Revision: 1.1
Committed: Wed Mar 30 18:09:00 2016 UTC (9 years, 1 month ago) by schorsch
Content type: text/x-python
Branch: MAIN
CVS Tags: rad5R4, rad5R2, rad5R3, HEAD
Log Message:
The test utilities need testing (and some fixing) as well.

File Contents

# User Rev Content
1 schorsch 1.1 # -*- coding: utf-8 -*-
2     from __future__ import division, print_function, unicode_literals
3    
4     import struct
5     import operator
6     import unittest
7     from functools import reduce
8    
9     import testsupport as ts
10     from pyradlib import lcompare
11     from pyradlib.pyrad_proc import PIPE, Error, ProcMixin
12    
13    
14     class PyradprocTestCase(unittest.TestCase, ProcMixin):
15    
16     def _runit(self, cmdl, actstrl, _in=None, indata=None, nl=False):
17     try:
18     procs = []
19     if isinstance(cmdl[0], (type(b''), type(u''))):
20     proc = self.call_one(cmdl, actstrl, _in=_in, out=PIPE,
21     universal_newlines=nl)
22     procs = [proc]
23     elif len(cmdl) == 2:
24     procs = self.call_two(cmdl[0], cmdl[1], actstrl[0], actstrl[1],
25     _in=_in, out=PIPE, universal_newlines=nl)
26     else:
27     procs = self.call_many(cmdl, actstrl, _in=_in, out=PIPE,
28     universal_newlines=nl)
29     if indata: # only for small amounts of data
30     procs[0].stdin.write(indata)
31     procs[0].stdin.close()
32     res = procs[-1].stdout.read()
33     else:
34     res, eres = procs[-1].communicate()
35     if eres: print('Errors', eres) # XXX
36     except Error as e:
37     raise
38     self.fail('%s [%s]' % (str(e), self.qjoin(cmdl)))
39     finally:
40     for proc in procs:
41     proc.wait()
42     if nl: return filter(None, lcompare.split_rad(res))
43     return res
44    
45    
46     def test_call_1_text(self):
47     for n in (5, 10, 55, 200,1328,1329,1330,1331,1332, 2000, 5000,99999):
48     exp = range(n)
49     cntcmd = ['cnt', str(n)]
50     res = self._runit(cntcmd, 'run one process', nl=True)
51     resl = [r[0] for r in res]
52     try: lcompare.lcompare(resl, exp)
53     except lcompare.error as e:
54     print(resl, exp)
55     self.fail(('call_one_text n=%d -- ' % n) +str(e))
56    
57     def test_call_1_bin(self):
58     exp = (2160, 8640, 4320, 1080, 7560)
59     cntcmd = ['total', '-of']
60     tfn = ts.datafile('histo.dat')
61     res = self._runit(cntcmd, 'run one process', _in=tfn, nl=False)
62     resl = struct.unpack('f'*len(exp), res)
63     try: lcompare.lcompare(resl, exp)
64     except lcompare.error as e:
65     self.fail(('call_one_text n=%d -- ' % n) +str(e))
66    
67     def test_call_1_noexe(self):
68     # let's hope a program with that name doesn't exist
69     cmd = ['iswaxubdzkcgrhmltqvyfepojn', '-x', '-y', '-z']
70     self.assertRaises(Error, self._runit, cmd, 'run one process')
71    
72     def test_call_2_text(self):
73     # with values higher than 44721, total will return a float in e-format.
74     for n in (5, 10, 55, 200,1328,1329,1330,1331,1332, 2000, 5000,
75     44721, 44722, 99999):
76     exp = [reduce(operator.add, range(n))]
77     cntcmd = ['cnt', str(n)]
78     totcmd = ['total']
79     resl = self._runit([cntcmd, totcmd], ['run p1','run p2'], nl=True)
80     try: lcompare.lcompare(resl, [exp])
81     except lcompare.error as e:
82     self.fail(('call_one_text n=%d -- ' % n) +str(e))
83    
84     def test_call_2_bin(self):
85     for nn in ((1,1,1), (5,5,5), (3,9,5,2,8)):
86     totalrows = reduce(operator.mul, nn)
87     exp = [reduce(operator.add, range(n))*(totalrows/n) for n in nn]
88     cntcmd = ['cnt'] + [str(n) for n in nn]
89     totcmd = ['total', '-of']
90     res = self._runit([cntcmd, totcmd], ['run p1','run p2'])
91     resl = struct.unpack('f'*len(exp), res)
92     try: lcompare.lcompare(resl, exp)
93     except lcompare.error as e:
94     self.fail(('call_one_text n=%d -- ' % n) +str(e))
95    
96     def test_call_many_text(self):
97     data = b'''void polygon test 0 0 9 0 0 0 1 0 0 0 1 0'''
98     exp = (['#', 'xform', '-s', 0.5],
99     ['#', 'xform', '-t', 0, 0, 2],
100     ['#', 'xform', '-ry', -20],
101     ['#', 'xform', '-rx', 30],
102     ['void', 'polygon', 'test'],
103     [0], [0], [9],
104     [0, 0, 1],
105     [0.469846310393, 0, 1.17101007167],
106     [-0.0855050358315, 0.433012701892, 1.23492315519])
107     cmd0 = ['xform', '-rx', '30']
108     cmd1 = ['xform', '-ry', '-20']
109     cmd2 = ['xform', '-t', '0', '0', '2']
110     cmd3 = ['xform', '-s', '0.5']
111     cmdl = [cmd0, cmd1, cmd2, cmd3]
112     resl = self._runit(cmdl, 'run many processes', indata=data,
113     _in=PIPE, nl=True)
114     try: lcompare.lcompare(resl, exp)
115     except lcompare.error as e:
116     print(resl, exp)
117     self.fail(('call_one_text n=%d -- ' % n) +str(e))
118    
119     def test_call_many_bin(self):
120     exp = (15, 40, 45, 48, 0)
121     cmd0 = ['cnt', '3', '4', '5', '1']
122     cmd1 = ['histo', '1', '5']
123     cmd2 = ['total', '-of']
124     cmdl = [cmd0, cmd1, cmd2]
125     res = self._runit(cmdl, 'run many processes')
126     resl = struct.unpack('f'*len(exp), res)
127     try: lcompare.lcompare(resl, exp)
128     except lcompare.error as e:
129     print(resl, exp)
130     self.fail(('call_one_text -- ') +str(e))
131    
132    
133     # vi: set ts=4 sw=4 :