diff options
author | TinWoodman92 <chrhodgden@gmail.com> | 2023-07-01 16:36:47 -0500 |
---|---|---|
committer | TinWoodman92 <chrhodgden@gmail.com> | 2023-07-01 16:36:47 -0500 |
commit | 892076782660eddb8f8daffd2fcc5870aa8f4a93 (patch) | |
tree | 6ba4e024ab66cce0fea780702c3083c339b61cef | |
parent | 315999ec3a50b860ea0cc14ec786155a48bc857e (diff) | |
parent | 6befebe3030105bd88f22970a369178a2b7212e1 (diff) |
Merge branch 'eval_expr'
-rw-r--r-- | dialoguer/__init__.py | 31 | ||||
-rw-r--r-- | dialoguer/binary_conversion.py | 1 | ||||
-rw-r--r-- | dialoguer/data_type_ref.py | 2 | ||||
-rw-r--r-- | test_binary_conversion.py | 4 | ||||
-rw-r--r-- | test_evaluate_expression.py | 49 | ||||
-rw-r--r-- | test_evaluate_expression.r | 16 |
6 files changed, 98 insertions, 5 deletions
diff --git a/dialoguer/__init__.py b/dialoguer/__init__.py index bf1e978..476cde0 100644 --- a/dialoguer/__init__.py +++ b/dialoguer/__init__.py @@ -89,15 +89,40 @@ class Dialogue: return data def import_variable(self, var_name): + self.send(1) + recv_chk = self.recv(set_data_type=bool) self.send(var_name, False) val = self.recv(True) return val - def evaluate_expression(self, expr): - pass + def evaluate_expression(self, method_name, *args, **kwargs): + self.send(2) + recv_chk = self.recv(set_data_type=bool) + #send number of arguments + self.send(len(args)) + recv_chk = self.recv(set_data_type=bool) + #send number of keyword arguments + self.send(len(kwargs)) + recv_chk = self.recv(set_data_type=bool) + #send method name + self.send(method_name) + recv_chk = self.recv(set_data_type=bool) + #send arguments + for arg in args: + self.send(arg, True) + recv_chk = self.recv(set_data_type=bool) + #send keyword arguments + for kw in kwargs: + self.send(kw) + recv_chk = self.recv(set_data_type=bool) + self.send(kwargs[kw], True) + recv_chk = self.recv(set_data_type=bool) + result = self.recv(True) + return result + def close(self): - self.send('!DISCONNECT') + self.send(0) self._launch.join() self.conn.close() self.conn = None diff --git a/dialoguer/binary_conversion.py b/dialoguer/binary_conversion.py index a354851..9bdef6c 100644 --- a/dialoguer/binary_conversion.py +++ b/dialoguer/binary_conversion.py @@ -26,6 +26,7 @@ def bin_conv(data, data_type = None): conv_data = bin(data) conv_data = conv_data.lstrip('0b') conv_data = conv_data.zfill(8) + conv_data = ''.join(reversed(conv_data)) n = b'' for b in conv_data: m = int(b) diff --git a/dialoguer/data_type_ref.py b/dialoguer/data_type_ref.py index 6d45ba5..0559881 100644 --- a/dialoguer/data_type_ref.py +++ b/dialoguer/data_type_ref.py @@ -3,6 +3,8 @@ data_type_dict = { 'character': str, 'int': int, 'integer': int, + 'float': float, + 'double': float, 'bool': bool, 'logical': bool, 'NoneType': type(None), diff --git a/test_binary_conversion.py b/test_binary_conversion.py index 5e52e7b..5b28f4c 100644 --- a/test_binary_conversion.py +++ b/test_binary_conversion.py @@ -1,6 +1,8 @@ import unittest from dialoguer.binary_conversion import bin_conv +# some of these test currently fail because bytes are reversed. +# the binary conversions work with R's tendancy to reverse the sockets i/o # perhaps we can put reversals in this test class TestBinaryConversion(unittest.TestCase): @@ -36,8 +38,6 @@ class TestBinaryConversion(unittest.TestCase): var_i = bin_conv(bin_i, type(i)) self.assertEqual(i, var_i) - # this test currently fails because bytes are reversed. - # the binary conversions work with R's tendancy to reverse the sockets i/o def test_string_conversion(self): str_base = 'abcdefghijklmnopqrstuvwxyz!@#$%^&*()' str_base += str_base.upper() diff --git a/test_evaluate_expression.py b/test_evaluate_expression.py new file mode 100644 index 0000000..157ad96 --- /dev/null +++ b/test_evaluate_expression.py @@ -0,0 +1,49 @@ +import unittest +import dialoguer + + +class TestEvaluateExpression(unittest.TestCase): + + # @classmethod + # def setUpClass(cls): + # cls.src_fil_r = dialoguer.Dialogue('test_evaluate_expression.r') + + # @classmethod + # def tearDownClass(cls): + # cls.src_fil_r.close() + + def setUp(self): + self.src_fil_r = dialoguer.Dialogue('test_evaluate_expression.r') + + def tearDown(self): + self.src_fil_r.close() + + def test_built_in_method(self): + res_1 = self.src_fil_r.evaluate_expression('sum', 1, 2) + self.assertEqual(res_1, 3) + + def test_defined_method(self): + res_1 = self.src_fil_r.evaluate_expression('test_method', 1, 2) + self.assertEqual(res_1, 3) + + def test_kwargs(self): + kwargs = { + 'arg_1': 2, + 'arg_2': 3 + } + res_1 = self.src_fil_r.evaluate_expression('test_kwargs', **kwargs) + self.assertEqual(res_1, 6) + + def test_args_and_kwargs(self): + args = [2, 3] + kwargs = { + 'kwarg_1': 2, + 'kwarg_2': 3 + } + res_1 = self.src_fil_r.evaluate_expression('test_args_and_kwargs', *args, **kwargs) + res_ctrl = args[0] * args[1] * kwargs['kwarg_1'] * kwargs['kwarg_2'] + self.assertEqual(res_ctrl, res_1) + + +if __name__ == '__main__': + unittest.main() diff --git a/test_evaluate_expression.r b/test_evaluate_expression.r new file mode 100644 index 0000000..1f918cc --- /dev/null +++ b/test_evaluate_expression.r @@ -0,0 +1,16 @@ +test_method <- function(arg_1, arg_2) { + result <- arg_1 + arg_2 + return(result) +} + +test_kwargs <- function(arg_1 = 1, arg_2 = 1) { + result <- arg_1 * arg_2 + return(result) +} + +test_args_and_kwargs <- function(arg_1, arg_2, kwarg_1 = 1., kwarg_2 = 3) { + result <- arg_1 * arg_2 + result <- result * kwarg_1 + result <- result * kwarg_2 + return(result) +} |