const tooMuchRecursion = (1 << 16);

const nestobj = (depth) => {
    let doc = {};
    let cur = doc;
    for (let i = 0; i < depth; i++) {
        cur[i] = {};
        cur = cur[i];
    }
    cur['a'] = 'foo';
    return doc;
};

const nestarr = (depth) => {
    let doc = [0];
    let cur = doc;
    for (let i = 0; i < depth; i++) {
        cur[0] = [0];
        cur = cur[0];
    }
    cur[0] = 'foo';
    return doc;
};

assert.doesNotThrow(tojson, [nestobj(tooMuchRecursion)], 'failed to print deeply nested object');
assert.doesNotThrow(tojson, [nestarr(tooMuchRecursion)], 'failed to print deeply nested array');
