Skip to content

[BUG]: 5 tests fail on FreeBSD #5872

@yurivict

Description

@yurivict

Required prerequisites

What version (or hash if on master) of pybind11 are you using?

3.0.1

Problem description

============================================================================== FAILURES ===============================================================================
___________________________________________________________________________ test_smart_ptr ____________________________________________________________________________

capture = <conftest.Capture object at 0x9ccf81aa3d0>

    @pytest.mark.skipif("env.GRAALPY", reason="Cannot reliably trigger GC")
    def test_smart_ptr(capture):
        # Object1
        for i, o in enumerate(
            [m.make_object_1(), m.make_object_2(), m.MyObject1(3)], start=1
        ):
            assert o.getRefCount() == 1
            with capture:
                m.print_object_1(o)
                m.print_object_2(o)
                m.print_object_3(o)
                m.print_object_4(o)
            assert capture == f"MyObject1[{i}]\n" * 4
    
        for i, o in enumerate(
            [m.make_myobject1_1(), m.make_myobject1_2(), m.MyObject1(6), 7], start=4
        ):
            print(o)
            with capture:
                if not isinstance(o, int):
                    m.print_object_1(o)
                    m.print_object_2(o)
                    m.print_object_3(o)
                    m.print_object_4(o)
                m.print_myobject1_1(o)
                m.print_myobject1_2(o)
                m.print_myobject1_3(o)
                m.print_myobject1_4(o)
    
            times = 4 if isinstance(o, int) else 8
            assert capture == f"MyObject1[{i}]\n" * times
    
        cstats = ConstructorStats.get(m.MyObject1)
        assert cstats.alive() == 0
        expected_values = [f"MyObject1[{i}]" for i in range(1, 7)] + ["MyObject1[7]"] * 4
>       assert cstats.values() == expected_values
E       AssertionError: assert ['MyObject1[0...ect1[5]', ...] == ['MyObject1[1...ect1[6]', ...]
E         
E         At index 0 diff: 'MyObject1[0]' != 'MyObject1[1]'
E         Left contains one more item: 'MyObject1[7]'
E         Use -v to get more diff

capture    = <conftest.Capture object at 0x9ccf81aa3d0>
cstats     = <pybind11_tests.ConstructorStats object at 0x9ccf82ef8b0>
expected_values = ['MyObject1[1]', 'MyObject1[2]', 'MyObject1[3]', 'MyObject1[4]', 'MyObject1[5]', 'MyObject1[6]', ...]
i          = 7
o          = 7
times      = 4

../../pybind11-3.0.1/tests/test_smart_ptr.py:46: AssertionError
------------------------------------------------------------------------ Captured stdout call -------------------------------------------------------------------------
### (anonymous namespace)::MyObject1 @ 0x9ccf83b87d0 destroyed
### Object @ 0x9ccf83b87d0 destroyed
### ref<(anonymous namespace)::MyObject1> @ 0x9ccf7eb98c8 destroyed
### (anonymous namespace)::MyObject1 @ 0x9ccb5e1c3c0 destroyed
### Object @ 0x9ccb5e1c3c0 destroyed
### ref<(anonymous namespace)::MyObject1> @ 0x9ccf931f7c8 destroyed
### (anonymous namespace)::MyObject1 @ 0x9ccf83b84c0 destroyed
### Object @ 0x9ccf83b84c0 destroyed
### ref<(anonymous namespace)::MyObject1> @ 0x9ccf82ef8c8 destroyed
___________________________________________________________________________ test_to_python ____________________________________________________________________________

    @pytest.mark.xfail(
        env.PYPY, reason="PyPy 7.3.7 doesn't clear this anymore", strict=False
    )
    def test_to_python():
        mat = m.Matrix(5, 4)
        assert memoryview(mat).shape == (5, 4)
    
        assert mat[2, 3] == 0
        mat[2, 3] = 4.0
        mat[3, 2] = 7.0
        assert mat[2, 3] == 4
        assert mat[3, 2] == 7
        assert struct.unpack_from("f", mat, (3 * 4 + 2) * 4) == (7,)
        assert struct.unpack_from("f", mat, (2 * 4 + 3) * 4) == (4,)
    
        mat2 = np.array(mat, copy=False)
        assert mat2.shape == (5, 4)
        assert abs(mat2).sum() == 11
        assert mat2[2, 3] == 4
        assert mat2[3, 2] == 7
        mat2[2, 3] = 5
        assert mat2[2, 3] == 5
    
        if env.GRAALPY:
            pytest.skip("ConstructorStats is incompatible with GraalPy.")
        cstats = ConstructorStats.get(m.Matrix)
        assert cstats.alive() == 1
        del mat
        pytest.gc_collect()
        assert cstats.alive() == 1
        del mat2  # holds a mat reference
        pytest.gc_collect()
        assert cstats.alive() == 0
