test_figure.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. from ioex.calcex import Figure, UnitMismatchError
  4. @pytest.mark.parametrize(('init_params', 'init_kwargs', 'expected_value', 'expected_unit'), [
  5. [[], {}, None, None],
  6. [[123.4], {}, 123.4, None],
  7. [[None, 'm/s²'], {}, None, 'm/s²'],
  8. [[123.4, 'm/s²'], {}, 123.4, 'm/s²'],
  9. [[1234, '米/s²'], {}, 1234, '米/s²'],
  10. [[], {'value': 123.4}, 123.4, None],
  11. [[], {'unit': 'm/s²'}, None, 'm/s²'],
  12. [[], {'value': 123.4, 'unit': 'm/s²'}, 123.4, 'm/s²'],
  13. [[], {'value': 1234, 'unit': '米/s²'}, 1234, '米/s²'],
  14. [[1234], {'unit': '米/s²'}, 1234, '米/s²'],
  15. ])
  16. def test_init(init_params, init_kwargs, expected_value, expected_unit):
  17. f = Figure(*init_params, **init_kwargs)
  18. assert expected_value == f.value
  19. assert expected_unit == f.unit
  20. @pytest.mark.parametrize(('init_params', 'init_kwargs'), [
  21. [[12.34], {'value': 123.4}],
  22. [[12, 'm/h'], {'unit': 'm/s²'}],
  23. ])
  24. def test_init_multiple_values(init_params, init_kwargs):
  25. with pytest.raises(Exception):
  26. Figure(*init_params, **init_kwargs)
  27. @pytest.mark.parametrize(('value'), [
  28. 1234,
  29. 123.4,
  30. '一千',
  31. ])
  32. def test_set_value(value):
  33. f = Figure()
  34. assert None == f.value
  35. f.value = value
  36. assert value == f.value
  37. f.value = None
  38. assert None == f.value
  39. f.set_value(value)
  40. assert value == f.value
  41. def test_set_value_persistent():
  42. v = [1, 2]
  43. f = Figure(value=v)
  44. assert Figure([1, 2]) == f
  45. v[0] = 3
  46. v.append(4)
  47. assert Figure([1, 2]) == f
  48. def test_set_value_persistent_deep():
  49. v = [{'x': 1}, {'x': 2}]
  50. f = Figure(value=v)
  51. assert Figure([{'x': 1}, {'x': 2}]) == f
  52. v[0]['x'] = 3
  53. assert Figure([{'x': 1}, {'x': 2}]) == f
  54. @pytest.mark.parametrize(('unit'), [
  55. 'μg/l',
  56. '米/s²',
  57. ])
  58. def test_set_unit(unit):
  59. f = Figure()
  60. assert None == f.unit
  61. f.unit = unit
  62. assert unit == f.unit
  63. f.unit = None
  64. assert None == f.unit
  65. f.set_unit(unit)
  66. assert unit == f.unit
  67. def test_set_unit_persistent():
  68. u = [1, 2]
  69. f = Figure(0, u)
  70. assert Figure(0, [1, 2]) == f
  71. u.append(3)
  72. assert Figure(0, [1, 2]) == f
  73. def test_set_unit_persistent_deep():
  74. u = (['N', 'm'], ['l'])
  75. f = Figure(0, u)
  76. assert Figure(0, (['N', 'm'], ['l'])) == f
  77. u[0].append('g')
  78. assert Figure(0, (['N', 'm'], ['l'])) == f
  79. @pytest.mark.parametrize(('figure', 'expected_string'), [
  80. [Figure(), '?'],
  81. [Figure(value=123.4), '123.4'],
  82. [Figure(unit='m/s²'), '? m/s²'],
  83. [Figure(value=123.4, unit='m/s²'), '123.4 m/s²'],
  84. [Figure(value=1234, unit='米/s²'), '1234 米/s²'],
  85. ])
  86. def test_str(figure, expected_string):
  87. assert expected_string == str(figure)
  88. @pytest.mark.parametrize(('a', 'b'), [
  89. [Figure(1, 'm'), Figure(1, 'm')],
  90. ])
  91. def test_eq(a, b):
  92. assert a == b
  93. assert not (a != b)
  94. @pytest.mark.parametrize(('a', 'b'), [
  95. [Figure(1, 'm'), Figure(2, 'g')],
  96. [Figure(1, 'm'), Figure(2, 'm')],
  97. [Figure(2, 'm'), Figure(2, 'g')],
  98. ])
  99. def test_neq(a, b):
  100. assert a != b
  101. assert not (a == b)
  102. @pytest.mark.parametrize(('a', 'b', 'expected_sum'), [
  103. [Figure(1, 'm'), Figure(2, 'm'), Figure(3, 'm')],
  104. [Figure(-2, 'l'), Figure(-4, 'l'), Figure(-6, 'l')],
  105. [Figure(-1), Figure(3), Figure(2, None)],
  106. ])
  107. def test_add(a, b, expected_sum):
  108. assert expected_sum == a + b
  109. @pytest.mark.parametrize(('a', 'b'), [
  110. [Figure(1, 'm'), Figure(2, 'l')],
  111. [Figure(-2, 'l'), Figure(-4, None)],
  112. ])
  113. def test_add_unit_mismatch(a, b):
  114. with pytest.raises(UnitMismatchError):
  115. a + b
  116. def test_add_persistent():
  117. a = Figure([1], ['m'])
  118. b = Figure([2], ['m'])
  119. s = a + b
  120. assert Figure([1, 2], ['m']) == s
  121. a.value[0] = 3
  122. a.unit[0] = 'g'
  123. b.value[0] = 4
  124. b.unit[0] = 'l'
  125. assert Figure([1, 2], ['m']) == s
  126. @pytest.mark.parametrize(('a', 'b', 'expected_sum'), [
  127. [Figure(1, 'm'), Figure(2, 'm'), Figure(-1, 'm')],
  128. [Figure(-2, 'l'), Figure(-4, 'l'), Figure(2, 'l')],
  129. [Figure(-1), Figure(3), Figure(-4, None)],
  130. ])
  131. def test_sub(a, b, expected_sum):
  132. assert expected_sum == a - b
  133. @pytest.mark.parametrize(('a', 'b'), [
  134. [Figure(1, 'm'), Figure(2, 'l')],
  135. [Figure(-2, 'l'), Figure(-4, None)],
  136. ])
  137. def test_sub_unit_mismatch(a, b):
  138. with pytest.raises(UnitMismatchError):
  139. a - b
  140. def test_sub_persistent():
  141. a = Figure(1, ['m'])
  142. b = Figure(2, ['m'])
  143. d = a - b
  144. assert Figure(-1, ['m']) == d
  145. a.value = 3
  146. a.unit[0] = 'g'
  147. b.value = 4
  148. b.unit[0] = 'l'
  149. assert Figure(-1, ['m']) == d