MCPcopy Create free account
hub / github.com/pybind/pybind11 / test_complex_cast

Function test_complex_cast

tests/test_builtin_casters.py:484–537  ·  view source on GitHub ↗

std::complex casts

(doc)

Source from the content-addressed store, hash-verified

482
483
484def 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
540def test_bool_caster():

Callers

nothing calls this directly

Calls 8

ComplexClass · 0.85
FloatClass · 0.85
isinstanceFunction · 0.85
cant_convertFunction · 0.85
IntClass · 0.85
IndexClass · 0.85
requires_conversionFunction · 0.85
docFunction · 0.70

Tested by

no test coverage detected