>       assert cstats.values() == ["5x4 matrix"]
E       AssertionError: assert ['5x4 matrix'... '5x4 matrix'] == ['5x4 matrix']
E         
E         Left contains 5 more items, first extra item: '4x5 matrix'
E         Use -v to get more diff

cstats     = <pybind11_tests.ConstructorStats object at 0x9ccf8ab3df0>

../../pybind11-3.0.1/tests/test_buffers.py:133: AssertionError
------------------------------------------------------------------------ Captured stdout call -------------------------------------------------------------------------
### test_submodule_buffers(module_&)::Matrix @ 0x9ccf87dcb20 created 5x4 matrix
### test_submodule_buffers(module_&)::Matrix @ 0x9ccf87dcb20 destroyed 5x4 matrix
_____________________________________________________________________ test_methods_and_attributes _____________________________________________________________________

    def test_methods_and_attributes():
        instance1 = m.ExampleMandA()
        instance2 = m.ExampleMandA(32)
    
        instance1.add1(instance2)
        instance1.add2(instance2)
        instance1.add3(instance2)
        instance1.add4(instance2)
        instance1.add5(instance2)
        instance1.add6(32)
        instance1.add7(32)
        instance1.add8(32)
        instance1.add9(32)
        instance1.add10(32)
    
        assert str(instance1) == "ExampleMandA[value=320]"
        assert str(instance2) == "ExampleMandA[value=32]"
        assert str(instance1.self1()) == "ExampleMandA[value=320]"
        assert str(instance1.self2()) == "ExampleMandA[value=320]"
        assert str(instance1.self3()) == "ExampleMandA[value=320]"
        assert str(instance1.self4()) == "ExampleMandA[value=320]"
        assert str(instance1.self5()) == "ExampleMandA[value=320]"
    
        assert instance1.internal1() == 320
        assert instance1.internal2() == 320
        assert instance1.internal3() == 320
        assert instance1.internal4() == 320
        assert instance1.internal5() == 320
    
        assert instance1.overloaded() == "()"
        assert instance1.overloaded(0) == "(int)"
        assert instance1.overloaded(1, 1.0) == "(int, float)"
        assert instance1.overloaded(2.0, 2) == "(float, int)"
        assert instance1.overloaded(3, 3) == "(int, int)"
        assert instance1.overloaded(4.0, 4.0) == "(float, float)"
        assert instance1.overloaded_const(-3) == "(int) const"
        assert instance1.overloaded_const(5, 5.0) == "(int, float) const"
        assert instance1.overloaded_const(6.0, 6) == "(float, int) const"
        assert instance1.overloaded_const(7, 7) == "(int, int) const"
        assert instance1.overloaded_const(8.0, 8.0) == "(float, float) const"
        assert instance1.overloaded_float(1, 1) == "(float, float)"
        assert instance1.overloaded_float(1, 1.0) == "(float, float)"
        assert instance1.overloaded_float(1.0, 1) == "(float, float)"
        assert instance1.overloaded_float(1.0, 1.0) == "(float, float)"
    
        assert instance1.value == 320
        instance1.value = 100
        assert str(instance1) == "ExampleMandA[value=100]"
    
        if env.GRAALPY:
            pytest.skip("ConstructorStats is incompatible with GraalPy.")
    
        cstats = ConstructorStats.get(m.ExampleMandA)
        assert cstats.alive() == 2
        del instance1, instance2
        assert cstats.alive() == 0
>       assert cstats.values() == ["32"]
E       AssertionError: assert ['123', '-100...', '-7', '32'] == ['32']
E         
E         At index 0 diff: '123' != '32'
E         Left contains 5 more items, first extra item: '-100'
E         Use -v to get more diff

cstats     = <pybind11_tests.ConstructorStats object at 0x9ccf7f329f0>

../../pybind11-3.0.1/tests/test_methods_and_attributes.py:85: AssertionError
------------------------------------------------------------------------ Captured stdout call -------------------------------------------------------------------------
### ExampleMandA @ 0x9ccf853c238 created via default constructor
### ExampleMandA @ 0x9ccf853c1e0 created 32
### ExampleMandA @ 0x4c0d1e00 created via copy constructor
### ExampleMandA @ 0x4c0d1e04 created via move constructor
### ExampleMandA @ 0x4c0d1e04 destroyed
### ExampleMandA @ 0x4c0d1e00 destroyed
### ExampleMandA @ 0x4c0d1e4c created via copy constructor
### ExampleMandA @ 0x9ccf853c098 created via move constructor
### ExampleMandA @ 0x4c0d1e4c destroyed
### ExampleMandA @ 0x9ccf853c098 destroyed
### ExampleMandA @ 0x9ccf853c238 destroyed
### ExampleMandA @ 0x9ccf853c1e0 destroyed
____________________________________________________________________________ test_sequence ____________________________________________________________________________

    def test_sequence():
        cstats = ConstructorStats.get(m.Sequence)
    
        s = m.Sequence(5)
        if not env.GRAALPY:
