shared-updated
Version:
Modern fork of shared (Kevin Jones), updated for latest Node.js and MongoDB
1,353 lines (1,214 loc) • 45.3 kB
text/typescript
/// <reference path='../defs/node-0.8.d.ts' />
/// <reference path='../lib/store.ts' />
module testtracker {
import utils = shared.utils;
import tracker = shared.tracker;
var store: shared.store.MongoStore = null;
function reset() {
if (store !== null)
store.close();
store = new shared.store.MongoStore();
utils.defaultLogger().disableDebugLogging();
}
export function illegaltype(test) {
reset();
test.throws(function () { new tracker.Tracker(store,null); }, Error);
test.throws(function () { new tracker.Tracker(store,undefined); }, Error);
test.throws(function () { new tracker.Tracker(store,0); }, Error);
test.throws(function () { new tracker.Tracker(store,1); }, Error);
test.throws(function () { new tracker.Tracker(store,''); }, Error);
test.throws(function () { new tracker.Tracker(store,'a'); }, Error);
test.throws(function () { new tracker.Tracker(store,true); }, Error);
test.throws(function () { new tracker.Tracker(store,false); }, Error);
test.done();
};
export function objctor(test) {
var obj: any = {};
var t = new tracker.Tracker(store,obj);
test.ok(typeof obj._tracker === 'object');
test.ok(obj._tracker === t);
test.ok(utils.isObject(t.type()));
test.done();
};
export function idobjctor(test) {
test.throws(function () { new tracker.Tracker(store,{}, '1'); }, Error);
test.throws(function () { new tracker.Tracker(store,{}, '12'); }, Error);
var obj = {};
var t = new tracker.Tracker(store,{}, utils.makeUID('123456781234567812345678'));
test.ok(typeof t == 'object');
test.ok(t.id().toString() == '123456781234567812345678');
test.done();
};
export function arrayctor(test) {
var obj: any = [];
var t = new tracker.Tracker(store,obj);
test.ok(typeof obj._tracker === 'object');
test.ok(obj._tracker === t);
test.ok(utils.isObject(t.type()));
test.done();
};
export function idarrayctor(test) {
test.throws(function () { new tracker.Tracker(store,[], '1'); }, Error);
test.throws(function () { new tracker.Tracker(store,[], '12'); }, Error);
var obj = [];
var t = new tracker.Tracker(store, {}, utils.makeUID('123456781234567812345678'));
test.ok(typeof t == 'object');
test.ok(t.id().toString() == '123456781234567812345678');
test.done();
};
export function rev(test) {
var obj = [];
var t = new tracker.Tracker(store,obj);
test.ok(t.rev() === 0);
test.ok(t.rev(1) === 1);
test.ok(t.rev() === 1);
test.ok(t.rev(1) === 2);
test.ok(t.rev() === 2);
test.ok(t.rev() === 2);
test.ok(t.rev(1) === 3);
test.ok(t.rev(1) === 4);
test.done();
};
export function wrapNumber(test) {
reset();
var obj = { a: 1 };
var t = new tracker.Tracker(store,obj);
test.ok(typeof obj.a == 'number');
test.ok(obj.a === 1);
obj.a = 2;
test.ok(utils.isEqual(store.cset()[0], { obj: obj, write: 'a', value: 2, last: 1, lasttx: -1 }));
test.ok(store.readsetSize() === 0);
test.ok(store.newsetSize() === 0);
test.ok(obj.a === 2);
test.done();
};
export function wrapString(test) {
reset();
var obj = { a: 'b' };
var t = new tracker.Tracker(store,obj);
test.ok(typeof obj.a == 'string');
test.ok(obj.a === 'b');
obj.a = 'c';
test.ok(utils.isEqual(store.cset()[0], { obj: obj, write: 'a', value: 'c', last: 'b', lasttx: -1 }));
test.ok(store.readsetSize() === 0);
test.ok(store.newsetSize() === 0);
test.ok(obj.a === 'c');
test.done();
};
export function wrapBoolean(test) {
reset();
var obj = { a: true };
var t = new tracker.Tracker(store,obj);
test.ok(typeof obj.a == 'boolean');
test.ok(obj.a === true);
obj.a = false;
test.ok(utils.isEqual(store.cset()[0], { obj: obj, write: 'a', value: false, last: true, lasttx: -1 }));
test.ok(store.readsetSize() === 0);
test.ok(store.newsetSize() === 0);
test.ok(obj.a === false);
test.done();
};
export function wrapFunc(test) {
reset();
var f = function () { };
var obj: any = { a: f };
var t = new tracker.Tracker(store,obj);
test.ok(typeof obj.a == 'function');
obj.a = function (a) { };
test.ok(utils.isEqual(store.cset()[0], { obj: obj, write: 'a', value: null, last: f, lasttx: -1 }));
test.ok(store.readsetSize() === 0);
test.ok(store.newsetSize() === 0);
test.done();
};
export function wrapObj(test) {
reset();
var nobj = {};
var t2 = new tracker.Tracker(store,nobj);
var obj: any = { a: nobj };
var t = new tracker.Tracker(store,obj);
test.ok(typeof obj.a == 'object');
test.ok(utils.isEqual(obj.a, {}));
test.ok(store.readsetObject(t2.id()) === 0);
test.ok(store.readsetSize() === 1);
obj.a = { b: 1 };
test.ok(store.readsetSize() === 1);
test.ok(utils.isEqual(store.cset()[0], { obj: obj, write: 'a', value: { b: 1 }, last: {}, lasttx: -1 }));
var id = store.valueId(obj.a).toString();
test.ok(utils.isEqual(store.newsetObject(id), { b: 1 }));
test.ok(store.newsetSize() === 1);
test.ok(utils.isEqual(obj.a, { b: 1 }));
test.done();
};
export function wrapArray(test) {
reset();
var nobj = [];
var t2 = new tracker.Tracker(store,nobj);
var obj: any = { a: nobj };
var t = new tracker.Tracker(store,obj);
test.ok(typeof obj.a == 'object');
test.ok(utils.isEqual(obj.a, []));
test.ok(store.readsetObject(t2.id()) === 0);
test.ok(store.readsetSize() === 1);
obj.a = [1];
test.ok(utils.isEqual(store.cset()[0], { obj: obj, write: 'a', value: [1], last: [], lasttx: -1 }));
var id = store.valueId(obj.a).toString();
test.ok(utils.isEqual(store.newsetObject(id), [1]));
test.ok(store.newsetSize() === 1);
test.ok(utils.isEqual(obj.a, [1]));
test.done();
};
export function cycleTypes(test) {
reset();
var obj: any = { a: 1 };
var t = new tracker.Tracker(store,obj);
test.ok(typeof obj.a == 'number');
test.ok(obj.a === 1);
test.ok(store.readsetSize() === 0);
obj.a = '';
test.ok(obj.a === '');
test.ok(store.readsetSize() === 0);
test.ok(utils.isEqual(store.cset()[0], { obj: obj, write: 'a', value: '', last: 1, lasttx: -1 }));
obj.a = true;
test.ok(obj.a === true);
test.ok(store.readsetSize() === 0);
test.ok(utils.isEqual(store.cset()[1], { obj: obj, write: 'a', value: true, last: '', lasttx: 0 }));
var f = function () { };
obj.a = f;
test.ok(obj.a === f);
test.ok(store.readsetSize() === 0);
test.ok(store.newsetSize() === 0);
test.ok(utils.isEqual(store.cset()[2], { obj: obj, write: 'a', value: null, last: true, lasttx: 1 }));
obj.a = {};
test.ok(utils.isEqual(store.cset()[3], { obj: obj, write: 'a', value: {}, last: f, lasttx: 2 }));
test.ok(store.readsetSize() === 0);
var id = store.valueId(obj.a).toString();
test.ok(utils.isEqual(store.newsetObject(id), {}));
test.ok(store.newsetSize() === 1);
obj.a = [];
test.ok(utils.isEqual(store.cset()[4], { obj: obj, write: 'a', value: [], last: {}, lasttx: 3 }));
test.ok(store.readsetSize() === 0);
var id = store.valueId(obj.a).toString();
test.ok(utils.isEqual(store.newsetObject(id), []));
test.ok(store.newsetSize() === 2);
test.done();
};
export function unwrapable(test) {
var obj: any = {};
Object.defineProperty(obj, 'a', {
enumerable: true,
configurable: false,
value: 1
});
test.throws(function () { new tracker.Tracker(store,obj); }, Error);
var obj: any = [];
Object.defineProperty(obj, 'a', {
enumerable: true,
configurable: false,
value: 1
});
test.throws(function () { new tracker.Tracker(store,obj); }, Error);
test.done();
};
export function nonenum(test) {
reset();
var obj: any = {};
Object.defineProperty(obj, 'a', {
enumerable: false,
configurable: true,
value: 1
});
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
test.ok(obj.a === 1);
test.ok(obj._tracker.tc().cset().length === 0);
reset();
var obj: any = [];
Object.defineProperty(obj, 'a', {
enumerable: false,
configurable: true,
value: 1
});
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
test.ok(obj.a === 1);
test.ok(obj._tracker.tc().cset().length === 0);
test.done();
};
export function deleteable(test) {
var obj: any = { a: 1 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
test.ok(obj.a === 1);
delete obj.a;
test.ok(obj.a === undefined);
var obj: any = [1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
test.ok(obj[0] === 1);
delete obj[0];
test.ok(obj[0] === undefined);
test.done();
};
export function arrreverse(test) {
reset();
var obj = [1, 2, 3, 4];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.reverse();
test.ok(utils.isEqual(store.cset()[0], { obj: obj, reverse: true, lasttx: -1 }));
test.ok(utils.isEqual(obj, [4, 3, 2, 1]));
reset();
var obj = [1, 2, 3, 4];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.reverse();
obj.reverse();
test.ok(utils.isEqual(store.cset()[0], { obj: obj, reverse: true, lasttx: -1 }));
test.ok(utils.isEqual(store.cset()[1], { obj: obj, reverse: true, lasttx: 0 }));
test.ok(utils.isEqual(obj, [1, 2, 3, 4]));
test.done();
};
export function arrsort(test) {
reset();
var obj = [1, 2, 3, 4];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.sort();
test.ok(utils.isEqual(store.cset()[0], { obj: obj, sort: true, lasttx: -1 }));
test.ok(utils.isEqual(obj, [1, 2, 3, 4]));
reset();
var obj = [1, 2, 3, 4];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.sort(function (a, b) { return b - a });
obj.sort(function (a, b) { return b - a });
test.ok(utils.isEqual(store.cset()[0], { obj: obj, sort: true, lasttx: -1 }));
test.ok(utils.isEqual(store.cset()[1], { obj: obj, sort: true, lasttx: 0 }));
test.ok(utils.isEqual(obj, [4, 3, 2, 1]));
test.done();
};
export function arrshift(test) {
reset();
var obj = [1, 2];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.shift();
test.ok(utils.isEqual(store.cset()[0], { obj: obj, shift: 0, size: 1, lasttx: -1 }));
obj.unshift(3);
test.ok(utils.isEqual(store.cset()[1], { obj: obj, unshift: 0, size: 1, lasttx: 0 }));
test.ok(utils.isEqual(store.cset()[2], { obj: obj, write: '0', value: 3, lasttx: 1 }));
obj.unshift(4, 5);
test.ok(utils.isEqual(store.cset()[3], { obj: obj, unshift: 0, size: 2, lasttx: 2 }));
test.ok(utils.isEqual(store.cset()[4], { obj: obj, write: '0', value: 4, lasttx: 3 }));
test.ok(utils.isEqual(store.cset()[5], { obj: obj, write: '1', value: 5, lasttx: 4 }));
test.ok(obj, [4, 5, 3, 1]);
test.done();
};
export function pushNumberProp(test) {
reset();
var obj: any = {};
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a = 1;
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'a', value: 1, lasttx: -1 }]));
reset();
var obj = { a: 1 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.b = 2;
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'b', value: 2, lasttx: -1 }]));
test.done();
};
export function pushBoolProp(test) {
reset();
var obj: any = {};
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a = true;
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'a', value: true, lasttx: -1 }]));
reset();
var obj = { a: 1 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.b = false;
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'b', value: false, lasttx: -1 }]));
test.done();
};
export function pushStringProp(test) {
reset();
var obj: any = {};
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a = 'a';
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'a', value: 'a', lasttx: -1 }]));
reset();
var obj = { a: 1 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.b = 'b';
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'b', value: 'b', lasttx: -1 }]));
test.done();
};
export function pushOtherProp(test) {
reset();
var obj: any = {};
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a = null;
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'a', value: null, lasttx: -1 }]));
reset();
var obj = { a: 1 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.b = undefined;
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'b', value: undefined, lasttx: -1 }]));
test.done();
};
export function pushObjectProp(test) {
reset();
var obj: any = {};
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a = {};
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'a', value: {}, lasttx: -1 }]));
var id = store.valueId(obj.a).toString();
test.ok(utils.isEqual(store.newsetObject(id), {}));
test.ok(store.newsetSize() === 1);
test.ok(store.readsetSize() === 0);
reset();
var obj = { a: 1 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.b = {};
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'b', value: {}, lasttx: -1 }]));
var id = store.valueId(obj.b).toString();
test.ok(utils.isEqual(store.newsetObject(id), {}));
test.ok(store.newsetSize() === 1);
test.ok(store.readsetSize() === 0);
test.done();
};
export function pushRecuObjectProp(test) {
reset();
var obj: any = {};
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a = { b: {} };
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'a', value: { b: {} }, lasttx: -1 }]));
var bid = store.valueId(obj.a.b).toString();
test.ok(utils.isEqual(store.newsetObject(bid), {}));
var id = store.valueId(obj.a).toString();
test.ok(utils.isEqual(store.newsetObject(id), { b: {} }));
test.ok(store.readsetSize() === 0);
reset();
var obj = { a: 1 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.b = { c: {} };
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'b', value: { c: {} }, lasttx: -1 }]));
var bid = store.valueId(obj.b.c).toString();
test.ok(utils.isEqual(store.newsetObject(bid), {}));
var id = store.valueId(obj.b).toString();
test.ok(utils.isEqual(store.newsetObject(id), { c: {} }));
test.ok(store.readsetSize() === 0);
test.done();
};
export function pushArrayProp(test) {
reset();
var obj: any = {};
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a = [];
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'a', value: [], lasttx: -1 }]));
var id = store.valueId(obj.a).toString();
test.ok(utils.isEqual(store.newsetObject(id), []));
test.ok(store.newsetSize() === 1);
test.ok(store.readsetSize() === 0);
reset();
var obj = { a: 1 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.b = [];
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'b', value: [], lasttx: -1 }]));
var id = store.valueId(obj.b).toString();
test.ok(utils.isEqual(store.newsetObject(id), []));
test.ok(store.newsetSize() === 1);
test.ok(store.readsetSize() === 0);
test.done();
};
export function pushRecuArrayProp(test) {
reset();
var obj: any = {};
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a = [[]];
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'a', value: [[]], lasttx: -1 }]));
var bid = store.valueId(obj.a[0]).toString();
test.ok(utils.isEqual(store.newsetObject(bid), []));
var id = store.valueId(obj.a).toString();
test.ok(utils.isEqual(store.newsetObject(id), [[]]));
test.ok(store.readsetSize() === 0);
reset();
var obj = { a: 1 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.b = [[]];
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), [{ obj: obj, write: 'b', value: [[]], lasttx: -1 }]));
var bid = store.valueId(obj.b[0]).toString();
test.ok(utils.isEqual(store.newsetObject(bid), []));
var id = store.valueId(obj.b).toString();
test.ok(utils.isEqual(store.newsetObject(id), [[]]));
test.ok(store.readsetSize() === 0);
test.done();
};
export function readsetArray(test) {
reset();
var obj: any[] = [1, true, '', null, undefined];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj[0]; obj[1]; obj[2]; obj[3]; obj[4];
store.collectObject(obj);
test.ok(store.newsetSize() === 0);
test.ok(store.readsetSize() === 0);
reset();
var embed: any = {};
test.ok(typeof new tracker.Tracker(store,embed) === 'object');
var obj = [embed];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj[0];
store.collectObject(obj);
test.ok(store.newsetSize() === 0);
test.ok(store.readsetSize() === 1);
test.ok(store.readsetObject(embed._tracker._id) === 0);
reset();
var embed = [];
test.ok(typeof new tracker.Tracker(store,embed) === 'object');
var obj = [embed];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj[0];
store.collectObject(obj);
test.ok(store.newsetSize() === 0);
test.ok(store.readsetSize() === 1);
test.ok(store.readsetObject(embed._tracker._id) === 0);
test.done();
};
export function readsetObject(test) {
reset();
var obj: any = { a: 1, b: true, c: '', d: null, e: undefined };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a; obj.b; obj.c; obj.d; obj.e;
store.collectObject(obj);
test.ok(store.newsetSize() === 0);
test.ok(store.readsetSize() === 0);
reset();
var embed: any = {};
test.ok(typeof new tracker.Tracker(store,embed) === 'object');
var obj = { a: embed };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a;
store.collectObject(obj);
test.ok(store.newsetSize() === 0);
test.ok(store.readsetSize() === 1);
test.ok(store.readsetObject(embed._tracker._id) === 0);
reset();
var embed = [];
test.ok(typeof new tracker.Tracker(store,embed) === 'object');
var obj = { a: embed };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.a;
store.collectObject(obj);
test.ok(store.newsetSize() === 0);
test.ok(store.readsetSize() === 1);
test.ok(store.readsetObject(embed._tracker._id) === 0);
test.done();
};
export function writesetArray1(test) {
reset();
var obj: any[] = [1, true, '', null, undefined];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj[0] = 2; obj[1] = false; obj[2] = 'a'; obj[3] = undefined; obj[4] = null;
store.collectObject(obj);
var writeset : any[] = [
{ obj: obj, write: '0', value: 2, last: 1, lasttx: -1 },
{ obj: obj, write: '1', value: false, last: true, lasttx: 0 },
{ obj: obj, write: '2', value: 'a', last: '', lasttx: 1 },
{ obj: obj, write: '3', value: undefined, last: null, lasttx: 2 },
{ obj: obj, write: '4', value: null, last: undefined, lasttx: 3 }];
test.ok(utils.isEqual(store.cset(), writeset));
test.ok(store.newsetSize() === 0);
test.ok(store.readsetSize() === 0);
reset();
var embed: any = {};
var obj = [null];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj[0] = embed;
store.collectObject(obj);
var writeset = [
{ obj: obj, write: '0', value: {}, last: null, lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
var id = store.valueId(obj[0]).toString();
test.ok(utils.isEqual(store.newsetObject(id), {}));
test.ok(store.newsetSize() === 1);
test.ok(store.readsetSize() === 0);
reset();
var embed = [];
var obj = [null];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj[0] = embed;
store.collectObject(obj);
var writeset = [
{ obj: obj, write: '0', value: [], last: null, lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
var id = store.valueId(obj[0]).toString();
test.ok(utils.isEqual(store.newsetObject(id), []));
test.ok(store.newsetSize() === 1);
test.ok(store.readsetSize() === 0);
test.done();
};
export function writesetArray2(test) {
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.shift();
obj.shift();
obj.unshift(5, 4);
store.collectObject(obj);
var writeset: any[] = [
{ obj: obj, shift: 0, size: 1, lasttx: -1 },
{ obj: obj, shift: 0, size: 1, lasttx: 0 },
{ obj: obj, unshift: 0, size: 2, lasttx: 1 },
{ obj: obj, write: '0', value: 5, lasttx: 2 },
{ obj: obj, write: '1', value: 4, lasttx: 3 }];
test.ok(utils.isEqual(store.cset(), writeset));
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.pop();
obj.pop();
obj.push(4, 5);
store.collectObject(obj);
var writeset: any[] = [
{ obj: obj, write: '1', value: 4, lasttx: -1 },
{ obj: obj, write: '2', value: 5, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset));
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.shift();
obj.pop();
obj.push(4);
obj.unshift(0);
store.collectObject(obj);
var writeset2: any[] = [
{ obj: obj, shift: 0, size: 1, lasttx: -1 },
{ obj: obj, unshift: 0, size: 1, lasttx: 0 },
{ obj: obj, write: '0', value: 0, lasttx: 1 },
{ obj: obj, write: '2', value: 4, lasttx: 2 }];
test.ok(utils.isEqual(store.cset(), writeset2));
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.pop();
obj.shift();
obj.unshift(0);
obj.push(4);
store.collectObject(obj);
var writeset3: any[] = [
{ obj: obj, shift: 0, size: 1, lasttx: -1 },
{ obj: obj, unshift: 0, size: 1, lasttx: 0 },
{ obj: obj, write: '0', value: 0, lasttx: 1 },
{ obj: obj, write: '2', value: 4, lasttx: 2 }];
test.ok(utils.isEqual(store.cset(), writeset3));
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.pop();
obj.pop();
obj.shift();
obj.unshift(0);
obj.push(4);
store.collectObject(obj);
var writeset4: any[] = [
{ obj: obj, shift: 0, size: 1, lasttx: -1 },
{ obj: obj, unshift: 0, size: 1, lasttx: 0 },
{ obj: obj, write: '0', value: 0, lasttx: 1 },
{ obj: obj, shift: -1, size: 1, lasttx: 2 },
{ obj: obj, write: '1', value: 4, lasttx: 3 }];
test.ok(utils.isEqual(store.cset(), writeset4));
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.pop();
obj.shift();
obj.shift();
obj.unshift(0);
obj.push(4);
store.collectObject(obj);
var writeset5: any[] = [
{ obj: obj, shift: 0, size: 1, lasttx: -1 },
{ obj: obj, shift: 0, size: 1, lasttx: 0 },
{ obj: obj, unshift: 0, size: 1, lasttx: 1 },
{ obj: obj, write: '0', value: 0, lasttx: 2 },
{ obj: obj, write: '1', value: 4, lasttx: 3 }];
test.ok(utils.isEqual(store.cset(), writeset5));
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.pop();
obj.pop();
obj.pop();
obj.pop();
obj.unshift(4);
store.collectObject(obj);
var writeset6: any[] = [
{ obj: obj, unshift: 0, size: 1, lasttx: -1 },
{ obj: obj, write: '0', value: 4, lasttx: 0 },
{ obj: obj, shift: -1, size: 3, lasttx: 1 }];
test.ok(utils.isEqual(store.cset(), writeset6));
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.shift();
obj.shift();
obj.shift();
obj.push(4);
store.collectObject(obj);
var writeset7: any[] = [
{ obj: obj, shift: 0, size: 1, lasttx: -1 },
{ obj: obj, shift: 0, size: 1, lasttx: 0 },
{ obj: obj, shift: 0, size: 1, lasttx: 1 },
{ obj: obj, write: '0', value: 4, lasttx: 2 }];
test.ok(utils.isEqual(store.cset(), writeset7));
test.done();
};
export function delObject(test) {
reset();
var obj = { a: 1, b: 2, c: 3 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
delete obj.b;
store.collectObject(obj);
var writeset: any[] = [
{ obj: obj, del: 'b', lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
reset();
var obj = { a: 1, b: 2, c: 3 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
delete obj.a;
delete obj.b;
delete obj.b;
delete obj.c;
store.collectObject(obj);
var writeset: any[] = [
{ obj: obj, del: 'a', lasttx: -1 },
{ obj: obj, del: 'b', lasttx: 0 },
{ obj: obj, del: 'c', lasttx: 1 }];
test.ok(utils.isEqual(store.cset(), writeset));
reset();
var obj = { a: 1, b: 2, c: 3 };
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
delete obj.b;
obj.b = 1;
obj.b = 4;
store.collectObject(obj);
var writeset2: any[] = [
{ obj: obj, del: 'b', lasttx: -1 },
{ obj: obj, write: 'b', value: 4, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset2));
test.done();
};
export function delArray(test) {
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
delete obj[1];
store.collectObject(obj);
var writeset = [
{ obj: obj, del: '1', lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
delete obj[0];
delete obj[1];
delete obj[1];
delete obj[2];
store.collectObject(obj);
var writeset = [
{ obj: obj, del: '0', lasttx: -1 },
{ obj: obj, del: '1', lasttx: 0 },
{ obj: obj, del: '2', lasttx: 1 }];
test.ok(utils.isEqual(store.cset(), writeset));
reset();
var obj = [1, 2, 3];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
delete obj[1];
delete obj[5];
obj[1] = 1;
obj[1] = 4;
store.collectObject(obj);
var writeset2 = [
{ obj: obj, write: '1', value: 4, lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset2));
test.done();
};
export function reverse(test) {
reset();
var obj: any = [1, 2, 3, 4];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.reverse();
store.collectObject(obj);
var writeset = [
{ obj: obj, reverse: true, lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
test.ok(utils.isEqual(obj, [4, 3, 2, 1]));
reset();
var obj = [1, 2, 3, 4];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.reverse();
obj.reverse();
store.collectObject(obj);
var writeset = [
{ obj: obj, reverse: true, lasttx: -1 },
{ obj: obj, reverse: true, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset));
test.ok(utils.isEqual(obj, [1, 2, 3, 4]));
reset();
var obj = [1, 2, 3, 4];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
delete obj[1];
obj[1] = 2;
obj.reverse();
store.collectObject(obj);
var writeset2: any[] = [
{ obj: obj, reverse: true, lasttx: -1 },
{ obj: obj, write: '2', value: 2, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset2));
test.ok(utils.isEqual(obj, [4, 3, 2, 1]));
test.done();
};
export function sort(test) {
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.sort();
store.collectObject(obj);
var writeset = [null,
{ obj: obj, reinit: '["0":1,"1":2,"2":3,"3":4]', lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
test.ok(utils.isEqual(obj, [1, 2, 3, 4]));
reset();
var obj = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.reverse();
obj.sort();
store.collectObject(obj);
var writeset = [null,null,
{ obj: obj, reinit: '["0":1,"1":2,"2":3,"3":4]', lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
test.ok(utils.isEqual(obj, [1, 2, 3, 4]));
reset();
var obj = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj[1] = 2;
obj.sort();
store.collectObject(obj);
var writeset = [null,null,
{ obj: obj, reinit: '["0":1,"1":2,"2":3,"3":4]', lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
test.ok(utils.isEqual(obj, [1, 2, 3, 4]));
reset();
var obj = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.sort();
delete obj[1];
obj[1] = 2;
obj.reverse();
store.collectObject(obj);
var writeset2: any[] = [null,null,
{ obj: obj, reinit: '["0":4,"1":3,"2":2,"3":1]', lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset2));
test.done();
};
export function xstore(test) {
reset();
var s2 = new shared.store.MongoStore();
var obj = {};
test.ok(typeof new tracker.Tracker(s2,obj) === 'object');
test.throws(function () { store.valueId(obj) });
test.done();
}
export function spliceDel(test) {
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.splice(1,2);
store.collectObject(obj);
var writeset = [
{ obj: obj, shift: 1, size:2, lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
test.ok(utils.isEqual(obj, [4,1]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.splice(2);
store.collectObject(obj);
var writeset = [
{ obj: obj, shift: 2, size:2, lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
test.ok(utils.isEqual(obj, [4,2]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.splice(2,0);
store.collectObject(obj);
test.ok(utils.isEqual(store.cset(), []));
test.ok(utils.isEqual(obj, [4,2,3,1]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.splice(-2,1);
store.collectObject(obj);
var writeset = [
{ obj: obj, shift: 2, size:1, lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset));
test.ok(utils.isEqual(obj, [4,2,1]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.splice(1,2);
obj.push(5);
store.collectObject(obj);
var writeset2 : any[] = [
{ obj: obj, shift: 1, size:2, lasttx: -1 },
{ obj: obj, write: '2', value:5, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset2));
test.ok(utils.isEqual(obj, [4,1,5]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.splice(1,2);
obj.pop();
store.collectObject(obj);
var writeset3 : any[] = [
{ obj: obj, shift: 1, size:2, lasttx: -1 },
{ obj: obj, shift: -1, size:1, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset3));
test.ok(utils.isEqual(obj, [4]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.splice(1,2);
obj.shift();
store.collectObject(obj);
var writeset4 : any[] = [
{ obj: obj, shift: 1, size:2, lasttx: -1 },
{ obj: obj, shift: 0, size:1, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset4));
test.ok(utils.isEqual(obj, [1]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.splice(1,2);
obj.unshift(5);
store.collectObject(obj);
var writeset5 : any[] = [
{ obj: obj, shift: 1, size:2, lasttx: -1 },
{ obj: obj, unshift: 0, size:1, lasttx: 0 },
{ obj: obj, write: '0', value:5, lasttx: 1 }];
test.ok(utils.isEqual(store.cset(), writeset5));
test.ok(utils.isEqual(obj, [5,4,1]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.splice(1,2);
delete obj[0];
store.collectObject(obj);
var writeset6 : any[] = [
{ obj: obj, shift: 1, size:2, lasttx: -1 },
{ obj: obj, del: '0', lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset6));
test.ok(utils.isEqual(obj, [,1]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store,obj) === 'object');
obj.splice(1,2);
obj[0]=5;
store.collectObject(obj);
var writeset7 : any[] = [
{ obj: obj, shift: 1, size:2, lasttx: -1 },
{ obj: obj, write: '0', value: 5, last: 4, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset7));
test.ok(utils.isEqual(obj, [5,1]));
test.done();
};
export function spliceIns(test) {
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.splice(1, 0);
store.collectObject(obj);
var writeset = [];
test.ok(utils.isEqual(store.cset(), writeset));
test.ok(utils.isEqual(obj, [4, 2, 3, 1]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.splice(1, 0, 5);
store.collectObject(obj);
var writeset1 : any[] = [
{ obj: obj, unshift: 1, size:1, lasttx: -1 },
{ obj: obj, write: '1', value: 5, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset1));
test.ok(utils.isEqual(obj, [4, 5, 2, 3, 1]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.splice(1, 0, 5, 6);
store.collectObject(obj);
var writeset2 : any[] = [
{ obj: obj, unshift: 1, size: 2, lasttx: -1 },
{ obj: obj, write: '1', value: 5, lasttx: 0 },
{ obj: obj, write: '2', value: 6, lasttx: 1 }];
test.ok(utils.isEqual(store.cset(), writeset2));
test.ok(utils.isEqual(obj, [4, 5, 6, 2, 3, 1]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.splice(4, 0, 5, 6);
store.collectObject(obj);
var writeset3 : any[] = [
{ obj: obj, unshift: 4, size: 2, lasttx: -1 },
{ obj: obj, write: '4', value: 5, lasttx: 0 },
{ obj: obj, write: '5', value: 6, lasttx: 1 }];
test.ok(utils.isEqual(store.cset(), writeset3));
test.ok(utils.isEqual(obj, [4, 2, 3, 1, 5, 6]));
reset();
var obj: any = [4, 2, 3, 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.splice(0, 0, 5, 6);
store.collectObject(obj);
var writeset4 : any[] = [
{ obj: obj, unshift: 0, size: 2, lasttx: -1 },
{ obj: obj, write: '0', value: 5, lasttx: 0 },
{ obj: obj, write: '1', value: 6, lasttx: 1 }];
test.ok(utils.isEqual(store.cset(), writeset4));
test.ok(utils.isEqual(obj, [5, 6, 4, 2, 3, 1]));
test.done();
}
export function sparseArray(test) {
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj[2] = 5;
store.collectObject(obj);
var writeset1 : any[] = [
{ obj: obj, write: '2', value: 5, lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset1));
test.ok(utils.isEqual(obj, [4, , 5, 1]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj[1] = 5;
delete obj[3];
store.collectObject(obj);
var writeset2 : any[] = [
{ obj: obj, del: '3', lasttx: -1 },
{ obj: obj, write: '1', value: 5, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset2));
test.ok(utils.isEqual(obj, [4, 5, undefined ,undefined ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj[1] = 5;
obj.push(6);
store.collectObject(obj);
var writeset3 : any[] = [
{ obj: obj, write: '1', value: 5, lasttx: -1 },
{ obj: obj, write: '4', value: 6, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset3));
test.ok(utils.isEqual(obj, [4, 5, undefined , 1, 6 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.pop();
obj[1] = 5;
store.collectObject(obj);
var writeset4 : any[] = [
{ obj: obj, shift: -1, size: 1, lasttx: -1 },
{ obj: obj, write: '1', value: 5, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset4));
test.ok(utils.isEqual(obj, [4, 5, undefined ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.shift();
obj[1] = 5;
store.collectObject(obj);
var writeset5 : any[] = [
{ obj: obj, shift: 0, size: 1, lasttx: -1 },
{ obj: obj, write: '1', value: 5, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset5));
test.ok(utils.isEqual(obj, [undefined, 5, 1 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.unshift(6);
obj[1] = 5;
store.collectObject(obj);
var writeset6 : any[] = [
{ obj: obj, unshift: 0, size: 1, lasttx: -1 },
{ obj: obj, write: '0', value: 6, lasttx: 0 },
{ obj: obj, write: '1', value: 5, last: 4, lasttx: 1 }];
test.ok(utils.isEqual(store.cset(), writeset6));
test.ok(utils.isEqual(obj, [6, 5, undefined, undefined, 1 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.unshift(6,7);
obj[1] = 5;
store.collectObject(obj);
var writeset7 : any[] = [
{ obj: obj, unshift: 0, size: 2, lasttx: -1 },
{ obj: obj, write: '0', value: 6, lasttx: 0 },
{ obj: obj, write: '1', value: 7, lasttx: 1 },
{ obj: obj, write: '1', value: 5, last: 7, lasttx: 2 }];
test.ok(utils.isEqual(store.cset(), writeset7));
test.ok(utils.isEqual(obj, [6, 5, 4, undefined, undefined, 1 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.reverse();
obj[1] = 5;
store.collectObject(obj);
var writeset7a : any[] = [
{ obj: obj, reverse: true, lasttx: -1 },
{ obj: obj, write: '1', value: 5, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset7a));
test.ok(utils.isEqual(obj, [1, 5, undefined, 4 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.sort();
obj[1] = 5;
store.collectObject(obj);
var writeset8: any[] = [null,
{ obj: obj, reinit: '["0":1,"1":5,"3":4]', lasttx: -1 }];
test.ok(utils.isEqual(store.cset(), writeset8));
test.ok(utils.isEqual(obj, [1, 5, undefined, 4 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.splice(1,2);
obj[1] = 5;
store.collectObject(obj);
var writeset9: any[] = [
{ obj: obj, shift: 1, size: 2, lasttx: -1 },
{ obj: obj, write: '1', value: 5, last: 1, lasttx: 0 }];
test.ok(utils.isEqual(store.cset(), writeset9));
test.ok(utils.isEqual(obj, [4, 5 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.splice(1,2,6);
obj[1] = 5;
store.collectObject(obj);
var writeset9a: any[] = [
{ obj: obj, shift: 1, size: 2, lasttx: -1 },
{ obj: obj, unshift: 1, size: 1, lasttx: 0 },
{ obj: obj, write: '1', value: 5, lasttx: 1 }];
test.ok(utils.isEqual(store.cset(), writeset9a));
test.ok(utils.isEqual(obj, [4, 5, 1 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.splice(1,1,6);
obj.unshift(7);
store.collectObject(obj);
var writeset10: any[] = [
{ obj: obj, shift: 1, size: 1, lasttx: -1 },
{ obj: obj, unshift: 1, size: 1, lasttx: 0 },
{ obj: obj, unshift: 0, size: 1, lasttx: 1 },
{ obj: obj, write: '0', value: 7, lasttx: 2 },
{ obj: obj, write: '2', value: 6, lasttx: 3 }];
test.ok(utils.isEqual(store.cset(), writeset10));
test.ok(utils.isEqual(obj, [7, 4, 6, undefined, 1 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.unshift(6);
obj.splice(1,1,7);
obj.shift();
store.collectObject(obj);
var writeset11: any[] = [
{ obj: obj, unshift: 0, size: 1, lasttx: -1 },
{ obj: obj, write: '0', value: 6, lasttx: 0 },
{ obj: obj, shift: 1, size: 1, lasttx: 1 },
{ obj: obj, unshift: 1, size: 1, lasttx: 2 },
{ obj: obj, shift: 0, size: 1, lasttx: 3 },
{ obj: obj, write: '0', value: 7, lasttx: 4 }];
test.ok(utils.isEqual(store.cset(), writeset11));
test.ok(utils.isEqual(obj, [7, undefined, undefined, 1 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.shift();
obj.splice(1,1,7);
obj.unshift(6);
store.collectObject(obj);
var writeset12: any[] = [
{ obj: obj, shift: 0, size: 1, lasttx: -1 },
{ obj: obj, shift: 1, size: 1, lasttx: 0 },
{ obj: obj, unshift: 1, size: 1, lasttx: 1 },
{ obj: obj, unshift: 0, size: 1, lasttx: 2 },
{ obj: obj, write: '0', value: 6, lasttx: 3 },
{ obj: obj, write: '2', value: 7, lasttx: 4 }];
test.ok(utils.isEqual(store.cset(), writeset12));
test.ok(utils.isEqual(obj, [6, undefined, 7, 1 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
delete obj[3];
obj.splice(1,1,7);
obj.unshift(6);
store.collectObject(obj);
var writeset14: any[] = [
{ obj: obj, shift: 1, size: 1, lasttx: -1 },
{ obj: obj, unshift: 1, size: 1, lasttx: 0 },
{ obj: obj, unshift: 0, size: 1, lasttx: 1 },
{ obj: obj, write: '0', value: 6, lasttx: 2 },
{ obj: obj, write: '2', value: 7, lasttx: 3 },
{ obj: obj, del: '4', lasttx: 4 }];
test.ok(utils.isEqual(store.cset(), writeset14));
test.ok(utils.isEqual(obj, [6, 4 , 7, undefined, undefined ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
delete obj[3];
obj.splice(1,1,7);
obj.reverse();
obj.unshift(6);
store.collectObject(obj);
var writeset15: any[] = [
{ obj: obj, shift: 1, size: 1, lasttx: -1 },
{ obj: obj, unshift: 1, size: 1, lasttx: 0 },
{ obj: obj, reverse: true, lasttx: 1 },
{ obj: obj, unshift: 0, size: 1, lasttx: 2 },
{ obj: obj, write: '0', value: 6, lasttx: 3 },
{ obj: obj, del: '1', lasttx: 4 },
{ obj: obj, del: '2', lasttx: 5 },
{ obj: obj, write: '3', value: 7, lasttx: 6 }];
test.ok(utils.isEqual(store.cset(), writeset15));
test.ok(utils.isEqual(obj, [6, undefined, undefined, 7, 4 ]));
reset();
var obj: any = [4, , , 1];
test.ok(typeof new tracker.Tracker(store, obj) === 'object');
obj.push(8);
delete obj[3];
obj.splice(1,1,7);
obj.reverse();
obj.pop();
obj.unshift(6);
store.collectObject(obj);
var writeset16: any[] = [
{ obj: obj, shift: 1, size: 1, lasttx: -1 },
{ obj: obj, unshift: 1, size: 1, lasttx: 0 },
{ obj: obj, reverse: true, lasttx: 1 },
{ obj: obj, unshift: 0, size: 1, lasttx: 2 },
{ obj: obj, write: '0', value: 6, lasttx: 3 },
{ obj: obj, write: '1', value: 8, lasttx: 4 },
{ obj: obj, del: '2', lasttx: 5 },
{ obj: obj, write: '4', value: 7, lasttx: 6 }];
test.ok(utils.isEqual(store.cset(), writeset16));
test.ok(utils.isEqual(obj, [6, 8, undefined, undefined, 7 ]));
test.done();
}
} // testtracker