diff --git a/src/types/AbstractType.js b/src/types/AbstractType.js index 9e1a877c..8fc8eca9 100644 --- a/src/types/AbstractType.js +++ b/src/types/AbstractType.js @@ -77,6 +77,10 @@ export const useSearchMarker = (tr, yarray, index, f) => { } fsm.rel = 0 } + if (fsm.rel > 0) { + fsm.index -= fsm.rel + fsm.rel = 0 + } if (!createFreshMarker) { // reused old marker and we moved to a different position prevItem.marker = false diff --git a/src/utils/ListIterator.js b/src/utils/ListIterator.js index d7601c1b..829d3993 100644 --- a/src/utils/ListIterator.js +++ b/src/utils/ListIterator.js @@ -289,6 +289,9 @@ export class ListIterator { const startLength = len const sm = this.type._searchMarker let item = this.nextItem + if (this.index + len > this.type._length) { + throw lengthExceeded + } while (len > 0) { while (item && !item.deleted && item.countable && !this.reachedEnd && len > 0 && item.moved === this.currMove && item !== this.currMoveEnd) { if (this.rel > 0) { diff --git a/tests/y-array.tests.js b/tests/y-array.tests.js index 2a1b4452..1ffa1a86 100644 --- a/tests/y-array.tests.js +++ b/tests/y-array.tests.js @@ -671,6 +671,20 @@ export const testRepeatGeneratingYarrayTests6 = tc => { compareTestobjects(applyRandomTests(tc, arrayTransactions, 6, monitorArrayTestObject)) } +/** + * @param {t.TestCase} tc + */ +export const testRepeatGeneratingYarrayTests30 = tc => { + compareTestobjects(applyRandomTests(tc, arrayTransactions, 30, monitorArrayTestObject)) +} + +/** + * @param {t.TestCase} tc + */ +export const testRepeatGeneratingYarrayTests35 = tc => { + compareTestobjects(applyRandomTests(tc, arrayTransactions, 35, monitorArrayTestObject)) +} + /** * @param {t.TestCase} tc */