| 2253 | self.assertEqual(Decimal(p) / Decimal(q), d) |
| 2254 | |
| 2255 | def test_subclassing(self): |
| 2256 | # Different behaviours when subclassing Decimal |
| 2257 | Decimal = self.decimal.Decimal |
| 2258 | |
| 2259 | class MyDecimal(Decimal): |
| 2260 | y = None |
| 2261 | |
| 2262 | d1 = MyDecimal(1) |
| 2263 | d2 = MyDecimal(2) |
| 2264 | d = d1 + d2 |
| 2265 | self.assertIs(type(d), Decimal) |
| 2266 | |
| 2267 | d = d1.max(d2) |
| 2268 | self.assertIs(type(d), Decimal) |
| 2269 | |
| 2270 | d = copy.copy(d1) |
| 2271 | self.assertIs(type(d), MyDecimal) |
| 2272 | self.assertEqual(d, d1) |
| 2273 | |
| 2274 | d = copy.deepcopy(d1) |
| 2275 | self.assertIs(type(d), MyDecimal) |
| 2276 | self.assertEqual(d, d1) |
| 2277 | |
| 2278 | # Decimal(Decimal) |
| 2279 | d = Decimal('1.0') |
| 2280 | x = Decimal(d) |
| 2281 | self.assertIs(type(x), Decimal) |
| 2282 | self.assertEqual(x, d) |
| 2283 | |
| 2284 | # MyDecimal(Decimal) |
| 2285 | m = MyDecimal(d) |
| 2286 | self.assertIs(type(m), MyDecimal) |
| 2287 | self.assertEqual(m, d) |
| 2288 | self.assertIs(m.y, None) |
| 2289 | |
| 2290 | # Decimal(MyDecimal) |
| 2291 | x = Decimal(m) |
| 2292 | self.assertIs(type(x), Decimal) |
| 2293 | self.assertEqual(x, d) |
| 2294 | |
| 2295 | # MyDecimal(MyDecimal) |
| 2296 | m.y = 9 |
| 2297 | x = MyDecimal(m) |
| 2298 | self.assertIs(type(x), MyDecimal) |
| 2299 | self.assertEqual(x, d) |
| 2300 | self.assertIs(x.y, None) |
| 2301 | |
| 2302 | def test_implicit_context(self): |
| 2303 | Decimal = self.decimal.Decimal |