aboutsummaryrefslogtreecommitdiff
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