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