summaryrefslogtreecommitdiff
path: root/numpy/testing/tests/test_utils.py
diff options
context:
space:
mode:
authorEric Wieser <wieser.eric@gmail.com>2018-04-12 00:27:11 -0700
committerEric Wieser <wieser.eric@gmail.com>2018-04-12 01:25:53 -0700
commit5c3d52405b647bc69185f657ed4c180c02ac14f7 (patch)
treee40a081ee050b9d85119ac57b5acc39b56c22ab5 /numpy/testing/tests/test_utils.py
parent265983b4ec859ad528623f3c5da7c96f83526f4f (diff)
downloadnumpy-5c3d52405b647bc69185f657ed4c180c02ac14f7.tar.gz
TST: Extract a helper function to test for reference cycles
This also means we can now test that our test is actually able to detect the type of failure we expect Trying to give myself some tools to debug the failure at https://github.com/numpy/numpy/pull/10882/files#r180813166
Diffstat (limited to 'numpy/testing/tests/test_utils.py')
-rw-r--r--numpy/testing/tests/test_utils.py29
1 files changed, 28 insertions, 1 deletions
diff --git a/numpy/testing/tests/test_utils.py b/numpy/testing/tests/test_utils.py
index 35f81d8a7..52726db6e 100644
--- a/numpy/testing/tests/test_utils.py
+++ b/numpy/testing/tests/test_utils.py
@@ -14,7 +14,7 @@ from numpy.testing import (
assert_raises, assert_warns, assert_no_warnings, assert_allclose,
assert_approx_equal, assert_array_almost_equal_nulp, assert_array_max_ulp,
clear_and_catch_warnings, suppress_warnings, assert_string_equal, assert_,
- tempdir, temppath,
+ tempdir, temppath, assert_no_gc_cycles, HAS_REFCOUNT
)
@@ -1360,3 +1360,30 @@ def test_clear_and_catch_warnings_inherit():
warnings.simplefilter('ignore')
warnings.warn('Some warning')
assert_equal(my_mod.__warningregistry__, {})
+
+
+@pytest.mark.skipif(not HAS_REFCOUNT, reason="Python lacks refcounts")
+def test_assert_no_gc_cycles():
+
+ def no_cycle():
+ b = []
+ b.append([])
+ return b
+
+ with assert_no_gc_cycles():
+ no_cycle()
+
+ assert_no_gc_cycles(no_cycle)
+
+ def make_cycle():
+ a = []
+ a.append(a)
+ a.append(a)
+ return a
+
+ with assert_raises(AssertionError):
+ with assert_no_gc_cycles():
+ make_cycle()
+
+ with assert_raises(AssertionError):
+ assert_no_gc_cycles(make_cycle)