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