@@ -60,21 +60,66 @@ def test_from_timeoffset(self):
6060
6161 def test_normalise (self ):
6262 tests_ts = [
63- (TimeOffset (0 , 0 ), (30000 , 1001 ), TimeOffset (0 , 0 )),
64- (TimeOffset (1001 , 0 ), (30000 , 1001 ), TimeOffset (1001 , 0 )),
65- (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 ), (30000 , 1001 ), TimeOffset (1001 , 0 )),
66- (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 + 1 ), (30000 , 1001 ), TimeOffset (1001 , 1001.0 / 30000 * 1000000000 )),
67- (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 , - 1 ), (30000 , 1001 ), TimeOffset (1001 , 0 , - 1 )),
68- (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 + 1 , - 1 ), (30000 , 1001 ),
69- TimeOffset (1001 , 1001.0 / 30000 * 1000000000 , - 1 ))
63+ (TimeOffset (0 , 0 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_NEAREST ,
64+ TimeOffset (0 , 0 )),
65+ (TimeOffset (1001 , 0 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_NEAREST ,
66+ TimeOffset (1001 , 0 )),
67+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_NEAREST ,
68+ TimeOffset (1001 , 0 )),
69+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 + 1 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_NEAREST ,
70+ TimeOffset (1001 , 1001.0 / 30000 * 1000000000 )),
71+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 , - 1 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_NEAREST ,
72+ TimeOffset (1001 , 0 , - 1 )),
73+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 + 1 , - 1 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_NEAREST ,
74+ TimeOffset (1001 , 1001.0 / 30000 * 1000000000 , - 1 )),
75+ (TimeOffset (1521731233 , 320000000 ), Fraction (25 , 3 ), TimeOffset .ROUND_NEAREST ,
76+ TimeOffset (1521731233 , 320000000 )),
77+ (TimeOffset (0 , 0 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_UP ,
78+ TimeOffset (0 , 0 )),
79+ (TimeOffset (1001 , 0 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_UP ,
80+ TimeOffset (1001 , 0 )),
81+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_UP ,
82+ TimeOffset (1001 , 1001.0 / 30000 * 1000000000 )),
83+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 + 1 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_UP ,
84+ TimeOffset (1001 , 1001.0 / 30000 * 1000000000 )),
85+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 , - 1 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_UP ,
86+ TimeOffset (1001 , 0 , - 1 )),
87+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 + 1 , - 1 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_UP ,
88+ TimeOffset (1001 , 0 , - 1 )),
89+ (TimeOffset (1521731233 , 320000000 ), Fraction (25 , 3 ), TimeOffset .ROUND_UP ,
90+ TimeOffset (1521731233 , 320000000 )),
91+ (TimeOffset (0 , 0 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_DOWN ,
92+ TimeOffset (0 , 0 )),
93+ (TimeOffset (1001 , 0 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_DOWN ,
94+ TimeOffset (1001 , 0 )),
95+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_DOWN ,
96+ TimeOffset (1001 , 0 )),
97+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 + 1 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_DOWN ,
98+ TimeOffset (1001 , 0 )),
99+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 , - 1 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_DOWN ,
100+ TimeOffset (1001 , 1001.0 / 30000 * 1000000000 , - 1 )),
101+ (TimeOffset (1001 , 1001.0 / 30000 / 2 * 1000000000 + 1 , - 1 ), Fraction (30000 , 1001 ), TimeOffset .ROUND_DOWN ,
102+ TimeOffset (1001 , 1001.0 / 30000 * 1000000000 , - 1 )),
103+ (TimeOffset (1521731233 , 320000000 ), Fraction (25 , 3 ), TimeOffset .ROUND_DOWN ,
104+ TimeOffset (1521731233 , 320000000 )),
70105 ]
71106
72- for t in tests_ts :
73- with self .subTest (t = t ):
74- r = t [0 ].normalise (t [1 ][0 ], t [1 ][1 ])
75- self .assertEqual (r , t [2 ],
76- msg = ("{!r}.normalise({}, {}) == {!r}, expected {!r}"
77- .format (t [0 ], t [1 ][0 ], t [1 ][1 ], r , t [2 ])))
107+ n = 0
108+ for (input , rate , rounding , expected ) in tests_ts :
109+ # Nb. subTest will add a printout of all its kwargs to any error message generated
110+ # by a failure within it. The variable n is being used here to ensure that the index
111+ # of the current test within tests_ts is printed on any failure. (Nb. only works with
112+ # python3 unittest test runner)
113+ with self .subTest (test_data_index = n ,
114+ input = input ,
115+ rate = rate ,
116+ rounding = rounding ,
117+ expected = expected ):
118+ n += 1
119+ r = input .normalise (rate .numerator , rate .denominator , rounding = rounding )
120+ self .assertEqual (r , expected ,
121+ msg = ("{!r}.normalise({}, {}, rounding={}) == {!r}, expected {!r}"
122+ .format (input , rate .numerator , rate .denominator , rounding , r , expected )))
78123
79124 def test_hash (self ):
80125 self .assertEqual (hash (TimeOffset (0 , 0 )), hash (TimeOffset (0 , 0 )))
0 commit comments