fixed inconsistency bugs for tests<1000
This commit is contained in:
parent
82e2254302
commit
c95dae3c33
@ -36,7 +36,7 @@ function wait (t) {
|
||||
return new Promise(function (resolve) {
|
||||
setTimeout(function () {
|
||||
resolve()
|
||||
}, t * 5)
|
||||
}, t)
|
||||
})
|
||||
}
|
||||
g.wait = wait
|
||||
|
@ -207,7 +207,7 @@ class AbstractTransaction {
|
||||
yield* this.setOperation(parent)
|
||||
}
|
||||
yield* this.removeOperation(o.id) // actually remove it from the os
|
||||
yield* this.ds.markGarbageCollected(o.id)
|
||||
this.ds.markGarbageCollected(o.id)
|
||||
}
|
||||
}
|
||||
Y.AbstractTransaction = AbstractTransaction
|
||||
|
@ -4,6 +4,8 @@
|
||||
class DeleteStore extends Y.utils.RBTree {
|
||||
constructor () {
|
||||
super()
|
||||
// TODO: debugggg
|
||||
this.mem = []
|
||||
}
|
||||
isDeleted (id) {
|
||||
var n = this.findNodeWithUpperBound(id)
|
||||
@ -14,8 +16,10 @@ class DeleteStore extends Y.utils.RBTree {
|
||||
|
||||
returns the delete node
|
||||
*/
|
||||
* markGarbageCollected (id) {
|
||||
markGarbageCollected (id) {
|
||||
this.mem.push({"gc": id})
|
||||
var n = this.markDeleted(id)
|
||||
this.mem.pop()
|
||||
if (!n.val.gc) {
|
||||
if (n.val.id[1] < id[1]) {
|
||||
// un-extend left
|
||||
@ -30,16 +34,24 @@ class DeleteStore extends Y.utils.RBTree {
|
||||
}
|
||||
// set gc'd
|
||||
n.val.gc = true
|
||||
|
||||
// can extend left?
|
||||
var prev = n.prev()
|
||||
if (prev != null && prev.val.gc) {
|
||||
var next = n.next()
|
||||
// can extend left?
|
||||
if (
|
||||
prev != null &&
|
||||
prev.val.gc &&
|
||||
Y.utils.compareIds([prev.val.id[0], prev.val.id[1] + prev.val.len], n.val.id)
|
||||
) {
|
||||
prev.val.len += n.val.len
|
||||
super.delete(n.val.id)
|
||||
n = prev
|
||||
}
|
||||
// can extend right?
|
||||
var next = n.next()
|
||||
if (next != null && next.val.gc) {
|
||||
if (
|
||||
next != null &&
|
||||
next.val.gc &&
|
||||
Y.utils.compareIds([n.val.id[0], n.val.id[1] + n.val.len], next.val.id)
|
||||
) {
|
||||
n.val.len += next.val.len
|
||||
super.delete(next.val.id)
|
||||
}
|
||||
@ -52,12 +64,13 @@ class DeleteStore extends Y.utils.RBTree {
|
||||
returns the delete node
|
||||
*/
|
||||
markDeleted (id) {
|
||||
this.mem.push({"del": id})
|
||||
var n = this.findNodeWithUpperBound(id)
|
||||
if (n != null && n.val.id[0] === id[0]) {
|
||||
if (n.val.id[1] <= id[1] && id[1] < n.val.id[1] + n.val.len) {
|
||||
// already deleted
|
||||
return n
|
||||
} else if (n.val.id[1] + n.val.len === id[1]) {
|
||||
} else if (n.val.id[1] + n.val.len === id[1] && !n.val.gc) {
|
||||
// can extend existing deletion
|
||||
n.val.len++
|
||||
} else {
|
||||
@ -70,9 +83,10 @@ class DeleteStore extends Y.utils.RBTree {
|
||||
}
|
||||
// can extend right?
|
||||
var next = n.next()
|
||||
if (next !== null &&
|
||||
if (
|
||||
next !== null &&
|
||||
Y.utils.compareIds([n.val.id[0], n.val.id[1] + n.val.len], next.val.id) &&
|
||||
next.val.gc === false
|
||||
!next.val.gc
|
||||
) {
|
||||
n.val.len = n.val.len + next.val.len
|
||||
super.delete(next.val.id)
|
||||
|
@ -25,5 +25,61 @@ describe('Memory', function () {
|
||||
ds.markDeleted(['0', 2])
|
||||
expect(ds.toDeleteSet()).toEqual({'0': [[2, 3, false]]})
|
||||
})
|
||||
it('Debug #1', function () {
|
||||
ds.markDeleted(['166', 0])
|
||||
ds.markDeleted(['166', 2])
|
||||
ds.markDeleted(['166', 0])
|
||||
ds.markDeleted(['166', 2])
|
||||
ds.markGarbageCollected(['166', 2])
|
||||
ds.markDeleted(['166', 1])
|
||||
ds.markDeleted(['166', 3])
|
||||
ds.markGarbageCollected(['166', 3])
|
||||
ds.markDeleted(['166', 0])
|
||||
expect(ds.toDeleteSet()).toEqual({'166': [[0, 2, false], [2, 2, true]]})
|
||||
})
|
||||
it('Debug #2', function () {
|
||||
ds.markDeleted(['293', 0])
|
||||
ds.markDeleted(['291', 2])
|
||||
ds.markDeleted(['291', 2])
|
||||
ds.markGarbageCollected(['293', 0])
|
||||
ds.markDeleted(['293', 1])
|
||||
ds.markGarbageCollected(['291', 2])
|
||||
expect(ds.toDeleteSet()).toEqual({'291': [[2, 1, true]], '293': [[0, 1, true], [1, 1, false]]})
|
||||
})
|
||||
it('Debug #2', function () {
|
||||
ds.markDeleted(['581', 0])
|
||||
ds.markDeleted(['581', 1])
|
||||
ds.markDeleted(['580', 0])
|
||||
ds.markDeleted(['580', 0])
|
||||
ds.markGarbageCollected(['581', 0])
|
||||
ds.markDeleted(['581', 2])
|
||||
ds.markDeleted(['580', 1])
|
||||
ds.markDeleted(['580', 2])
|
||||
ds.markDeleted(['580', 1])
|
||||
ds.markDeleted(['580', 2])
|
||||
ds.markGarbageCollected(['581', 2])
|
||||
ds.markGarbageCollected(['581', 1])
|
||||
ds.markGarbageCollected(['580', 1])
|
||||
expect(ds.toDeleteSet()).toEqual({'580': [[0, 1, false], [1, 1, true], [2, 1, false]], '581': [[0, 3, true]]})
|
||||
})
|
||||
it('Debug #2', function () {
|
||||
ds.markDeleted(['544', 0])
|
||||
ds.markDeleted(['543', 2])
|
||||
ds.markDeleted(['544', 0])
|
||||
ds.markDeleted(['543', 2])
|
||||
ds.markGarbageCollected(['544', 0])
|
||||
ds.markDeleted(['545', 1])
|
||||
ds.markDeleted(['543', 4])
|
||||
ds.markDeleted(['543', 3])
|
||||
ds.markDeleted(['544', 1])
|
||||
ds.markDeleted(['544', 2])
|
||||
ds.markDeleted(['544', 1])
|
||||
ds.markDeleted(['544', 2])
|
||||
ds.markGarbageCollected(['543', 2])
|
||||
ds.markGarbageCollected(['543', 4])
|
||||
ds.markGarbageCollected(['544', 2])
|
||||
ds.markGarbageCollected(['543', 3])
|
||||
expect(ds.toDeleteSet()).toEqual({'543': [[2, 3, true]], '544': [[0, 1, true], [1, 1, false], [2, 1, true]], '545': [[1, 1, false]]})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* global createUsers, wait, Y, compareAllUsers, getRandomNumber, applyRandomTransactions, async, garbageCollectAllUsers, describeManyTimes */
|
||||
/* eslint-env browser,jasmine */
|
||||
|
||||
var numberOfYArrayTests = 10
|
||||
var repeatArrayTests = 300
|
||||
var numberOfYArrayTests = 1000
|
||||
var repeatArrayTests = 5
|
||||
|
||||
describe('Array Type', function () {
|
||||
var y1, y2, y3, yconfig1, yconfig2, yconfig3, flushAll
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* global createUsers, Y, compareAllUsers, getRandomNumber, applyRandomTransactions, async, describeManyTimes */
|
||||
/* eslint-env browser,jasmine */
|
||||
|
||||
var numberOfYMapTests = 70
|
||||
var repeatMapTeasts = 1
|
||||
var numberOfYMapTests = 100
|
||||
var repeatMapTeasts = 10
|
||||
|
||||
describe('Map Type', function () {
|
||||
var y1, y2, y3, y4, flushAll
|
||||
|
Loading…
x
Reference in New Issue
Block a user