Fabian Peter Hammerle 8 лет назад
Родитель
Сommit
f2c98054ed
2 измененных файлов с 103 добавлено и 0 удалено
  1. 45 0
      ioex/calcex.py
  2. 58 0
      tests/calcex/test_figure.py

+ 45 - 0
ioex/calcex.py

@@ -0,0 +1,45 @@
+# try:
+#     import yaml
+# except ImportError:
+#     yaml = None
+
+
+class UnitMismatchError(ValueError):
+    pass
+
+
+class Figure(object):
+
+    yaml_tag = u"!figure"
+
+    def __init__(self, value=None, unit=None):
+        self._value = value
+        self._unit = unit
+
+    def get_value(self):
+        return self._value
+
+    def set_value(self, value):
+        self._value = value
+
+    """ use property() instead of decorator to enable overriding """
+    value = property(get_value, set_value)
+
+    def get_unit(self):
+        return self._unit
+
+    def set_unit(self, unit):
+        self._unit = unit
+
+    """ use property() instead of decorator to enable overriding """
+    unit = property(get_unit, set_unit)
+
+    def __str__(self):
+        if self.value is None and self.unit is None:
+            return '?'
+        elif self.unit is None:
+            return '{}'.format(self.value)
+        elif self.value is None:
+            return '? {}'.format(self.unit)
+        else:
+            return '{} {}'.format(self.value, self.unit)

+ 58 - 0
tests/calcex/test_figure.py

@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+import pytest
+
+from ioex.calcex import Figure
+
+
+@pytest.mark.parametrize(('init_kwargs', 'expected_value', 'expected_unit'), [
+    [{}, None, None],
+    [{'value': 123.4}, 123.4, None],
+    [{'unit': 'm/s²'}, None, 'm/s²'],
+    [{'value': 123.4, 'unit': 'm/s²'}, 123.4, 'm/s²'],
+    [{'value': 1234, 'unit': '米/s²'}, 1234, '米/s²'],
+])
+def test_init(init_kwargs, expected_value, expected_unit):
+    f = Figure(**init_kwargs)
+    assert expected_value == f.value
+    assert expected_unit == f.unit
+
+
+@pytest.mark.parametrize(('value'), [
+    1234,
+    123.4,
+    '一千',
+])
+def test_set_value(value):
+    f = Figure()
+    assert None == f.value
+    f.value = value
+    assert value == f.value
+    f.value = None
+    assert None == f.value
+    f.set_value(value)
+    assert value == f.value
+
+
+@pytest.mark.parametrize(('unit'), [
+    'μg/l',
+    '米/s²',
+])
+def test_set_unit(unit):
+    f = Figure()
+    assert None == f.unit
+    f.unit = unit
+    assert unit == f.unit
+    f.unit = None
+    assert None == f.unit
+    f.set_unit(unit)
+    assert unit == f.unit
+
+@pytest.mark.parametrize(('figure', 'expected_string'), [
+    [Figure(), '?'],
+    [Figure(value=123.4), '123.4'],
+    [Figure(unit='m/s²'), '? m/s²'],
+    [Figure(value=123.4, unit='m/s²'), '123.4 m/s²'],
+    [Figure(value=1234, unit='米/s²'), '1234 米/s²'],
+])
+def test_str(figure, expected_string):
+    assert expected_string == str(figure)