import pickle from .. import loadi def generate_org_lines(num_top_nodes, depth=3, nodes_per_level=1, _level=1): if depth == 0: return for i in range(num_top_nodes): yield ("*" * _level) + ' {0}-th heading of level {1}'.format(i, _level) for child in generate_org_lines( nodes_per_level, depth - 1, nodes_per_level, _level + 1): yield child def num_generate_org_lines(num_top_nodes, depth=3, nodes_per_level=1): if depth == 0: return 0 return num_top_nodes * ( 1 + num_generate_org_lines( nodes_per_level, depth - 1, nodes_per_level)) def test_picklable() -> None: num = 1000 depth = 3 nodes_per_level = 1 root = loadi(generate_org_lines(num, depth, nodes_per_level)) assert sum(1 for _ in root) == num_generate_org_lines(num, depth, nodes_per_level) + 1 pickle.dumps(root) # should not fail