diff --git a/src/SpecHelper.js b/src/SpecHelper.js index bcb827af..b1a58b42 100644 --- a/src/SpecHelper.js +++ b/src/SpecHelper.js @@ -88,7 +88,7 @@ g.getRandomString = getRandomString function * applyTransactions (relAmount, numberOfTransactions, objects, users, transactions, noReconnect) { for (var i = 0; i < numberOfTransactions * relAmount + 1; i++) { var r = Math.random() - if (r > 0.9) { + if (r > 0.95) { // 10% chance of toggling concurrent user interactions. // There will be an artificial delay until ops can be executed by the type, // therefore, operations of the database will be (pre)transformed until user operations arrive diff --git a/src/Utils.js b/src/Utils.js index 418bc455..e7ef0420 100644 --- a/src/Utils.js +++ b/src/Utils.js @@ -149,7 +149,6 @@ module.exports = function (Y /* : any*/) { if (dStart < iEnd) { if (iEnd < dEnd) { // Case 1 - debugger // remove the right part of i's content i.content.splice(dStart - iStart) // remove the start of d's deletion @@ -176,7 +175,6 @@ module.exports = function (Y /* : any*/) { } else if (dStart === iStart) { if (iEnd < dEnd) { // Case 4 - debugger d.length = dEnd - iEnd d.target = [d.target[0], iEnd] i.content = [] @@ -192,44 +190,47 @@ module.exports = function (Y /* : any*/) { return } } else { // (dStart < iStart) - /* - 7) iii - ddddddd - --> remove i, create and apply two d with checkDelete(d) (**) - 8) iiiii - ddddddd - --> remove i, modify d (**) - 9) iiiii - ddddd - --> modify i and d - */ - if (iEnd < dEnd) { - // Case 7 - debugger - self.waiting.splice(w, 1) - checkDelete({ - target: [d.target[0], dStart], - length: iStart - dStart, - struct: 'Delete' - }) - checkDelete({ - target: [d.target[0], iEnd], - length: iEnd - dEnd, - struct: 'Delete' - }) - return - } else if (iEnd === dEnd) { - // Case 8 - debugger - self.waiting.splice(w, 1) - return - } else { // dEnd < iEnd - // Case 9 - debugger - d.length = iStart - dStart - i.content.splice(dEnd - iStart) - i.id = [i.id[0], dEnd] - continue + if (iStart < dEnd) { + // they overlap + /* + 7) iii + ddddddd + --> remove i, create and apply two d with checkDelete(d) (**) + 8) iiiii + ddddddd + --> remove i, modify d (**) + 9) iiiii + ddddd + --> modify i and d + */ + if (iEnd < dEnd) { + // Case 7 + debugger + self.waiting.splice(w, 1) + checkDelete({ + target: [d.target[0], dStart], + length: iStart - dStart, + struct: 'Delete' + }) + checkDelete({ + target: [d.target[0], iEnd], + length: iEnd - dEnd, + struct: 'Delete' + }) + return + } else if (iEnd === dEnd) { + // Case 8 + self.waiting.splice(w, 1) + w-- + d.length -= iLength + continue + } else { // dEnd < iEnd + // Case 9 + d.length = iStart - dStart + i.content.splice(0, dEnd - iStart) + i.id = [i.id[0], dEnd] + continue + } } } }