aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dialoguer/__init__.py31
-rw-r--r--dialoguer/binary_conversion.py1
-rw-r--r--dialoguer/data_type_ref.py2
-rw-r--r--test_binary_conversion.py4
-rw-r--r--test_evaluate_expression.py49
-rw-r--r--test_evaluate_expression.r16
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)
+}