Skip to content

Commit 5934f81

Browse files
committed
Add failing tests for instance methods
1 parent f5d6bdd commit 5934f81

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

tests/test_instance_methods.py

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
from __future__ import division
2+
3+
import math
4+
5+
import pytest
6+
7+
from variants import variants
8+
from ._division_data import DivisionData
9+
10+
11+
class DivisionVariants(object):
12+
"""Example class with variant forms on an instance method."""
13+
14+
def __init__(self, x):
15+
self.x = x
16+
17+
@variants
18+
def divide(self, y):
19+
return self.x / y
20+
21+
@divide.variant('round')
22+
def divide(self, y):
23+
return round(self.divide(y))
24+
25+
@divide.variant('floor')
26+
def divide(self, y):
27+
return math.floor(self.divide(y))
28+
29+
@divide.variant('ceil')
30+
def divide(self, y):
31+
return math.ceil(self.divide(y))
32+
33+
@divide.variant('mode')
34+
def divide(self, y, mode=None):
35+
funcs = {
36+
None: self.divide,
37+
'floor': self.divide.floor,
38+
'ceil': self.divide.ceil,
39+
'round': self.divide.round
40+
}
41+
42+
return funcs[mode](y)
43+
44+
45+
@pytest.mark.xfail
46+
@pytest.mark.parametrize('x,y,expected', DivisionData.DIV_VALS)
47+
def test_divide(x, y, expected):
48+
dv = DivisionVariants(x)
49+
assert dv.divide(y) == expected
50+
51+
52+
53+
@pytest.mark.xfail
54+
@pytest.mark.parametrize('x,y,expected', DivisionData.ROUND_VALS)
55+
def test_round(x, y, expected):
56+
dv = DivisionVariants(x)
57+
assert dv.divide.round(y) == expected
58+
59+
60+
61+
62+
@pytest.mark.xfail
63+
@pytest.mark.parametrize('x,y,expected', DivisionData.FLOOR_VALS)
64+
def test_floor(x, y, expected):
65+
dv = DivisionVariants(x)
66+
assert dv.divide.floor(y) == expected
67+
68+
69+
70+
71+
@pytest.mark.xfail
72+
@pytest.mark.parametrize('x,y,expected', DivisionData.CEIL_VALS)
73+
def test_floor(x, y, expected):
74+
dv = DivisionVariants(x)
75+
assert dv.divide.floor(y) == expected
76+
77+
78+
79+
@pytest.mark.xfail
80+
@pytest.mark.parametrize('x,y,expected,mode', DivisionData.MODE_VALS)
81+
def test_mode(x, y, expected, mode):
82+
dv = DivisionVariants(x)
83+
assert dv.divide.mode(y, mode) == expected
84+
85+
86+
@pytest.mark.xfail
87+
@pytest.mark.parametrize('x,y,expected,mode', DivisionData.MODE_VALS)
88+
def test_mode_change_x(x, y, expected, mode):
89+
# Test that with mutable values it still works after x is changed
90+
dv = DivisionVariants(x)
91+
assert dv.divide.mode(y, mode) == expected
92+
93+
dv.x = 0
94+
assert dv.divide.mode(y, mode) == 0

0 commit comments

Comments
 (0)