Tests init factory functions with dual main/alias factory functions
()
| 226 | |
| 227 | @pytest.mark.skipif("env.GRAALPY", reason="Cannot reliably trigger GC") |
| 228 | def test_init_factory_dual(): |
| 229 | """Tests init factory functions with dual main/alias factory functions""" |
| 230 | from pybind11_tests.factory_constructors import TestFactory7 |
| 231 | |
| 232 | cstats = [TestFactory7.get_cstats(), TestFactory7.get_alias_cstats()] |
| 233 | cstats[0].alive() # force gc |
| 234 | n_inst = ConstructorStats.detail_reg_inst() |
| 235 | |
| 236 | class PythFactory7(TestFactory7): |
| 237 | def get(self): |
| 238 | return 100 + TestFactory7.get(self) |
| 239 | |
| 240 | a1 = TestFactory7(1) |
| 241 | a2 = PythFactory7(2) |
| 242 | assert a1.get() == 1 |
| 243 | assert a2.get() == 102 |
| 244 | assert not a1.has_alias() |
| 245 | assert a2.has_alias() |
| 246 | |
| 247 | b1 = TestFactory7(tag.pointer, 3) |
| 248 | b2 = PythFactory7(tag.pointer, 4) |
| 249 | assert b1.get() == 3 |
| 250 | assert b2.get() == 104 |
| 251 | assert not b1.has_alias() |
| 252 | assert b2.has_alias() |
| 253 | |
| 254 | c1 = TestFactory7(tag.mixed, 5) |
| 255 | c2 = PythFactory7(tag.mixed, 6) |
| 256 | assert c1.get() == 5 |
| 257 | assert c2.get() == 106 |
| 258 | assert not c1.has_alias() |
| 259 | assert c2.has_alias() |
| 260 | |
| 261 | d1 = TestFactory7(tag.base, tag.pointer, 7) |
| 262 | d2 = PythFactory7(tag.base, tag.pointer, 8) |
| 263 | assert d1.get() == 7 |
| 264 | assert d2.get() == 108 |
| 265 | assert not d1.has_alias() |
| 266 | assert d2.has_alias() |
| 267 | |
| 268 | # Both return an alias; the second multiplies the value by 10: |
| 269 | e1 = TestFactory7(tag.alias, tag.pointer, 9) |
| 270 | e2 = PythFactory7(tag.alias, tag.pointer, 10) |
| 271 | assert e1.get() == 9 |
| 272 | assert e2.get() == 200 |
| 273 | assert e1.has_alias() |
| 274 | assert e2.has_alias() |
| 275 | |
| 276 | f1 = TestFactory7(tag.shared_ptr, tag.base, 11) |
| 277 | f2 = PythFactory7(tag.shared_ptr, tag.base, 12) |
| 278 | assert f1.get() == 11 |
| 279 | assert f2.get() == 112 |
| 280 | assert not f1.has_alias() |
| 281 | assert f2.has_alias() |
| 282 | |
| 283 | g1 = TestFactory7(tag.shared_ptr, tag.invalid_base, 13) |
| 284 | assert g1.get() == 13 |
| 285 | assert not g1.has_alias() |
nothing calls this directly
no test coverage detected