Skip to content

Commit d1f651f

Browse files
Add tests for reference loops.
1 parent 4134f4d commit d1f651f

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

Lib/test/test_unicodedata.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
import sys
1313
import unicodedata
1414
import unittest
15+
import weakref
1516
from test.support import (
17+
gc_collect,
1618
open_urlresource,
1719
requires_resource,
1820
script_helper,
@@ -1338,6 +1340,28 @@ def run_grapheme_break_tests(self, testdata):
13381340
self.assertEqual([x.start for x in result], breaks[i:-1], comment)
13391341
self.assertEqual([x.end for x in result], breaks[i+1:], comment)
13401342

1343+
def test_reference_loops(self):
1344+
# Test that reference loops involving GraphemeBreakIterator or
1345+
# Segment can be broken by the garbage collector.
1346+
class S(str):
1347+
pass
1348+
1349+
s = S('abc')
1350+
s.ref = unicodedata.iter_graphemes(s)
1351+
wr = weakref.ref(s)
1352+
del s
1353+
self.assertIsNotNone(wr())
1354+
gc_collect()
1355+
self.assertIsNone(wr())
1356+
1357+
s = S('abc')
1358+
s.ref = next(unicodedata.iter_graphemes(s))
1359+
wr = weakref.ref(s)
1360+
del s
1361+
self.assertIsNotNone(wr())
1362+
gc_collect()
1363+
self.assertIsNone(wr())
1364+
13411365

13421366
if __name__ == "__main__":
13431367
unittest.main()

0 commit comments

Comments
 (0)