Fix the dead loop issue here: https://gist.github.com/sunflowerdeath/c0e2b46b6f5d2e32d368f8e04f730237
# Reason for the Dead Loop in `find_common_ancestor`
### Original Assumptions
1. **Dependency Assumption**
If a DagNode is depended upon by other nodes, the direction of this dependency will only point to before the end of the node. This assumption is used in system design.
2. **Node Overlap Assumption**
DagNodes do not overlap with each other. When retrieving DagNodes from two different positions:
- They are either completely identical
- Or they do not overlap at all
- If there is overlap, it means they are the same node
### Current Issues
1. **Issues Caused by Lazy Loading**
Due to the use of lazy loading, new situations have arisen. Initially:
- A certain DagNode is not depended upon by other DagNodes
- Therefore, the initially retrieved form is complete
2. **Impact of Subsequent Loading**
After loading additional DagNodes:
- The newly loaded DagNode may depend on the internal position of the previously complete DagNode
- This causes the originally complete DagNode to be split into multiple smaller DagNodes
3. **Violation of Original Assumptions**
In this case, when retrieving the content of the original DagNode again:
- Other DagNode dependencies may appear in the middle
- There may be overlaps on the DagNode
- This violates the original design assumptions
# Fix Approach
Remove the assumption in the original implementation that "overlapping DagNodes will not occur." When overlapping DagNodes are found, retain the shorter one and remove the longer one.
* feat: checkout to frontiers
* feat: record timestamp
* fix: use unicode len by default for text
now "你好" has length of 2 instead of 6
* chore: rm dbg!
* refactor: make internal and leaf use same type of cache
* refactor: add cache update
* test : add normalization to arb test
* test: fuzz
* fix: internal insert bug
* fix: missing utf16
* test: fix test sub overflow
* feat: use heapless for binary heap
* refactor: refine warning
* test: reduce test time
* perf: reduce computation when finding pos
* bench: fix ignore parse time in benching
* feat: make it compile in new sig (should be merged)
* fix: type err
* fix: fix type err
* fix: cache when merge & borrow
* refactor: simplify code
* fix: cumulated tree trait bug
* fix: a few fatal bugs (still buggy)
* fix: global tree trait
* refactor: rm an unused fn
* fix: insert at cursor bug
* fix: in cursor insert cache may be invalid
strip the checker there
* chore: remove needless check
* refactor: add inline to methods
* test: remove cfg=mem for mem example
* fix: type err