1
1
from fractions import Fraction
2
2
3
3
import pytest
4
+ from hypothesis import given
4
5
5
6
from measured import (
6
7
AmountOfSubstance ,
22
23
Time ,
23
24
Volume ,
24
25
)
26
+ from measured .hypothesis import dimensions
25
27
26
28
27
- def pytest_generate_tests (metafunc : pytest .Metafunc ) -> None :
28
- fundamental = Dimension .fundamental ()
29
- ids = [d .name for d in fundamental ]
30
-
31
- for exemplar in ["a" , "b" , "c" ]:
32
- if exemplar in metafunc .fixturenames :
33
- metafunc .parametrize (exemplar , fundamental , ids = ids )
34
-
35
- if "dimension" in metafunc .fixturenames :
36
- metafunc .parametrize ("dimension" , fundamental , ids = ids )
37
-
38
-
39
- @pytest .fixture
29
+ @pytest .fixture (scope = "module" )
40
30
def identity () -> Dimension :
41
31
return Number
42
32
43
33
34
+ @given (a = dimensions (), b = dimensions ())
44
35
def test_homogenous_under_addition (a : Dimension , b : Dimension ) -> None :
45
36
# https://en.wikipedia.org/wiki/Dimensional_analysis#Dimensional_homogeneity
46
37
#
@@ -53,6 +44,7 @@ def test_homogenous_under_addition(a: Dimension, b: Dimension) -> None:
53
44
a + b
54
45
55
46
47
+ @given (a = dimensions (), b = dimensions ())
56
48
def test_homogenous_under_subtraction (a : Dimension , b : Dimension ) -> None :
57
49
# https://en.wikipedia.org/wiki/Dimensional_analysis#Dimensional_homogeneity
58
50
#
@@ -65,41 +57,49 @@ def test_homogenous_under_subtraction(a: Dimension, b: Dimension) -> None:
65
57
a - b
66
58
67
59
60
+ @given (a = dimensions (), b = dimensions (), c = dimensions ())
68
61
def test_abelian_associativity (a : Dimension , b : Dimension , c : Dimension ) -> None :
69
62
# https://en.wikipedia.org/wiki/Abelian_group
70
63
assert (a * b ) * c == a * (b * c )
71
64
72
65
66
+ @given (a = dimensions ())
73
67
def test_abelian_identity (identity : Dimension , a : Dimension ) -> None :
74
68
assert identity * a == a
75
69
76
70
71
+ @given (a = dimensions ())
77
72
def test_abelian_inverse (identity : Dimension , a : Dimension ) -> None :
78
73
inverse = a ** - 1
79
74
assert inverse * a == a * inverse
80
75
assert inverse * a == identity
81
76
assert identity / a == inverse
82
77
83
78
79
+ @given (a = dimensions (), b = dimensions ())
84
80
def test_abelian_commutativity (a : Dimension , b : Dimension ) -> None :
85
81
assert a * b == b * a
86
82
87
83
84
+ @given (dimension = dimensions ())
88
85
def test_no_dimensional_exponentation (dimension : Dimension ) -> None :
89
86
with pytest .raises (TypeError ):
90
87
dimension ** dimension # type: ignore
91
88
92
89
90
+ @given (dimension = dimensions ())
93
91
def test_no_floating_point_exponentation (dimension : Dimension ) -> None :
94
92
with pytest .raises (TypeError ):
95
93
dimension ** 0.5 # type: ignore
96
94
97
95
96
+ @given (dimension = dimensions ())
98
97
def test_no_fractional_exponentation (dimension : Dimension ) -> None :
99
98
with pytest .raises (TypeError ):
100
99
dimension ** Fraction (1 , 2 ) # type: ignore
101
100
102
101
102
+ @given (dimension = dimensions ())
103
103
def test_only_dimensional_multiplication (dimension : Dimension ) -> None :
104
104
with pytest .raises (TypeError ):
105
105
5 * dimension # type: ignore
@@ -108,6 +108,7 @@ def test_only_dimensional_multiplication(dimension: Dimension) -> None:
108
108
dimension * 5 # type: ignore
109
109
110
110
111
+ @given (dimension = dimensions ())
111
112
def test_only_dimensional_division (dimension : Dimension ) -> None :
112
113
with pytest .raises (TypeError ):
113
114
dimension / 5 # type: ignore
@@ -116,6 +117,7 @@ def test_only_dimensional_division(dimension: Dimension) -> None:
116
117
5 / dimension # type: ignore
117
118
118
119
120
+ @given (dimension = dimensions ())
119
121
def test_repr (dimension : Dimension ) -> None :
120
122
r = repr (dimension )
121
123
assert r .startswith ("Dimension(exponents=(0," )
@@ -124,6 +126,7 @@ def test_repr(dimension: Dimension) -> None:
124
126
assert r .endswith (")" )
125
127
126
128
129
+ @given (dimension = dimensions ())
127
130
def test_repr_roundtrips (dimension : Dimension ) -> None :
128
131
assert eval (repr (dimension )) is dimension
129
132
0 commit comments