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