std::complex casts
(doc)
| 482 | |
| 483 | |
| 484 | def test_complex_cast(doc): |
| 485 | """std::complex casts""" |
| 486 | |
| 487 | class Complex: |
| 488 | def __complex__(self) -> complex: |
| 489 | return complex(5, 4) |
| 490 | |
| 491 | class Float: |
| 492 | def __float__(self) -> float: |
| 493 | return 5.0 |
| 494 | |
| 495 | class Int: |
| 496 | def __int__(self) -> int: |
| 497 | return 3 |
| 498 | |
| 499 | class Index: |
| 500 | def __index__(self) -> int: |
| 501 | return 1 |
| 502 | |
| 503 | assert m.complex_cast(1) == "1.0" |
| 504 | assert m.complex_cast(1.0) == "1.0" |
| 505 | assert m.complex_cast(Complex()) == "(5.0, 4.0)" |
| 506 | assert m.complex_cast(2j) == "(0.0, 2.0)" |
| 507 | |
| 508 | convert, noconvert = m.complex_convert, m.complex_noconvert |
| 509 | |
| 510 | def requires_conversion(v): |
| 511 | pytest.raises(TypeError, noconvert, v) |
| 512 | |
| 513 | def cant_convert(v): |
| 514 | pytest.raises(TypeError, convert, v) |
| 515 | |
| 516 | assert ( |
| 517 | doc(convert) |
| 518 | == "complex_convert(arg0: typing.SupportsComplex | typing.SupportsFloat | typing.SupportsIndex) -> complex" |
| 519 | ) |
| 520 | assert doc(noconvert) == "complex_noconvert(arg0: complex) -> complex" |
| 521 | |
| 522 | assert convert(1) == 1.0 |
| 523 | assert convert(2.0) == 2.0 |
| 524 | assert convert(1 + 5j) == 1.0 + 5.0j |
| 525 | assert convert(Complex()) == 5.0 + 4j |
| 526 | assert convert(Float()) == 5.0 |
| 527 | assert isinstance(convert(Float()), complex) |
| 528 | cant_convert(Int()) |
| 529 | assert convert(Index()) == 1 |
| 530 | assert isinstance(convert(Index()), complex) |
| 531 | |
| 532 | requires_conversion(1) |
| 533 | requires_conversion(2.0) |
| 534 | assert noconvert(1 + 5j) == 1.0 + 5.0j |
| 535 | requires_conversion(Complex()) |
| 536 | requires_conversion(Float()) |
| 537 | requires_conversion(Index()) |
| 538 | |
| 539 | |
| 540 | def test_bool_caster(): |
nothing calls this directly
no test coverage detected