|
| 1 | +import gc |
| 2 | + |
1 | 3 | import pytest |
2 | 4 | from pybind.values import SimpleVariable, Constant |
3 | 5 | from conftest import NoParametersObserver, OneParameterObserver |
@@ -313,13 +315,52 @@ def test_simple_variable_deep_derived_from_diamond_pattern(): |
313 | 315 | assert variable_top in dependencies |
314 | 316 |
|
315 | 317 |
|
316 | | -def test_constant_derived_from_empty(): |
317 | | - constant = Constant("test") |
| 318 | +def test_bind_weak_reference_clears(): |
| 319 | + root_var = SimpleVariable("root0") |
| 320 | + dependent_var = SimpleVariable("") |
| 321 | + dependent_var.bind_to(root_var, bind_weakly=True) |
| 322 | + |
| 323 | + values = [] |
| 324 | + dependent_var.observe(lambda value: values.append(value)) |
| 325 | + |
| 326 | + root_var.value = "root1" |
| 327 | + dependent_var = None |
| 328 | + gc.collect() |
| 329 | + root_var.value = "root2" |
| 330 | + |
| 331 | + assert values == ["root1"] |
| 332 | + |
| 333 | + |
| 334 | +def test_bind_strong_reference_stays(): |
| 335 | + root_var = SimpleVariable("root0") |
| 336 | + dependent_var = SimpleVariable("") |
| 337 | + dependent_var.bind_to(root_var, bind_weakly=False) |
| 338 | + |
| 339 | + values = [] |
| 340 | + dependent_var.observe(lambda value: values.append(value)) |
| 341 | + |
| 342 | + root_var.value = "root1" |
| 343 | + dependent_var = None |
| 344 | + gc.collect() |
| 345 | + root_var.value = "root2" |
| 346 | + |
| 347 | + assert values == ["root1", "root2"] |
| 348 | + |
| 349 | + |
| 350 | +def test_daisy_chain_variables_weak_reference_stays(): |
| 351 | + root_var = SimpleVariable("root0") |
| 352 | + middle_var = SimpleVariable("") |
| 353 | + dependent_var = SimpleVariable("") |
318 | 354 |
|
319 | | - assert constant.derived_from() == frozenset() |
| 355 | + middle_var.bind_to(root_var, bind_weakly=True) |
| 356 | + dependent_var.bind_to(middle_var, bind_weakly=False) |
320 | 357 |
|
| 358 | + values = [] |
| 359 | + dependent_var.observe(lambda value: values.append(value)) |
321 | 360 |
|
322 | | -def test_constant_deep_derived_from_empty(): |
323 | | - constant = Constant("test") |
| 361 | + root_var.value = "root1" |
| 362 | + middle_var = None |
| 363 | + gc.collect() |
| 364 | + root_var.value = "root2" |
324 | 365 |
|
325 | | - assert list(constant.deep_derived_from) == [] |
| 366 | + assert values == ["root1", "root2"] |
0 commit comments