瀏覽代碼

calcex.Figure: overload / operator (python 2 only)

Fabian Peter Hammerle 8 年之前
父節點
當前提交
e53d9fd52a
共有 2 個文件被更改,包括 21 次插入0 次删除
  1. 9 0
      ioex/calcex.py
  2. 12 0
      tests/calcex/test_figure.py

+ 9 - 0
ioex/calcex.py

@@ -99,3 +99,12 @@ class Figure(object):
             return type(self)(value=self.value * factor.value, unit=self.unit)
         else:
             return self * Figure(value=factor, unit=None)
+
+    def __div__(self, divisor):
+        if isinstance(divisor, Figure):
+            assert not self.value is None
+            assert not divisor.value is None
+            assert divisor.unit is None
+            return type(self)(value=self.value / divisor.value, unit=self.unit)
+        else:
+            return self / Figure(value=divisor, unit=None)

+ 12 - 0
tests/calcex/test_figure.py

@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 import pytest
 
+import sys
 from ioex.calcex import Figure, UnitMismatchError
 
 
@@ -191,3 +192,14 @@ def test_sub_persistent():
 ])
 def test_mult(a, b, expected_product):
     assert expected_product == a * b
+
+
+@pytest.mark.skipif(sys.version_info >= (3, 0), reason='__truediv__ is not defined')
+@pytest.mark.parametrize(('a', 'b', 'expected_quotient'), [
+    [Figure(1.0, 'm'), Figure(2), Figure(0.5, 'm')],
+    [Figure(1.0, 'm'), 2, Figure(0.5, 'm')],
+    [Figure(2.0, 'm'), -1.5, Figure(-4. / 3, 'm')],
+])
+def test_div(a, b, expected_quotient):
+    generated_quotient = a / b
+    assert expected_quotient == generated_quotient