diff --git a/gprMax/input_cmd_funcs.py b/gprMax/input_cmd_funcs.py index 387db89a..c7419735 100644 --- a/gprMax/input_cmd_funcs.py +++ b/gprMax/input_cmd_funcs.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU General Public License # along with gprMax. If not, see . +import sys from collections import namedtuple """This module contains functional forms of some of the most commonly used gprMax commands. It can be useful to use these within Python scripting in an input file. @@ -613,15 +614,26 @@ def rx(x, y, z, identifier=None, to_save=None, polarisation=None, dxdy=None, rot if rotate90origin: if polarisation == 'x': - xf = x + dxdy[0] + try: + xf = x + dxdy[0] + except Exception as e: + raise ValueError('With polarization = x, a dxdy[0] float values is required, got dxdy=%s' % dxdy) from e yf = y elif polarisation == 'y': xf = x - yf = y + dxdy[1] + try: + yf = y + dxdy[1] + except Exception as e: + raise ValueError('With polarization = y, a dxdy[1] float values is required, got dxdy=%s' % dxdy) from e + x, y, xf, yf = rotate90_edge(x, y, xf, yf, polarisation, rotate90origin) c = Coordinate(x, y, z) - command('rx', str(c), identifier, ' '.join(to_save)) + to_save_str = '' + if to_save is not None: + to_save_str = ' '.join(to_save) + + command('rx', str(c), identifier, to_save_str) return c @@ -655,3 +667,4 @@ def rx_steps(dx=0, dy=0, dz=0): c = Coordinate(dx, dy, dz) command('rx_steps', str(c)) return c + diff --git a/gprMax/input_cmd_funcs_test.py b/gprMax/input_cmd_funcs_test.py new file mode 100644 index 00000000..8ff52abf --- /dev/null +++ b/gprMax/input_cmd_funcs_test.py @@ -0,0 +1,79 @@ +import sys +import unittest + +# http://stackoverflow.com/a/17981937/1942837 +from contextlib import contextmanager +from io import StringIO + +@contextmanager +def captured_output(): + new_out, new_err = StringIO(), StringIO() + old_out, old_err = sys.stdout, sys.stderr + try: + sys.stdout, sys.stderr = new_out, new_err + yield sys.stdout, sys.stderr + finally: + sys.stdout, sys.stderr = old_out, old_err + +# end stack copy + +from input_cmd_funcs import * + +class My_input_cmd_funcs_test(unittest.TestCase): + def assert_output(self, out, expected_out): + """helper function""" + output = out.getvalue().strip() + self.assertEqual(output, expected_out) + + def test_rx(self): + with captured_output() as (out, err): + rx(0, 0, 0) + self.assert_output(out, '#rx: 0 0 0') + def test_rx2(self): + with captured_output() as (out, err): + rx(0, 1, 2, 'id') + self.assert_output(out, '#rx: 0 1 2 id') + def test_rx3(self): + with captured_output() as (out, err): + rx(2, 1, 0, 'idd', ['Ex']) + self.assert_output(out, '#rx: 2 1 0 idd Ex') + def test_rx4(self): + with captured_output() as (out, err): + rx(2, 1, 0, 'id', ['Ex', 'Ez']) + self.assert_output(out, '#rx: 2 1 0 id Ex Ez') + def test_rx4(self): + with captured_output() as (out, err): + rx(2, 1, 0, 'id', ['Ex', 'Ez']) + self.assert_output(out, '#rx: 2 1 0 id Ex Ez') + def test_rx_rotate_exception(self): + with self.assertRaises(ValueError): + rx(2, 1, 0, 'id', ['Ex', 'Ez'], polarisation='x', rotate90origin=(1,1)) # no dxdy given + def test_rx_rotate_success(self): + with captured_output() as (out, err): + rx(2, 1, 0, 'id', ['Ex', 'Ez'], polarisation='x', rotate90origin=(1,1), dxdy=(0,0)) + self.assert_output(out, '#rx: 1 2 0 id Ex Ez') # note: x, y swapped + def test_rx_rotate_success2(self): + with captured_output() as (out, err): + rx(2, 1, 0, 'id', ['Ex', 'Ez'], polarisation='y', rotate90origin=(1,1), dxdy=(0,0)) + self.assert_output(out, '#rx: 1 2 0 id Ex Ez') # note: x, y swapped + + def test_src_steps(self): + with captured_output() as (out, err): + src_steps() + self.assert_output(out, '#src_steps: 0 0 0') + def test_src_steps2(self): + with captured_output() as (out, err): + src_steps(42, 43, 44.2) + self.assert_output(out, '#src_steps: 42 43 44.2') + + def test_rx_steps(self): + with captured_output() as (out, err): + rx_steps() + self.assert_output(out, '#rx_steps: 0 0 0') + def test_rx_steps2(self): + with captured_output() as (out, err): + rx_steps(42, 43, 44.2) + self.assert_output(out, '#rx_steps: 42 43 44.2') + +if __name__ == '__main__': + unittest.main()