>           assert cstats.values() == ["of size", "5"]
E           AssertionError: assert ['of size', '...of size', '5'] == ['of size', '5']
E             
E             Left contains 2 more items, first extra item: 'of size'
E             Use -v to get more diff

cstats     = <pybind11_tests.ConstructorStats object at 0x9ccf9296330>
s          = <pybind11_tests.sequences_and_iterators.Sequence object at 0x9ccf92948b0>

../../pybind11-3.0.1/tests/test_sequences_and_iterators.py:125: AssertionError
------------------------------------------------------------------------ Captured stdout call -------------------------------------------------------------------------
### test_submodule_sequences_and_iterators(module_&)::Sequence @ 0x9ccf83b8a50 created of size 5
_______________________________________________________________ test_cross_module_exception_translator ________________________________________________________________

    @pytest.mark.xfail(
        "(env.MACOS and env.PYPY) or env.ANDROID",
        raises=RuntimeError,
        reason="See Issue #2847, PR #2999, PR #4324",
        strict=not env.PYPY,  # PR 5569
    )
    def test_cross_module_exception_translator():
        with pytest.raises(KeyError):
            # translator registered in cross_module_tests
>           m.throw_should_be_translated_to_key_error()
E           RuntimeError


../../pybind11-3.0.1/tests/test_exceptions.py:87: RuntimeError
=============================================================================== XPASSES ===============================================================================
======================================================================= short test summary info =======================================================================
SKIPPED [1] ../../pybind11-3.0.1/tests/test_pytypes.py:1088: C++20 non-type template args feature not available.
SKIPPED [3] ../../pybind11-3.0.1/tests/test_pytypes.py:1116: <ranges> not available.
SKIPPED [1] ../../pybind11-3.0.1/tests/test_pytypes.py:425: Not defined: PYBIND11_HANDLE_REF_DEBUG
SKIPPED [3] ../../pybind11-3.0.1/tests/test_pytypes.py:1103: <ranges> not available.
SKIPPED [1] ../../pybind11-3.0.1/tests/test_pytypes.py:1044: C++20 non-type template args feature not available.
SKIPPED [3] ../../pybind11-3.0.1/tests/test_pytypes.py:1128: <ranges> not available.
SKIPPED [1] ../../pybind11-3.0.1/tests/test_native_enum.py:183: NDEBUG disables cast safety check
SKIPPED [1] ../../pybind11-3.0.1/tests/test_scoped_critical_section.py:15: no <barrier>
SKIPPED [1] ../../pybind11-3.0.1/tests/test_scoped_critical_section.py:21: no <barrier>
SKIPPED [1] ../../pybind11-3.0.1/tests/test_scoped_critical_section.py:27: no <barrier>
SKIPPED [1] ../../pybind11-3.0.1/tests/test_stl.py:168: no <experimental/optional>
SKIPPED [2] ../../pybind11-3.0.1/tests/test_multiple_interpreters.py:76: Test requires the interpreters stdlib module
SKIPPED [1] ../../pybind11-3.0.1/tests/test_multiple_interpreters.py:127: Requires 3.14.0b3+
XFAIL ../../pybind11-3.0.1/tests/test_unnamed_namespace_a.py::test_have_both_class_any_struct - Known issues: https://github.com/pybind/pybind11/pull/4319
XFAIL ../../pybind11-3.0.1/tests/test_unnamed_namespace_a.py::test_have_class_any_struct[None] - Known issues: https://github.com/pybind/pybind11/pull/4319
XPASS ../../pybind11-3.0.1/tests/test_unnamed_namespace_a.py::test_have_class_any_struct[unnamed_namespace_a_any_struct] - Known issues: https://github.com/pybind/pybind11/pull/4319
FAILED ../../pybind11-3.0.1/tests/test_smart_ptr.py::test_smart_ptr - AssertionError: assert ['MyObject1[0...ect1[5]', ...] == ['MyObject1[1...ect1[6]', ...]
FAILED ../../pybind11-3.0.1/tests/test_buffers.py::test_to_python - AssertionError: assert ['5x4 matrix'... '5x4 matrix'] == ['5x4 matrix']
FAILED ../../pybind11-3.0.1/tests/test_methods_and_attributes.py::test_methods_and_attributes - AssertionError: assert ['123', '-100...', '-7', '32'] == ['32']
FAILED ../../pybind11-3.0.1/tests/test_sequences_and_iterators.py::test_sequence - AssertionError: assert ['of size', '...of size', '5'] == ['of size', '5']
FAILED ../../pybind11-3.0.1/tests/test_exceptions.py::test_cross_module_exception_translator - RuntimeError
================================================== 5 failed, 1253 passed, 20 skipped, 2 xfailed, 1 xpassed in 53.99s ==================================================

Python-3.11
FreeBSD 14.3

Reproducible example code


Is this a regression? Put the last known working version here if it is.

Not a regression

Metadata

Metadata

Assignees

No one assigned

    Labels

    triageNew bug, unverified

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions