(self)
| 1364 | @cpython_only |
| 1365 | @requires_specialization |
| 1366 | def test_binary_op(self): |
| 1367 | def binary_op_add_int(): |
| 1368 | for _ in range(_testinternalcapi.SPECIALIZATION_THRESHOLD): |
| 1369 | a, b = 1, 2 |
| 1370 | c = a + b |
| 1371 | self.assertEqual(c, 3) |
| 1372 | |
| 1373 | binary_op_add_int() |
| 1374 | self.assert_specialized(binary_op_add_int, "BINARY_OP_ADD_INT") |
| 1375 | self.assert_no_opcode(binary_op_add_int, "BINARY_OP") |
| 1376 | |
| 1377 | def binary_op_int_non_compact(): |
| 1378 | for _ in range(_testinternalcapi.SPECIALIZATION_THRESHOLD): |
| 1379 | a, b = 10000000000, 1 |
| 1380 | c = a + b |
| 1381 | self.assertEqual(c, 10000000001) |
| 1382 | c = a - b |
| 1383 | self.assertEqual(c, 9999999999) |
| 1384 | c = a * b |
| 1385 | self.assertEqual(c, 10000000000) |
| 1386 | |
| 1387 | binary_op_int_non_compact() |
| 1388 | self.assert_no_opcode(binary_op_int_non_compact, "BINARY_OP_ADD_INT") |
| 1389 | self.assert_no_opcode(binary_op_int_non_compact, "BINARY_OP_SUBTRACT_INT") |
| 1390 | self.assert_no_opcode(binary_op_int_non_compact, "BINARY_OP_MULTIPLY_INT") |
| 1391 | |
| 1392 | def binary_op_add_unicode(): |
| 1393 | for _ in range(_testinternalcapi.SPECIALIZATION_THRESHOLD): |
| 1394 | a, b = "foo", "bar" |
| 1395 | c = a + b |
| 1396 | self.assertEqual(c, "foobar") |
| 1397 | |
| 1398 | binary_op_add_unicode() |
| 1399 | self.assert_specialized(binary_op_add_unicode, "BINARY_OP_ADD_UNICODE") |
| 1400 | self.assert_no_opcode(binary_op_add_unicode, "BINARY_OP") |
| 1401 | |
| 1402 | def binary_op_add_extend(): |
| 1403 | for _ in range(_testinternalcapi.SPECIALIZATION_THRESHOLD): |
| 1404 | a, b = 6, 3.0 |
| 1405 | c = a + b |
| 1406 | self.assertEqual(c, 9.0) |
| 1407 | c = b + a |
| 1408 | self.assertEqual(c, 9.0) |
| 1409 | c = a - b |
| 1410 | self.assertEqual(c, 3.0) |
| 1411 | c = b - a |
| 1412 | self.assertEqual(c, -3.0) |
| 1413 | c = a * b |
| 1414 | self.assertEqual(c, 18.0) |
| 1415 | c = b * a |
| 1416 | self.assertEqual(c, 18.0) |
| 1417 | c = a / b |
| 1418 | self.assertEqual(c, 2.0) |
| 1419 | c = b / a |
| 1420 | self.assertEqual(c, 0.5) |
| 1421 | |
| 1422 | binary_op_add_extend() |
| 1423 | self.assert_specialized(binary_op_add_extend, "BINARY_OP_EXTEND") |
nothing calls this directly
no test coverage detected