iwc client fixes
This commit is contained in:
@@ -371,8 +371,8 @@ module.exports = function(HB) {
|
||||
parser = {};
|
||||
execution_listener = [];
|
||||
Operation = (function() {
|
||||
function Operation(_arg) {
|
||||
this.creator = _arg['creator'], this.op_number = _arg['op_number'];
|
||||
function Operation(uid) {
|
||||
this.creator = uid['creator'], this.op_number = uid['op_number'];
|
||||
}
|
||||
|
||||
Operation.prototype.getUid = function() {
|
||||
@@ -457,9 +457,9 @@ module.exports = function(HB) {
|
||||
return Delete;
|
||||
|
||||
})(Operation);
|
||||
parser['Delete'] = function(_arg) {
|
||||
parser['Delete'] = function(o) {
|
||||
var deletes_uid, uid;
|
||||
uid = _arg['uid'], deletes_uid = _arg['deletes'];
|
||||
uid = o['uid'], deletes_uid = o['deletes'];
|
||||
return new Delete(uid, deletes_uid);
|
||||
};
|
||||
Insert = (function(_super) {
|
||||
@@ -678,14 +678,13 @@ module.exports = function(HB) {
|
||||
if (typeof content === 'string') {
|
||||
word = HB.addOperation(new types.Word(HB.getNextOperationIdentifier(), content)).execute();
|
||||
JsonType.__super__.val.call(this, name, word);
|
||||
return content;
|
||||
} else if (typeof content === 'object') {
|
||||
json = HB.addOperation(JsonType(HB.getNextOperationIdentifier(), content)).execute();
|
||||
JsonType.__super__.val.call(this, name, json);
|
||||
return content;
|
||||
} else {
|
||||
throw new Error("You must not set " + (typeof content) + "-types in collaborative Json-objects!");
|
||||
}
|
||||
return this;
|
||||
} else {
|
||||
return JsonType.__super__.val.call(this, name, content);
|
||||
}
|
||||
|
||||
@@ -21,9 +21,9 @@ DUIClient = function(){
|
||||
var that = this;
|
||||
var _iwcClient = new iwc.Client(["*"]);
|
||||
_iwcClient._componentName = "duiclient-"+_widgetId;
|
||||
|
||||
|
||||
this.externalCallback = function(intent){};
|
||||
|
||||
|
||||
/**
|
||||
* The target function when the intent is for updating widget state request
|
||||
*/
|
||||
@@ -35,6 +35,9 @@ DUIClient = function(){
|
||||
this.updateState(intent);
|
||||
};
|
||||
|
||||
this.getIwcClient = function(){
|
||||
return _iwcClient;
|
||||
}
|
||||
/**
|
||||
* The target function when the intent is for getting the current widget state.<br/>
|
||||
* The intent.extras object here is always a Json object.
|
||||
@@ -47,7 +50,7 @@ DUIClient = function(){
|
||||
forMigration = true;
|
||||
}
|
||||
var states = this.getWidgetState(forMigration);
|
||||
|
||||
|
||||
var resIntent = {};
|
||||
if (forMigration)
|
||||
resIntent = {
|
||||
@@ -67,10 +70,10 @@ DUIClient = function(){
|
||||
"dataType":"",
|
||||
"extras":{"widgetId": _widgetId, "widgetStates": states}
|
||||
};
|
||||
|
||||
|
||||
_iwcClient.publish(resIntent);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* The target function when the intent is to inform a change in the scope of the application
|
||||
*/
|
||||
@@ -85,7 +88,7 @@ DUIClient = function(){
|
||||
console.log("do sth before the widget is removed");
|
||||
this.prepareMigration();
|
||||
};
|
||||
|
||||
|
||||
this._logOff = function(intent){
|
||||
var states = this.getWidgetState(false);
|
||||
resIntent = {
|
||||
@@ -96,10 +99,10 @@ DUIClient = function(){
|
||||
"dataType":"",
|
||||
"extras":{"widgetId": _widgetId, "widgetStates": states}
|
||||
};
|
||||
|
||||
|
||||
_iwcClient.publish(resIntent);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* The intent dispatcher and the callback function connected to the private field of iwc.Client.onIntent.<br/>
|
||||
* This function is called once an intent is received by the iwc.Client and passed the first level filter of the iwc.Client.<br/>
|
||||
@@ -109,7 +112,7 @@ DUIClient = function(){
|
||||
that.externalCallback(intent);
|
||||
//does not accept global intents(global intents are processed by normal iwc.Client, normal iwc.Proxy and DUI manager)
|
||||
//does not accept intents that are not categorized as "DUI"
|
||||
if ((typeof intent.flags != "undefined" && intent.flags.indexOf("PUBLISH_GLOBAL")!=-1)
|
||||
if ((typeof intent.flags != "undefined" && intent.flags.indexOf("PUBLISH_GLOBAL")!=-1)
|
||||
|| typeof intent.categories == "undefined" || intent.categories.indexOf("DUI") == -1)
|
||||
return;
|
||||
//then does not accept intents for other widgets
|
||||
@@ -128,7 +131,7 @@ DUIClient = function(){
|
||||
that._prepareMigration(intent);
|
||||
return;
|
||||
}
|
||||
}else if (typeof intent.extras.widgetId == "undefined"){
|
||||
}else if (typeof intent.extras.widgetId == "undefined"){
|
||||
if (action == "DUI_LOG_OFF"){
|
||||
that._logOff(intent);
|
||||
return;
|
||||
@@ -146,11 +149,11 @@ DUIClient = function(){
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
_iwcClient.connect(_iwcCallback);
|
||||
|
||||
|
||||
//remember to bind(this) the function when override
|
||||
|
||||
|
||||
/**
|
||||
* The function is called when the dui manager wants the widget states.<br/>
|
||||
* <strong>Notice</strong>: avoid putting complex data and data structure to the state value, the browser and Java JSON encoder and parser might cause inconsistent input and output.
|
||||
@@ -160,9 +163,9 @@ DUIClient = function(){
|
||||
this.getWidgetState = function(isForMigration){
|
||||
console.log("the widget collects it is state and return, overwrite it");
|
||||
var states = {};
|
||||
return states;
|
||||
return states;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* The function is called when there detected a application state change at the dui manager and the manager informs the widget about the change.<br/>
|
||||
* Override this function to apply changes to the widget according to the valuable application state changes.<br/>
|
||||
@@ -196,7 +199,7 @@ DUIClient = function(){
|
||||
/**
|
||||
* The function is called when the dui manager asks the widget to update its states.<br/>
|
||||
* Compared to the function DUIClient.finishMigration(), this is a typical normal state update for active widget on presence.<br/>
|
||||
* This method will be called as a callback for DUIClient#requireWidgetState(); or DUIClient#initOK() when it is not a migration.
|
||||
* This method will be called as a callback for DUIClient#requireWidgetState(); or DUIClient#initOK() when it is not a migration.
|
||||
* Override this method to perform state update for each different widget.
|
||||
* @param intent The Intent object that contains infos of required widget states, the infos are in intent.extras.widgetStates e.g. {"state1":value1,"state2":value2}.
|
||||
* The object might contain appStates as well if there is any application state, get it in intent.extras.appStates e.g. {"appstate1":value1,"appstate2":value2}.
|
||||
@@ -210,7 +213,7 @@ DUIClient = function(){
|
||||
console.log(appStates);
|
||||
console.log("update the widget state, widget need to overwrite it");
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* The function is called to finish the Migration and update the widget state.<br/>
|
||||
* Compared to the method DUIClient.updateState(), this method is a special widget state update for the widget that has just migrated.<br/>
|
||||
@@ -227,10 +230,10 @@ DUIClient = function(){
|
||||
console.log(appStates);
|
||||
console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.");
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* The function to signal the dui manager that the preparation for the migration is ready on this widget.<br/>
|
||||
* This function should be called at the end of the overwritten function {@link DUIClient#prepareMigration}<br/>
|
||||
* This function should be called at the end of the overwritten function {@link DUIClient#prepareMigration}<br/>
|
||||
* Do not override this method unless there is really an unstoppable reason.
|
||||
*/
|
||||
this.prepareMigDone = function(){
|
||||
@@ -263,7 +266,7 @@ DUIClient = function(){
|
||||
};
|
||||
_iwcClient.publish(intent);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* An open interface to send any intent
|
||||
*/
|
||||
@@ -271,7 +274,7 @@ DUIClient = function(){
|
||||
//or to send the intent to "duimanager"
|
||||
_iwcClient.publish(intent);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* This function asks the framework for the states stored on the server.
|
||||
* Do not override it.
|
||||
@@ -287,7 +290,7 @@ DUIClient = function(){
|
||||
};
|
||||
_iwcClient.publish(intent);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Store the global app state
|
||||
* @param states the app state to be stored e.g. {"state1":value1, "state2":value2}
|
||||
@@ -303,7 +306,7 @@ DUIClient = function(){
|
||||
};
|
||||
_iwcClient.publish(intent);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Ask the dui manager for the app state.
|
||||
*/
|
||||
@@ -317,15 +320,15 @@ DUIClient = function(){
|
||||
};
|
||||
_iwcClient.publish(intent);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Override this function to do something when the requested app state comes.
|
||||
* @param appStates the json format of the app state:{"name1": value1, "name2": value2};
|
||||
*/
|
||||
this.onAppState = function(appStates){};
|
||||
|
||||
|
||||
/**
|
||||
* call this function to register the duiclient to duimanager after all things are OK
|
||||
* call this function to register the duiclient to duimanager after all things are OK
|
||||
*/
|
||||
this.initOK = function(){
|
||||
var okIntent = {
|
||||
@@ -334,12 +337,12 @@ DUIClient = function(){
|
||||
"component": "duimanager",// the overwritten dui manager from the iwc.Proxy should have the _componentName set to "duimanager"
|
||||
"data":"",
|
||||
"dataType":"",
|
||||
"extras":{"widgetId": _widgetId}
|
||||
"extras":{"widgetId": _widgetId}
|
||||
};
|
||||
|
||||
|
||||
_iwcClient.publish(okIntent);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* publish the intent in the domain of the user only
|
||||
*/
|
||||
@@ -355,7 +358,7 @@ DUIClient = function(){
|
||||
_iwcClient.publish(intent);
|
||||
_iwcClient.publish(wrap);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* register the call back function of the widget to the DUI client.
|
||||
*/
|
||||
|
||||
@@ -409,8 +409,8 @@ module.exports = function(HB) {
|
||||
parser = {};
|
||||
execution_listener = [];
|
||||
Operation = (function() {
|
||||
function Operation(_arg) {
|
||||
this.creator = _arg['creator'], this.op_number = _arg['op_number'];
|
||||
function Operation(uid) {
|
||||
this.creator = uid['creator'], this.op_number = uid['op_number'];
|
||||
}
|
||||
|
||||
Operation.prototype.getUid = function() {
|
||||
@@ -495,9 +495,9 @@ module.exports = function(HB) {
|
||||
return Delete;
|
||||
|
||||
})(Operation);
|
||||
parser['Delete'] = function(_arg) {
|
||||
parser['Delete'] = function(o) {
|
||||
var deletes_uid, uid;
|
||||
uid = _arg['uid'], deletes_uid = _arg['deletes'];
|
||||
uid = o['uid'], deletes_uid = o['deletes'];
|
||||
return new Delete(uid, deletes_uid);
|
||||
};
|
||||
Insert = (function(_super) {
|
||||
@@ -716,14 +716,13 @@ module.exports = function(HB) {
|
||||
if (typeof content === 'string') {
|
||||
word = HB.addOperation(new types.Word(HB.getNextOperationIdentifier(), content)).execute();
|
||||
JsonType.__super__.val.call(this, name, word);
|
||||
return content;
|
||||
} else if (typeof content === 'object') {
|
||||
json = HB.addOperation(JsonType(HB.getNextOperationIdentifier(), content)).execute();
|
||||
JsonType.__super__.val.call(this, name, json);
|
||||
return content;
|
||||
} else {
|
||||
throw new Error("You must not set " + (typeof content) + "-types in collaborative Json-objects!");
|
||||
}
|
||||
return this;
|
||||
} else {
|
||||
return JsonType.__super__.val.call(this, name, content);
|
||||
}
|
||||
@@ -13200,156 +13199,142 @@ Yatta = require("../lib/Frameworks/JsonYatta.coffee");
|
||||
|
||||
Connector_uninitialized = require("../lib/Connectors/TestConnector.coffee");
|
||||
|
||||
describe("JsonYatta", function() {
|
||||
beforeEach(function(done) {
|
||||
var i, _i, _ref;
|
||||
this.last_user = 10;
|
||||
this.users = [];
|
||||
this.Connector = Connector_uninitialized(this.users);
|
||||
for (i = _i = 0, _ref = this.last_user + 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
|
||||
this.users.push(new Yatta(i, this.Connector));
|
||||
}
|
||||
return done();
|
||||
});
|
||||
return it("can handle many engines, many operations, concurrently (random)", function() {
|
||||
var Connector, applyRandomOp, doSomething, doSomething_amount, found_error, generateDeleteOp, generateInsertOp, generateRandomOp, generateReplaceOp, i, j, number_of_created_operations, number_of_engines, number_of_test_cases_multiplier, ops, ops_per_msek, printOpsInExecutionOrder, repeat_this, time_now, times, u, user, user_number, users, _i, _j, _k, _l, _len, _m, _ref, _results;
|
||||
number_of_test_cases_multiplier = 1;
|
||||
repeat_this = 1 * number_of_test_cases_multiplier;
|
||||
doSomething_amount = 200 * number_of_test_cases_multiplier;
|
||||
number_of_engines = 12 + number_of_test_cases_multiplier - 1;
|
||||
this.time = 0;
|
||||
this.ops = 0;
|
||||
users = [];
|
||||
generateInsertOp = function(user_num) {
|
||||
var chars, length, nextchar, pos, text;
|
||||
chars = "1234567890";
|
||||
pos = _.random(0, users[user_num].val('name').length - 1);
|
||||
length = 1;
|
||||
nextchar = chars[_.random(0, chars.length - 1)];
|
||||
text = "";
|
||||
_(length).times(function() {
|
||||
return text += nextchar;
|
||||
});
|
||||
users[user_num].val('name').insertText(pos, text);
|
||||
return null;
|
||||
};
|
||||
generateReplaceOp = function(user_num) {
|
||||
var chars, length, nextchar, text;
|
||||
chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
length = _.random(0, 10);
|
||||
nextchar = chars[_.random(0, chars.length - 1)];
|
||||
text = "";
|
||||
_(length).times(function() {
|
||||
return text += nextchar;
|
||||
});
|
||||
return users[user_num].val('name').replaceText(text);
|
||||
};
|
||||
generateDeleteOp = function(user_num) {
|
||||
var length, ops1, pos;
|
||||
if (users[user_num].val('name').val().length > 0) {
|
||||
pos = _.random(0, users[user_num].val('name').val().length - 1);
|
||||
length = 1;
|
||||
ops1 = users[user_num].val('name').deleteText(pos, length);
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
generateRandomOp = function(user_num) {
|
||||
var i, op, op_gen;
|
||||
op_gen = [generateDeleteOp, generateInsertOp, generateReplaceOp];
|
||||
i = _.random(op_gen.length - 1);
|
||||
return op = op_gen[i](user_num);
|
||||
};
|
||||
applyRandomOp = function(user_num) {
|
||||
var user;
|
||||
user = users[user_num];
|
||||
return user.getConnector().flushOneRandom();
|
||||
};
|
||||
doSomething = (function() {
|
||||
return function() {
|
||||
var choice, choices, user_num;
|
||||
user_num = _.random(number_of_engines - 1);
|
||||
choices = [applyRandomOp, generateRandomOp];
|
||||
choice = _.random(choices.length - 1);
|
||||
return choices[choice](user_num);
|
||||
};
|
||||
})();
|
||||
console.log("");
|
||||
_results = [];
|
||||
for (times = _i = 1; 1 <= repeat_this ? _i <= repeat_this : _i >= repeat_this; times = 1 <= repeat_this ? ++_i : --_i) {
|
||||
users = [];
|
||||
Connector = Connector_uninitialized(users);
|
||||
users.push(new Yatta(0, Connector));
|
||||
users[0].val('name', "initial");
|
||||
for (i = _j = 1; 1 <= number_of_engines ? _j < number_of_engines : _j > number_of_engines; i = 1 <= number_of_engines ? ++_j : --_j) {
|
||||
users.push(new Yatta(i, Connector));
|
||||
}
|
||||
found_error = false;
|
||||
time_now = (new Date).getTime();
|
||||
for (i = _k = 1; 1 <= doSomething_amount ? _k <= doSomething_amount : _k >= doSomething_amount; i = 1 <= doSomething_amount ? ++_k : --_k) {
|
||||
doSomething();
|
||||
}
|
||||
for (user_number = _l = 0, _len = users.length; _l < _len; user_number = ++_l) {
|
||||
user = users[user_number];
|
||||
user.getConnector().flushAll();
|
||||
}
|
||||
this.time += (new Date()).getTime() - time_now;
|
||||
number_of_created_operations = 0;
|
||||
for (i = _m = 0, _ref = users.length; 0 <= _ref ? _m < _ref : _m > _ref; i = 0 <= _ref ? ++_m : --_m) {
|
||||
number_of_created_operations += users[i].getConnector().getOpsInExecutionOrder().length;
|
||||
}
|
||||
this.ops += number_of_created_operations * users.length;
|
||||
ops_per_msek = Math.floor(this.ops / this.time);
|
||||
console.log(("" + times + "/" + repeat_this + ": Every collaborator (" + users.length + ") applied " + number_of_created_operations + " ops in a different order.") + (" Over all we consumed " + this.ops + " operations in " + (this.time / 1000) + " seconds (" + ops_per_msek + " ops/msek)."));
|
||||
console.log(users[0].val('name').val());
|
||||
_results.push((function() {
|
||||
var _len1, _n, _o, _ref1, _results1;
|
||||
_results1 = [];
|
||||
for (i = _n = 0, _ref1 = users.length - 1; 0 <= _ref1 ? _n < _ref1 : _n > _ref1; i = 0 <= _ref1 ? ++_n : --_n) {
|
||||
if (users[i].val('name').val() !== users[i + 1].val('name').val()) {
|
||||
printOpsInExecutionOrder = function(otnumber, otherotnumber) {
|
||||
var j, o, ops, s, _len1, _len2, _o, _p;
|
||||
ops = users[otnumber].getConnector().getOpsInExecutionOrder();
|
||||
for (_o = 0, _len1 = ops.length; _o < _len1; _o++) {
|
||||
s = ops[_o];
|
||||
console.log(JSON.stringify(s));
|
||||
}
|
||||
console.log("");
|
||||
s = "ops = [";
|
||||
for (j = _p = 0, _len2 = ops.length; _p < _len2; j = ++_p) {
|
||||
o = ops[j];
|
||||
if (j !== 0) {
|
||||
s += ", ";
|
||||
}
|
||||
s += "op" + j;
|
||||
}
|
||||
s += "]";
|
||||
console.log(s);
|
||||
console.log("@users[@last_user].ot.applyOps ops");
|
||||
console.log("expect(@users[@last_user].ot.val('name')).to.equal(\"" + (users[otherotnumber].val('name')) + "\")");
|
||||
return ops;
|
||||
};
|
||||
console.log("");
|
||||
console.log("Found an OT Puzzle!");
|
||||
console.log("OT states:");
|
||||
for (j = _o = 0, _len1 = users.length; _o < _len1; j = ++_o) {
|
||||
u = users[j];
|
||||
console.log(("OT" + j + ": ") + u.val('name'));
|
||||
}
|
||||
console.log("\nOT execution order (" + i + "," + (i + 1) + "):");
|
||||
printOpsInExecutionOrder(i, i + 1);
|
||||
console.log("");
|
||||
ops = printOpsInExecutionOrder(i + 1, i);
|
||||
_results1.push(console.log(""));
|
||||
} else {
|
||||
_results1.push(void 0);
|
||||
}
|
||||
}
|
||||
return _results1;
|
||||
})());
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
describe "JsonYatta", ->
|
||||
beforeEach (done)->
|
||||
@last_user = 10
|
||||
@users = []
|
||||
@Connector = Connector_uninitialized @users
|
||||
for i in [0..(@last_user+1)]
|
||||
@users.push(new Yatta i, @Connector)
|
||||
|
||||
|
||||
done()
|
||||
|
||||
it "can handle many engines, many operations, concurrently (random)", ->
|
||||
number_of_test_cases_multiplier = 1
|
||||
repeat_this = 100 * number_of_test_cases_multiplier
|
||||
doSomething_amount = 200 * number_of_test_cases_multiplier
|
||||
number_of_engines = 12 + number_of_test_cases_multiplier - 1
|
||||
|
||||
@time = 0
|
||||
@ops = 0
|
||||
|
||||
users = []
|
||||
|
||||
generateInsertOp = (user_num)->
|
||||
chars = "1234567890"
|
||||
|
||||
pos = _.random 0, (users[user_num].val('name').length-1)
|
||||
length = 1 #_.random 0, 10
|
||||
|
||||
nextchar = chars[(_.random 0, (chars.length-1))]
|
||||
|
||||
text = ""
|
||||
_(length).times ()-> text += nextchar
|
||||
|
||||
users[user_num].val('name').insertText pos, text
|
||||
null
|
||||
|
||||
generateReplaceOp = (user_num)->
|
||||
chars = "abcdefghijklmnopqrstuvwxyz"
|
||||
length = _.random 0, 10
|
||||
|
||||
nextchar = chars[(_.random 0, (chars.length-1))]
|
||||
|
||||
text = ""
|
||||
_(length).times ()-> text += nextchar
|
||||
users[user_num].val('name').replaceText text
|
||||
|
||||
generateDeleteOp = (user_num)->
|
||||
if users[user_num].val('name').val().length > 0
|
||||
pos = _.random 0, (users[user_num].val('name').val().length-1)
|
||||
length = 1 # _.random 0, ot.val('name').length - pos
|
||||
ops1 = users[user_num].val('name').deleteText pos, length
|
||||
undefined
|
||||
|
||||
generateRandomOp = (user_num)->
|
||||
op_gen = [generateDeleteOp, generateInsertOp, generateReplaceOp]
|
||||
i = _.random (op_gen.length - 1)
|
||||
op = op_gen[i](user_num)
|
||||
|
||||
applyRandomOp = (user_num)->
|
||||
user = users[user_num]
|
||||
user.getConnector().flushOneRandom()
|
||||
|
||||
doSomething = do ()->
|
||||
()->
|
||||
user_num = _.random (number_of_engines-1)
|
||||
choices = [applyRandomOp, generateRandomOp]
|
||||
*if (users[user_num].buffer[user_num].length < maximum_ops_per_engine)
|
||||
* choices = choices.concat generateRandomOp
|
||||
|
||||
choice = _.random (choices.length-1)
|
||||
|
||||
choices[choice](user_num)
|
||||
|
||||
console.log ""
|
||||
for times in [1..repeat_this]
|
||||
*console.log "repeated_this x #{times} times"
|
||||
users = []
|
||||
Connector = Connector_uninitialized users
|
||||
users.push(new Yatta 0, Connector)
|
||||
users[0].val('name',"initial")
|
||||
for i in [1...number_of_engines]
|
||||
users.push(new Yatta i, Connector)
|
||||
|
||||
found_error = false
|
||||
|
||||
*try
|
||||
time_now = (new Date).getTime()
|
||||
for i in [1..doSomething_amount]
|
||||
doSomething()
|
||||
|
||||
for user,user_number in users
|
||||
user.getConnector().flushAll()
|
||||
|
||||
@time += (new Date()).getTime() - time_now
|
||||
|
||||
number_of_created_operations = 0
|
||||
for i in [0...(users.length)]
|
||||
number_of_created_operations += users[i].getConnector().getOpsInExecutionOrder().length
|
||||
@ops += number_of_created_operations*users.length
|
||||
|
||||
ops_per_msek = Math.floor(@ops/@time)
|
||||
console.log "#{times}/#{repeat_this}: Every collaborator (#{users.length}) applied #{number_of_created_operations} ops in a different order." + " Over all we consumed #{@ops} operations in #{@time/1000} seconds (#{ops_per_msek} ops/msek)."
|
||||
|
||||
console.log users[0].val('name').val()
|
||||
for i in [0...(users.length-1)]
|
||||
if ((users[i].val('name').val() isnt users[i+1].val('name').val()) )# and (number_of_created_operations <= 6 or true)) or found_error
|
||||
|
||||
printOpsInExecutionOrder = (otnumber, otherotnumber)->
|
||||
ops = users[otnumber].getConnector().getOpsInExecutionOrder()
|
||||
for s in ops
|
||||
console.log JSON.stringify s
|
||||
console.log ""
|
||||
s = "ops = ["
|
||||
for o,j in ops
|
||||
if j isnt 0
|
||||
s += ", "
|
||||
s += "op#{j}"
|
||||
s += "]"
|
||||
console.log s
|
||||
console.log "@users[@last_user].ot.applyOps ops"
|
||||
console.log "expect(@users[@last_user].ot.val('name')).to.equal(\"#{users[otherotnumber].val('name')}\")"
|
||||
ops
|
||||
console.log ""
|
||||
console.log "Found an OT Puzzle!"
|
||||
console.log "OT states:"
|
||||
for u,j in users
|
||||
console.log "OT#{j}: "+u.val('name')
|
||||
console.log "\nOT execution order (#{i},#{i+1}):"
|
||||
printOpsInExecutionOrder i, i+1
|
||||
console.log ""
|
||||
ops = printOpsInExecutionOrder i+1, i
|
||||
|
||||
console.log ""
|
||||
*/
|
||||
|
||||
|
||||
},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,"chai":17,"sinon":50,"sinon-chai":49,"underscore":65}],67:[function(require,module,exports){
|
||||
@@ -13373,155 +13358,343 @@ Yatta = require("../lib/Frameworks/TextYatta.coffee");
|
||||
|
||||
Connector_uninitialized = require("../lib/Connectors/TestConnector.coffee");
|
||||
|
||||
describe("TextYatta", function() {
|
||||
beforeEach(function(done) {
|
||||
var i, _i, _ref;
|
||||
this.last_user = 10;
|
||||
this.users = [];
|
||||
this.Connector = Connector_uninitialized(this.users);
|
||||
for (i = _i = 0, _ref = this.last_user + 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
|
||||
this.users.push(new Yatta(i, this.Connector));
|
||||
}
|
||||
return done();
|
||||
});
|
||||
it("handles inserts correctly", function() {});
|
||||
return it("can handle many engines, many operations, concurrently (random)", function() {
|
||||
var Connector, applyRandomOp, doSomething, doSomething_amount, found_error, found_inconsistency, generateDeleteOp, generateInsertOp, generateRandomOp, generateReplaceOp, i, j, number_of_created_operations, number_of_engines, number_of_test_cases_multiplier, ops, ops_per_msek, printOpsInExecutionOrder, repeat_this, time_now, times, u, user, user_number, users, _i, _j, _k, _l, _len, _len1, _m, _n, _o, _ref, _ref1, _results;
|
||||
number_of_test_cases_multiplier = 1;
|
||||
repeat_this = 1 * number_of_test_cases_multiplier;
|
||||
doSomething_amount = 500 * number_of_test_cases_multiplier;
|
||||
number_of_engines = 12 + number_of_test_cases_multiplier - 1;
|
||||
|
||||
/*
|
||||
describe "TextYatta", ->
|
||||
beforeEach (done)->
|
||||
@last_user = 10
|
||||
@users = []
|
||||
@Connector = Connector_uninitialized @users
|
||||
for i in [0..(@last_user+1)]
|
||||
@users.push(new Yatta i, @Connector)
|
||||
done()
|
||||
|
||||
it "handles inserts correctly", ->
|
||||
|
||||
|
||||
it "can handle many engines, many operations, concurrently (random)", ->
|
||||
number_of_test_cases_multiplier = 1
|
||||
repeat_this = 1 * number_of_test_cases_multiplier
|
||||
doSomething_amount = 500 * number_of_test_cases_multiplier
|
||||
number_of_engines = 12 + number_of_test_cases_multiplier - 1
|
||||
*maximum_ops_per_engine = 20 * number_of_test_cases_multiplier
|
||||
|
||||
@time = 0
|
||||
@ops = 0
|
||||
users = []
|
||||
|
||||
generateInsertOp = (user_num)->
|
||||
chars = "1234567890"
|
||||
|
||||
pos = _.random 0, (users[user_num].val().length-1)
|
||||
length = 1 #_.random 0, 10
|
||||
|
||||
nextchar = chars[(_.random 0, (chars.length-1))]
|
||||
|
||||
text = ""
|
||||
_(length).times ()-> text += nextchar
|
||||
|
||||
users[user_num].insertText pos, text
|
||||
null
|
||||
|
||||
generateReplaceOp = (user_num)->
|
||||
chars = "abcdefghijklmnopqrstuvwxyz"
|
||||
length = _.random 0, 10
|
||||
|
||||
nextchar = chars[(_.random 0, (chars.length-1))]
|
||||
|
||||
text = ""
|
||||
_(length).times ()-> text += nextchar
|
||||
users[user_num].replaceText text
|
||||
|
||||
generateDeleteOp = (user_num)->
|
||||
if users[user_num].val().length > 0
|
||||
pos = _.random 0, (users[user_num].val().length-1)
|
||||
length = 1 # _.random 0, ot.val().length - pos
|
||||
ops1 = users[user_num].deleteText pos, length
|
||||
undefined
|
||||
|
||||
generateRandomOp = (user_num)->
|
||||
op_gen = [generateDeleteOp, generateInsertOp, generateReplaceOp]
|
||||
i = _.random (op_gen.length - 1)
|
||||
op = op_gen[i](user_num)
|
||||
|
||||
applyRandomOp = (user_num)->
|
||||
user = users[user_num]
|
||||
user.getConnector().flushOneRandom()
|
||||
|
||||
doSomething = do ()->
|
||||
()->
|
||||
user_num = _.random (number_of_engines-1)
|
||||
choices = [applyRandomOp, generateRandomOp]
|
||||
*if (users[user_num].buffer[user_num].length < maximum_ops_per_engine)
|
||||
* choices = choices.concat generateRandomOp
|
||||
|
||||
choice = _.random (choices.length-1)
|
||||
|
||||
choices[choice](user_num)
|
||||
|
||||
console.log ""
|
||||
for times in [1..repeat_this]
|
||||
*console.log "repeated_this x #{times} times"
|
||||
users = []
|
||||
Connector = Connector_uninitialized users
|
||||
for i in [0..number_of_engines]
|
||||
users.push(new Yatta i, Connector)
|
||||
|
||||
found_error = false
|
||||
|
||||
*try
|
||||
time_now = (new Date).getTime()
|
||||
for i in [1..doSomething_amount]
|
||||
doSomething()
|
||||
|
||||
for user,user_number in users
|
||||
user.getConnector().flushAll()
|
||||
|
||||
@time += (new Date()).getTime() - time_now
|
||||
|
||||
number_of_created_operations = 0
|
||||
for i in [0...(users.length)]
|
||||
number_of_created_operations += users[i].getConnector().getOpsInExecutionOrder().length
|
||||
@ops += number_of_created_operations*users.length
|
||||
|
||||
ops_per_msek = Math.floor(@ops/@time)
|
||||
console.log "#{times}/#{repeat_this}: Every collaborator (#{users.length}) applied #{number_of_created_operations} ops in a different order." + " Over all we consumed #{@ops} operations in #{@time/1000} seconds (#{ops_per_msek} ops/msek)."
|
||||
|
||||
console.log users[0].val()
|
||||
found_inconsistency = false
|
||||
for i in [0...(users.length-1)]
|
||||
if ((users[i].val() isnt users[i+1].val()) )# and (number_of_created_operations <= 6 or true)) or found_error
|
||||
found_inconsistency =true
|
||||
printOpsInExecutionOrder = (otnumber, otherotnumber)->
|
||||
ops = users[otnumber].getConnector().getOpsInExecutionOrder()
|
||||
for s,j in ops
|
||||
console.log "op#{j} = #{JSON.stringify s}"
|
||||
console.log ""
|
||||
s = "ops = ["
|
||||
for o,j in ops
|
||||
if j isnt 0
|
||||
s += ", "
|
||||
s += "op#{j}"
|
||||
s += "]"
|
||||
console.log s
|
||||
console.log "@users[@last_user].ot.applyOps ops"
|
||||
console.log "expect(@users[@last_user].val()).to.equal(\"#{users[otherotnumber].val()}\")"
|
||||
ops
|
||||
console.log ""
|
||||
console.log "Found an OT Puzzle!"
|
||||
console.log "OT states:"
|
||||
for u,j in users
|
||||
console.log "OT#{j}: "+u.val()
|
||||
console.log "\nOT execution order (#{i},#{i+1}):"
|
||||
printOpsInExecutionOrder i, i+1
|
||||
console.log ""
|
||||
ops = printOpsInExecutionOrder i+1, i
|
||||
|
||||
console.log ""
|
||||
if found_inconsistency
|
||||
throw new Error "dtrn"
|
||||
|
||||
* expect(users[i].ot.val()).to.equal(users[i+1].ot.val())
|
||||
*/
|
||||
|
||||
|
||||
},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,"chai":17,"sinon":50,"sinon-chai":49,"underscore":65}],68:[function(require,module,exports){
|
||||
var Connector_uninitialized, Test, Yatta, chai, expect, should, sinon, sinonChai, _,
|
||||
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
||||
|
||||
chai = require('chai');
|
||||
|
||||
expect = chai.expect;
|
||||
|
||||
should = chai.should();
|
||||
|
||||
sinon = require('sinon');
|
||||
|
||||
sinonChai = require('sinon-chai');
|
||||
|
||||
_ = require("underscore");
|
||||
|
||||
chai.use(sinonChai);
|
||||
|
||||
Yatta = require("../lib/Frameworks/JsonYatta.coffee");
|
||||
|
||||
Connector_uninitialized = require("../lib/Connectors/TestConnector.coffee");
|
||||
|
||||
Test = (function() {
|
||||
function Test() {
|
||||
this.applyRandomOp = __bind(this.applyRandomOp, this);
|
||||
this.generateRandomOp = __bind(this.generateRandomOp, this);
|
||||
this.generateDeleteOp = __bind(this.generateDeleteOp, this);
|
||||
this.generateReplaceOp = __bind(this.generateReplaceOp, this);
|
||||
this.generateInsertOp = __bind(this.generateInsertOp, this);
|
||||
this.number_of_test_cases_multiplier = 1;
|
||||
this.repeat_this = 100 * this.number_of_test_cases_multiplier;
|
||||
this.doSomething_amount = 200 * this.number_of_test_cases_multiplier;
|
||||
this.number_of_engines = 12 + this.number_of_test_cases_multiplier - 1;
|
||||
this.time = 0;
|
||||
this.ops = 0;
|
||||
users = [];
|
||||
generateInsertOp = function(user_num) {
|
||||
var chars, length, nextchar, pos, text;
|
||||
chars = "1234567890";
|
||||
pos = _.random(0, users[user_num].val().length - 1);
|
||||
length = 1;
|
||||
nextchar = chars[_.random(0, chars.length - 1)];
|
||||
text = "";
|
||||
_(length).times(function() {
|
||||
return text += nextchar;
|
||||
});
|
||||
users[user_num].insertText(pos, text);
|
||||
return null;
|
||||
};
|
||||
generateReplaceOp = function(user_num) {
|
||||
var chars, length, nextchar, text;
|
||||
chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
length = _.random(0, 10);
|
||||
nextchar = chars[_.random(0, chars.length - 1)];
|
||||
text = "";
|
||||
_(length).times(function() {
|
||||
return text += nextchar;
|
||||
});
|
||||
return users[user_num].replaceText(text);
|
||||
};
|
||||
generateDeleteOp = function(user_num) {
|
||||
var length, ops1, pos;
|
||||
if (users[user_num].val().length > 0) {
|
||||
pos = _.random(0, users[user_num].val().length - 1);
|
||||
length = 1;
|
||||
ops1 = users[user_num].deleteText(pos, length);
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
generateRandomOp = function(user_num) {
|
||||
var i, op, op_gen;
|
||||
op_gen = [generateDeleteOp, generateInsertOp, generateReplaceOp];
|
||||
i = _.random(op_gen.length - 1);
|
||||
return op = op_gen[i](user_num);
|
||||
};
|
||||
applyRandomOp = function(user_num) {
|
||||
var user;
|
||||
user = users[user_num];
|
||||
return user.getConnector().flushOneRandom();
|
||||
};
|
||||
doSomething = (function() {
|
||||
return function() {
|
||||
var choice, choices, user_num;
|
||||
user_num = _.random(number_of_engines - 1);
|
||||
choices = [applyRandomOp, generateRandomOp];
|
||||
choice = _.random(choices.length - 1);
|
||||
return choices[choice](user_num);
|
||||
};
|
||||
})();
|
||||
console.log("");
|
||||
this.reinitialize();
|
||||
}
|
||||
|
||||
Test.prototype.reinitialize = function() {
|
||||
var i, _i, _ref, _results;
|
||||
this.users = [];
|
||||
this.Connector = Connector_uninitialized(this.users);
|
||||
this.users.push(new Yatta(0, this.Connector));
|
||||
this.users[0].val('name', "initial");
|
||||
_results = [];
|
||||
for (times = _i = 1; 1 <= repeat_this ? _i <= repeat_this : _i >= repeat_this; times = 1 <= repeat_this ? ++_i : --_i) {
|
||||
users = [];
|
||||
Connector = Connector_uninitialized(users);
|
||||
for (i = _j = 0; 0 <= number_of_engines ? _j <= number_of_engines : _j >= number_of_engines; i = 0 <= number_of_engines ? ++_j : --_j) {
|
||||
users.push(new Yatta(i, Connector));
|
||||
}
|
||||
found_error = false;
|
||||
time_now = (new Date).getTime();
|
||||
for (i = _k = 1; 1 <= doSomething_amount ? _k <= doSomething_amount : _k >= doSomething_amount; i = 1 <= doSomething_amount ? ++_k : --_k) {
|
||||
doSomething();
|
||||
}
|
||||
for (user_number = _l = 0, _len = users.length; _l < _len; user_number = ++_l) {
|
||||
user = users[user_number];
|
||||
user.getConnector().flushAll();
|
||||
}
|
||||
this.time += (new Date()).getTime() - time_now;
|
||||
number_of_created_operations = 0;
|
||||
for (i = _m = 0, _ref = users.length; 0 <= _ref ? _m < _ref : _m > _ref; i = 0 <= _ref ? ++_m : --_m) {
|
||||
number_of_created_operations += users[i].getConnector().getOpsInExecutionOrder().length;
|
||||
}
|
||||
this.ops += number_of_created_operations * users.length;
|
||||
ops_per_msek = Math.floor(this.ops / this.time);
|
||||
console.log(("" + times + "/" + repeat_this + ": Every collaborator (" + users.length + ") applied " + number_of_created_operations + " ops in a different order.") + (" Over all we consumed " + this.ops + " operations in " + (this.time / 1000) + " seconds (" + ops_per_msek + " ops/msek)."));
|
||||
console.log(users[0].val());
|
||||
found_inconsistency = false;
|
||||
for (i = _n = 0, _ref1 = users.length - 1; 0 <= _ref1 ? _n < _ref1 : _n > _ref1; i = 0 <= _ref1 ? ++_n : --_n) {
|
||||
if (users[i].val() !== users[i + 1].val()) {
|
||||
found_inconsistency = true;
|
||||
printOpsInExecutionOrder = function(otnumber, otherotnumber) {
|
||||
var j, o, ops, s, _len1, _len2, _o, _p;
|
||||
ops = users[otnumber].getConnector().getOpsInExecutionOrder();
|
||||
for (j = _o = 0, _len1 = ops.length; _o < _len1; j = ++_o) {
|
||||
s = ops[j];
|
||||
console.log("op" + j + " = " + (JSON.stringify(s)));
|
||||
}
|
||||
console.log("");
|
||||
s = "ops = [";
|
||||
for (j = _p = 0, _len2 = ops.length; _p < _len2; j = ++_p) {
|
||||
o = ops[j];
|
||||
if (j !== 0) {
|
||||
s += ", ";
|
||||
}
|
||||
s += "op" + j;
|
||||
}
|
||||
s += "]";
|
||||
console.log(s);
|
||||
console.log("@users[@last_user].ot.applyOps ops");
|
||||
console.log("expect(@users[@last_user].val()).to.equal(\"" + (users[otherotnumber].val()) + "\")");
|
||||
return ops;
|
||||
};
|
||||
console.log("");
|
||||
console.log("Found an OT Puzzle!");
|
||||
console.log("OT states:");
|
||||
for (j = _o = 0, _len1 = users.length; _o < _len1; j = ++_o) {
|
||||
u = users[j];
|
||||
console.log(("OT" + j + ": ") + u.val());
|
||||
}
|
||||
console.log("\nOT execution order (" + i + "," + (i + 1) + "):");
|
||||
printOpsInExecutionOrder(i, i + 1);
|
||||
console.log("");
|
||||
ops = printOpsInExecutionOrder(i + 1, i);
|
||||
console.log("");
|
||||
}
|
||||
}
|
||||
if (found_inconsistency) {
|
||||
throw new Error("dtrn");
|
||||
} else {
|
||||
_results.push(void 0);
|
||||
}
|
||||
for (i = _i = 1, _ref = this.number_of_engines; 1 <= _ref ? _i < _ref : _i > _ref; i = 1 <= _ref ? ++_i : --_i) {
|
||||
_results.push(this.users.push(new Yatta(i, this.Connector)));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
Test.prototype.getRandomText = function() {
|
||||
var chars, length, nextchar, text;
|
||||
chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
length = _.random(0, 10);
|
||||
nextchar = chars[_.random(0, chars.length - 1)];
|
||||
text = "";
|
||||
_(length).times(function() {
|
||||
return text += nextchar;
|
||||
});
|
||||
return text;
|
||||
};
|
||||
|
||||
Test.prototype.generateInsertOp = function(user_num) {
|
||||
var pos;
|
||||
pos = _.random(0, this.users[user_num].val('name').val().length - 1);
|
||||
this.users[user_num].val('name').insertText(pos, this.getRandomText());
|
||||
return null;
|
||||
};
|
||||
|
||||
Test.prototype.generateReplaceOp = function(user_num) {
|
||||
this.users[user_num].val('name').replaceText(this.getRandomText());
|
||||
return null;
|
||||
};
|
||||
|
||||
Test.prototype.generateDeleteOp = function(user_num) {
|
||||
var length, ops1, pos;
|
||||
if (this.users[user_num].val('name').val().length > 0) {
|
||||
pos = _.random(0, this.users[user_num].val('name').val().length - 1);
|
||||
length = 1;
|
||||
ops1 = this.users[user_num].val('name').deleteText(pos, length);
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
|
||||
Test.prototype.generateRandomOp = function(user_num) {
|
||||
var i, op, op_gen;
|
||||
op_gen = [this.generateDeleteOp, this.generateInsertOp, this.generateReplaceOp];
|
||||
i = _.random(op_gen.length - 1);
|
||||
return op = op_gen[i](user_num);
|
||||
};
|
||||
|
||||
Test.prototype.applyRandomOp = function(user_num) {
|
||||
var user;
|
||||
user = this.users[user_num];
|
||||
return user.getConnector().flushOneRandom();
|
||||
};
|
||||
|
||||
Test.prototype.doSomething = function() {
|
||||
var choice, choices, user_num;
|
||||
user_num = _.random(this.number_of_engines - 1);
|
||||
choices = [this.applyRandomOp, this.generateRandomOp];
|
||||
choice = _.random(choices.length - 1);
|
||||
return choices[choice](user_num);
|
||||
};
|
||||
|
||||
Test.prototype.flushAll = function() {
|
||||
var user, user_number, _i, _len, _ref, _results;
|
||||
_ref = this.users;
|
||||
_results = [];
|
||||
for (user_number = _i = 0, _len = _ref.length; _i < _len; user_number = ++_i) {
|
||||
user = _ref[user_number];
|
||||
_results.push(user.getConnector().flushAll());
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
Test.prototype.run = function() {
|
||||
var i, j, number_of_created_operations, ops, ops_per_msek, printOpsInExecutionOrder, time_now, times, u, _i, _j, _k, _ref, _ref1, _ref2, _results;
|
||||
_results = [];
|
||||
for (times = _i = 1, _ref = this.repeat_this; 1 <= _ref ? _i <= _ref : _i >= _ref; times = 1 <= _ref ? ++_i : --_i) {
|
||||
this.reinitialize();
|
||||
time_now = (new Date).getTime();
|
||||
for (i = _j = 1, _ref1 = this.doSomething_amount; 1 <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = 1 <= _ref1 ? ++_j : --_j) {
|
||||
this.doSomething();
|
||||
}
|
||||
this.flushAll();
|
||||
this.time += (new Date()).getTime() - time_now;
|
||||
number_of_created_operations = 0;
|
||||
for (i = _k = 0, _ref2 = this.users.length; 0 <= _ref2 ? _k < _ref2 : _k > _ref2; i = 0 <= _ref2 ? ++_k : --_k) {
|
||||
number_of_created_operations += this.users[i].getConnector().getOpsInExecutionOrder().length;
|
||||
}
|
||||
this.ops += number_of_created_operations * this.users.length;
|
||||
ops_per_msek = Math.floor(this.ops / this.time);
|
||||
console.log(("" + times + "/" + this.repeat_this + ": Every collaborator (" + this.users.length + ") applied " + this.number_of_created_operations + " ops in a different order.") + (" Over all we consumed " + this.ops + " operations in " + (this.time / 1000) + " seconds (" + ops_per_msek + " ops/msek)."));
|
||||
_results.push((function() {
|
||||
var _l, _len, _m, _ref3, _results1;
|
||||
_results1 = [];
|
||||
for (i = _l = 0, _ref3 = this.users.length - 1; 0 <= _ref3 ? _l < _ref3 : _l > _ref3; i = 0 <= _ref3 ? ++_l : --_l) {
|
||||
if (this.users[i].val('name').val() !== this.users[i + 1].val('name').val()) {
|
||||
printOpsInExecutionOrder = function(otnumber, otherotnumber) {
|
||||
var j, o, ops, s, _len, _len1, _m, _n;
|
||||
ops = this.users[otnumber].getConnector().getOpsInExecutionOrder();
|
||||
for (_m = 0, _len = ops.length; _m < _len; _m++) {
|
||||
s = ops[_m];
|
||||
console.log(JSON.stringify(s));
|
||||
}
|
||||
console.log("");
|
||||
s = "ops = [";
|
||||
for (j = _n = 0, _len1 = ops.length; _n < _len1; j = ++_n) {
|
||||
o = ops[j];
|
||||
if (j !== 0) {
|
||||
s += ", ";
|
||||
}
|
||||
s += "op" + j;
|
||||
}
|
||||
s += "]";
|
||||
console.log(s);
|
||||
console.log("@users[@last_user].ot.applyOps ops");
|
||||
console.log("expect(@users[@last_user].ot.val('name')).to.equal(\"" + (users[otherotnumber].val('name')) + "\")");
|
||||
return ops;
|
||||
};
|
||||
console.log("");
|
||||
console.log("Found an OT Puzzle!");
|
||||
console.log("OT states:");
|
||||
for (j = _m = 0, _len = users.length; _m < _len; j = ++_m) {
|
||||
u = users[j];
|
||||
console.log(("OT" + j + ": ") + u.val('name'));
|
||||
}
|
||||
console.log("\nOT execution order (" + i + "," + (i + 1) + "):");
|
||||
printOpsInExecutionOrder(i, i + 1);
|
||||
console.log("");
|
||||
ops = printOpsInExecutionOrder(i + 1, i);
|
||||
_results1.push(console.log(""));
|
||||
} else {
|
||||
_results1.push(void 0);
|
||||
}
|
||||
}
|
||||
return _results1;
|
||||
}).call(this));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
return Test;
|
||||
|
||||
})();
|
||||
|
||||
describe("JsonYatta", function() {
|
||||
return it("can handle many engines, many operations, concurrently (random)", function() {
|
||||
var yTest;
|
||||
yTest = new Test();
|
||||
return yTest.run();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,"chai":17,"sinon":50,"sinon-chai":49,"underscore":65}]},{},[66,67]);
|
||||
},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,"chai":17,"sinon":50,"sinon-chai":49,"underscore":65}]},{},[66,67,68]);
|
||||
@@ -6,5 +6,5 @@
|
||||
"IwcConnector.coffee"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "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"
|
||||
"mappings": "AACA,IAAA,kBAAA;;AAAA,kBAAA,GAAqB,SAAC,QAAD,GAAA;AACnB,MAAA,qFAAA;AAAA,EAAA,UAAA,GAAa,EAAb,CAAA;AAAA,EACA,SAAA,GAAgB,IAAA,SAAA,CAAA,CADhB,CAAA;AAAA,EAGA,SAAS,CAAC,OAAV,CAAkB,CAAA,SAAA,KAAA,GAAA;WAAA,SAAC,MAAD,GAAA;AAChB,UAAA,IAAA;AAAA,MAAA,OAAO,CAAC,GAAR,CAAa,uBAAA,GAAsB,CAAA,IAAI,CAAC,SAAL,CAAe,MAAf,CAAA,CAAnC,CAAA,CAAA;AAAA,MACA,OAAO,CAAC,GAAR,CAAY,EAAA,GAAE,CAAA,IAAI,CAAC,SAAL,CAAe,KAAC,CAAA,UAAhB,CAAA,CAAd,CADA,CAAA;8DAEyB,CAAE,GAA3B,CAA+B,SAAC,CAAD,GAAA;eAC7B,UAAA,CAAW,SAAA,GAAA;iBACP,CAAA,CAAE,MAAF,EADO;QAAA,CAAX,EAEI,CAFJ,EAD6B;MAAA,CAA/B,WAHgB;IAAA,EAAA;EAAA,CAAA,CAAA,CAAA,IAAA,CAAlB,CAHA,CAAA;AAAA,EAWA,SAAS,CAAC,MAAV,CAAA,CAXA,CAAA;AAAA,EAaA,YAAA,GAAe,IAbf,CAAA;AAAA,EAcA,WAAA,GAAc,IAdd,CAAA;AAAA,EAqBM;AACS,IAAA,sBAAE,MAAF,EAAW,EAAX,EAAgB,kBAAhB,EAAqC,KAArC,GAAA;AACX,UAAA,gCAAA;AAAA,MADY,IAAC,CAAA,SAAA,MACb,CAAA;AAAA,MADqB,IAAC,CAAA,KAAA,EACtB,CAAA;AAAA,MAD0B,IAAC,CAAA,qBAAA,kBAC3B,CAAA;AAAA,MAD+C,IAAC,CAAA,QAAA,KAChD,CAAA;AAAA,MAAA,IAAC,CAAA,SAAD,GAAa,SAAb,CAAA;AAAA,MACA,IAAC,CAAA,UAAD,GAAc,UADd,CAAA;AAAA,MAGA,KAAA,GAAQ,CAAA,SAAA,KAAA,GAAA;eAAA,SAAC,CAAD,GAAA;iBACN,KAAC,CAAA,IAAD,CAAM,CAAN,EADM;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAHR,CAAA;AAAA,MAKA,IAAC,CAAA,kBAAkB,CAAC,IAApB,CAAyB,KAAzB,CALA,CAAA;AAAA,MAOA,QAAA,GAAW,CAAA,SAAA,KAAA,GAAA;eAAA,SAAC,MAAD,GAAA;AACT,cAAA,CAAA;AAAA,UAAA,CAAA,GAAI,MAAM,CAAC,MAAX,CAAA;iBACA,KAAC,CAAA,OAAD,CAAS,CAAT,EAFS;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAPX,CAAA;AAAA,MAUA,IAAC,CAAA,UAAW,CAAA,qBAAA,CAAZ,GAAqC,CAAC,QAAD,CAVrC,CAAA;AAYA,MAAA,IAAG,oBAAH;AACE,QAAA,IAAC,CAAA,MAAM,CAAC,QAAR,CAAiB,WAAjB,CAAA,CADF;OAZA;AAAA,MAeA,eAAA,GAAkB,CAAA,SAAA,KAAA,GAAA;eAAA,SAAA,GAAA;AAChB,cAAA,IAAA;AAAA,UAAA,IAAA,GAAO;AAAA,YACH,YAAA,EAAe,KAAC,CAAA,KAAK,CAAC,cAAP,CAAA,CADZ;AAAA,YAEH,EAAA,EAAK,KAAC,CAAA,KAAK,CAAC,gBAAP,CAAA,CAAyB,CAAC,MAA1B,CAAA,CAFF;WAAP,CAAA;iBAIA,KAAC,CAAA,aAAD,CAAe,yBAAf,EAA0C,IAA1C,EALgB;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAflB,CAAA;AAAA,MAqBA,IAAC,CAAA,UAAW,CAAA,wBAAA,CAAZ,GAAwC,CAAC,eAAD,CArBxC,CADW;IAAA,CAAb;;AAAA,2BAwBA,cAAA,GAAgB,SAAA,GAAA;aACd,aADc;IAAA,CAxBhB,CAAA;;AAAA,2BA2BA,IAAA,GAAM,SAAC,CAAD,GAAA;AACJ,MAAA,IAAG,CAAC,CAAC,GAAG,CAAC,OAAN,KAAiB,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,CAAjB,IAAqC,CAAC,MAAA,CAAA,CAAQ,CAAC,GAAG,CAAC,SAAb,KAA4B,QAA7B,CAAxC;eACE,IAAC,CAAA,aAAD,CAAe,qBAAf,EAAsC,CAAtC,EADF;OADI;IAAA,CA3BN,CAAA;;AAAA,2BA+BA,OAAA,GAAS,SAAC,CAAD,GAAA;AACP,MAAA,IAAG,CAAC,CAAC,GAAG,CAAC,OAAN,KAAmB,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,CAAtB;eACE,IAAC,CAAA,MAAM,CAAC,OAAR,CAAgB,CAAhB,EADF;OADO;IAAA,CA/BT,CAAA;;AAAA,2BAmCA,aAAA,GAAe,SAAC,WAAD,EAAc,OAAd,GAAA;AACb,UAAA,MAAA;AAAA,MAAA,MAAA,GACE;AAAA,QAAA,MAAA,EAAQ,WAAR;AAAA,QACA,SAAA,EAAW,EADX;AAAA,QAEA,IAAA,EAAM,EAFN;AAAA,QAGA,QAAA,EAAU,EAHV;AAAA,QAIA,MAAA,EAAQ,OAJR;OADF,CAAA;aAOA,IAAC,CAAA,SAAS,CAAC,aAAX,CAAyB,MAAzB,EARa;IAAA,CAnCf,CAAA;;AAAA,2BA6CA,IAAA,GAAM,SAAA,GAAA;AACJ,YAAU,IAAA,KAAA,CAAM,uBAAN,CAAV,CADI;IAAA,CA7CN,CAAA;;wBAAA;;MAtBF,CAAA;AAAA,EAsEA,eAAA,GACE;AAAA,IAAA,MAAA,EAAQ,wBAAR;AAAA,IACA,SAAA,EAAW,EADX;AAAA,IAEA,IAAA,EAAM,EAFN;AAAA,IAGA,QAAA,EAAU,EAHV;AAAA,IAIA,MAAA,EAAQ,EAJR;GAvEF,CAAA;AAAA,EA6EA,IAAA,GAAO,SAAA,GAAA;AACL,QAAA,kCAAA;AAAA,IAAA,SAAS,CAAC,aAAV,CAAwB,eAAxB,CAAA,CAAA;AAAA,IAEA,cAAA,GAAiB,KAFjB,CAAA;AAAA,IAGA,kBAAA,GAAqB,SAAC,IAAD,GAAA;AACnB,MAAA,YAAA,kBAAe,IAAI,CAAE,MAAM,CAAC,qBAA5B,CAAA;AAAA,MACA,WAAA,kBAAc,IAAI,CAAE,MAAM,CAAC,WAD3B,CAAA;AAEA,MAAA,IAAG,CAAA,cAAH;AACE,QAAA,cAAA,GAAiB,IAAjB,CAAA;eACA,QAAA,CAAS,YAAT,EAFF;OAHmB;IAAA,CAHrB,CAAA;AAAA,IASA,UAAW,CAAA,yBAAA,CAAX,GAAwC,CAAC,kBAAD,CATxC,CAAA;WAUA,UAAA,CAAW,kBAAX,EAA+B,IAA/B,EAXK;EAAA,CA7EP,CAAA;AAAA,EA0FA,UAAA,CAAW,IAAX,EAAiB,EAAjB,CA1FA,CAAA;SA4FA,OA7FmB;AAAA,CAArB,CAAA;;AAAA,MA8FM,CAAC,OAAP,GAAiB,kBA9FjB,CAAA;;;EA+FA,MAAM,CAAE,kBAAR,GAA6B;CA/F7B"
|
||||
}
|
||||
@@ -6,5 +6,5 @@
|
||||
"TestConnector.coffee"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "AACA,IAAA,CAAA;;AAAA,CAAA,GAAI,OAAA,CAAQ,YAAR,CAAJ,CAAA;;AAAA,MAEM,CAAC,OAAP,GAAiB,SAAC,SAAD,GAAA;AACf,MAAA,aAAA;SAAM;AACS,IAAA,uBAAE,MAAF,EAAW,EAAX,EAAgB,kBAAhB,GAAA;AACX,UAAA,gCAAA;AAAA,MADY,IAAC,CAAA,SAAA,MACb,CAAA;AAAA,MADqB,IAAC,CAAA,KAAA,EACtB,CAAA;AAAA,MAD0B,IAAC,CAAA,qBAAA,kBAC3B,CAAA;AAAA,MAAA,KAAA,GAAQ,CAAA,SAAA,KAAA,GAAA;eAAA,SAAC,CAAD,GAAA;iBACN,KAAC,CAAA,IAAD,CAAM,CAAN,EADM;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAAR,CAAA;AAAA,MAEA,IAAC,CAAA,kBAAkB,CAAC,IAApB,CAAyB,KAAzB,CAFA,CAAA;AAAA,MAIA,IAAC,CAAA,kBAAD,GAAsB,EAJtB,CAAA;AAAA,MAKA,yBAAA,GAA4B,CAAA,SAAA,KAAA,GAAA;eAAA,SAAC,CAAD,GAAA;iBAC1B,KAAC,CAAA,kBAAkB,CAAC,IAApB,CAAyB,CAAzB,EAD0B;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAL5B,CAAA;AAAA,MAOA,IAAC,CAAA,kBAAkB,CAAC,IAApB,CAAyB,yBAAzB,CAPA,CAAA;AAQA,MAAA,IAAG,CAAA,sBAAK,SAAS,CAAE,gBAAX,KAAqB,CAAtB,CAAP;AACE,QAAA,IAAC,CAAA,MAAM,CAAC,QAAR,CAAiB,SAAU,CAAA,CAAA,CAAE,CAAC,gBAAb,CAAA,CAA+B,CAAC,MAAhC,CAAA,CAAjB,CAAA,CADF;OARA;AAAA,MAWA,IAAC,CAAA,UAAD,GAAc,EAXd,CADW;IAAA,CAAb;;AAAA,4BAcA,sBAAA,GAAwB,SAAA,GAAA;aACtB,IAAC,CAAA,mBADqB;IAAA,CAdxB,CAAA;;AAAA,4BAiBA,cAAA,GAAgB,SAAA,GAAA;AACd,MAAA,IAAG,SAAS,CAAC,MAAV,GAAmB,CAAtB;eACE,SAAU,CAAA,CAAA,CAAE,CAAC,cAAb,CAAA,CAA6B,CAAC,MAA9B,CAAA,EADF;OADc;IAAA,CAjBhB,CAAA;;AAAA,4BAqBA,IAAA,GAAM,SAAC,CAAD,GAAA;AACJ,UAAA,wBAAA;AAAA,MAAA,IAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAN,KAAiB,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,CAAlB,CAAA,IAAuC,CAAC,MAAA,CAAA,CAAQ,CAAC,GAAG,CAAC,SAAb,KAA4B,QAA7B,CAA1C;AACE;aAAA,gDAAA;+BAAA;AACE,UAAA,IAAG,IAAI,CAAC,SAAL,CAAA,CAAA,KAAsB,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,CAAzB;0BACE,IAAI,CAAC,YAAL,CAAA,CAAmB,CAAC,OAApB,CAA4B,CAA5B,GADF;WAAA,MAAA;kCAAA;WADF;AAAA;wBADF;OADI;IAAA,CArBN,CAAA;;AAAA,4BA2BA,OAAA,GAAS,SAAC,CAAD,GAAA;AACP,UAAA,YAAA;;uBAA0B;OAA1B;aACA,IAAC,CAAA,UAAW,CAAA,CAAC,CAAC,OAAF,CAAU,CAAC,IAAvB,CAA4B,CAA5B,EAFO;IAAA,CA3BT,CAAA;;AAAA,4BA+BA,QAAA,GAAU,SAAC,IAAD,GAAA;AACR,UAAA,IAAA;AAAA,MAAA,kDAAoB,CAAE,gBAAnB,GAA4B,CAA/B;eACE,IAAC,CAAA,MAAM,CAAC,OAAR,CAAgB,IAAC,CAAA,UAAW,CAAA,IAAA,CAAK,CAAC,KAAlB,CAAA,CAAhB,EADF;OADQ;IAAA,CA/BV,CAAA;;AAAA,4BAmCA,cAAA,GAAgB,SAAA,GAAA;aACd,IAAC,CAAA,QAAD,CAAW,CAAC,CAAC,MAAF,CAAS,CAAT,EAAa,SAAS,CAAC,MAAV,GAAiB,CAA9B,CAAX,EADc;IAAA,CAnChB,CAAA;;AAAA,4BAsCA,QAAA,GAAU,SAAA,GAAA;AACR,UAAA,YAAA;AAAA;AAAA,WAAA,SAAA;sBAAA;AACE,QAAA,IAAC,CAAA,MAAM,CAAC,QAAR,CAAiB,GAAjB,CAAA,CADF;AAAA,OAAA;aAEA,IAAC,CAAA,UAAD,GAAc,GAHN;IAAA,CAtCV,CAAA;;AAAA,4BA0CA,IAAA,GAAM,SAAA,GAAA;AACJ,YAAU,IAAA,KAAA,CAAM,uBAAN,CAAV,CADI;IAAA,CA1CN,CAAA;;yBAAA;;OAFa;AAAA,CAFjB,CAAA"
|
||||
"mappings": "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"
|
||||
}
|
||||
@@ -6,5 +6,5 @@
|
||||
"Engine.coffee"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "AACA,IAAA,MAAA;;AAAA;AACe,EAAA,gBAAE,EAAF,EAAO,MAAP,GAAA;AACX,IADY,IAAC,CAAA,KAAA,EACb,CAAA;AAAA,IADiB,IAAC,CAAA,SAAA,MAClB,CAAA;AAAA,IAAA,IAAC,CAAA,eAAD,GAAmB,EAAnB,CADW;EAAA,CAAb;;AAAA,mBAGA,cAAA,GAAgB,SAAC,IAAD,GAAA;AACd,QAAA,UAAA;AAAA,IAAA,UAAA,GAAa,IAAC,CAAA,MAAO,CAAA,IAAI,CAAC,IAAL,CAArB,CAAA;AACA,IAAA,IAAG,kBAAH;aACE,UAAA,CAAW,IAAX,EADF;KAAA,MAAA;AAGE,YAAU,IAAA,KAAA,CAAO,0CAAA,GAAyC,IAAI,CAAC,IAA9C,GAAoD,mBAApD,GAAsE,CAAA,IAAI,CAAC,SAAL,CAAe,IAAf,CAAA,CAAtE,GAA2F,GAAlG,CAAV,CAHF;KAFc;EAAA,CAHhB,CAAA;;AAAA,mBAWA,QAAA,GAAU,SAAC,QAAD,GAAA;AACR,QAAA,sCAAA;AAAA,IAAA,GAAA,GAAM,EAAN,CAAA;AACA,SAAA,+CAAA;uBAAA;AACE,MAAA,GAAG,CAAC,IAAJ,CAAS,IAAC,CAAA,cAAD,CAAgB,CAAhB,CAAT,CAAA,CADF;AAAA,KADA;AAGA,SAAA,4CAAA;kBAAA;AACE,MAAA,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,CAAjB,CAAA,CADF;AAAA,KAHA;AAKA,SAAA,4CAAA;kBAAA;AACE,MAAA,IAAG,CAAA,CAAK,CAAC,OAAF,CAAA,CAAP;AACE,QAAA,IAAC,CAAA,eAAe,CAAC,IAAjB,CAAsB,CAAtB,CAAA,CADF;OADF;AAAA,KALA;WAQA,IAAC,CAAA,OAAD,CAAA,EATQ;EAAA,CAXV,CAAA;;AAAA,mBAsBA,OAAA,GAAS,SAAA,GAAA;AACP,QAAA,qDAAA;AAAA;WAAM,IAAN,GAAA;AACE,MAAA,UAAA,GAAa,IAAC,CAAA,eAAe,CAAC,MAA9B,CAAA;AAAA,MACA,WAAA,GAAc,EADd,CAAA;AAEA;AAAA,WAAA,2CAAA;sBAAA;AACE,QAAA,IAAG,CAAA,EAAM,CAAC,OAAH,CAAA,CAAP;AACE,UAAA,WAAW,CAAC,IAAZ,CAAiB,EAAjB,CAAA,CADF;SADF;AAAA,OAFA;AAAA,MAKA,IAAC,CAAA,eAAD,GAAmB,WALnB,CAAA;AAMA,MAAA,IAAG,IAAC,CAAA,eAAe,CAAC,MAAjB,KAA2B,UAA9B;AACE,cADF;OAAA,MAAA;8BAAA;OAPF;IAAA,CAAA;oBADO;EAAA,CAtBT,CAAA;;AAAA,mBAiCA,OAAA,GAAS,SAAC,OAAD,GAAA;AAEP,QAAA,CAAA;AAAA,IAAA,CAAA,GAAI,IAAC,CAAA,cAAD,CAAgB,OAAhB,CAAJ,CAAA;AAAA,IACA,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,CAAjB,CADA,CAAA;AAEA,IAAA,IAAG,CAAA,CAAK,CAAC,OAAF,CAAA,CAAP;AACE,MAAA,IAAC,CAAA,eAAe,CAAC,IAAjB,CAAsB,CAAtB,CAAA,CADF;KAFA;WAIA,IAAC,CAAA,OAAD,CAAA,EANO;EAAA,CAjCT,CAAA;;gBAAA;;IADF,CAAA;;AAAA,MA6CM,CAAC,OAAP,GAAiB,MA7CjB,CAAA"
|
||||
"mappings": "AAIA,IAAA,MAAA;;AAAA;AACe,EAAA,gBAAE,EAAF,EAAO,MAAP,GAAA;AACX,IADY,IAAC,CAAA,KAAA,EACb,CAAA;AAAA,IADiB,IAAC,CAAA,SAAA,MAClB,CAAA;AAAA,IAAA,IAAC,CAAA,eAAD,GAAmB,EAAnB,CADW;EAAA,CAAb;;AAAA,mBAGA,cAAA,GAAgB,SAAC,IAAD,GAAA;AACd,QAAA,UAAA;AAAA,IAAA,UAAA,GAAa,IAAC,CAAA,MAAO,CAAA,IAAI,CAAC,IAAL,CAArB,CAAA;AACA,IAAA,IAAG,kBAAH;aACE,UAAA,CAAW,IAAX,EADF;KAAA,MAAA;AAGE,YAAU,IAAA,KAAA,CAAO,0CAAA,GAAyC,IAAI,CAAC,IAA9C,GAAoD,mBAApD,GAAsE,CAAA,IAAI,CAAC,SAAL,CAAe,IAAf,CAAA,CAAtE,GAA2F,GAAlG,CAAV,CAHF;KAFc;EAAA,CAHhB,CAAA;;AAAA,mBAUA,QAAA,GAAU,SAAC,QAAD,GAAA;AACR,QAAA,sCAAA;AAAA,IAAA,GAAA,GAAM,EAAN,CAAA;AACA,SAAA,+CAAA;uBAAA;AACE,MAAA,GAAG,CAAC,IAAJ,CAAS,IAAC,CAAA,cAAD,CAAgB,CAAhB,CAAT,CAAA,CADF;AAAA,KADA;AAGA,SAAA,4CAAA;kBAAA;AACE,MAAA,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,CAAjB,CAAA,CADF;AAAA,KAHA;AAKA,SAAA,4CAAA;kBAAA;AACE,MAAA,IAAG,CAAA,CAAK,CAAC,OAAF,CAAA,CAAP;AACE,QAAA,IAAC,CAAA,eAAe,CAAC,IAAjB,CAAsB,CAAtB,CAAA,CADF;OADF;AAAA,KALA;WAQA,IAAC,CAAA,OAAD,CAAA,EATQ;EAAA,CAVV,CAAA;;AAAA,mBAqBA,OAAA,GAAS,SAAA,GAAA;AACP,QAAA,qDAAA;AAAA;WAAM,IAAN,GAAA;AACE,MAAA,UAAA,GAAa,IAAC,CAAA,eAAe,CAAC,MAA9B,CAAA;AAAA,MACA,WAAA,GAAc,EADd,CAAA;AAEA;AAAA,WAAA,2CAAA;sBAAA;AACE,QAAA,IAAG,CAAA,EAAM,CAAC,OAAH,CAAA,CAAP;AACE,UAAA,WAAW,CAAC,IAAZ,CAAiB,EAAjB,CAAA,CADF;SADF;AAAA,OAFA;AAAA,MAKA,IAAC,CAAA,eAAD,GAAmB,WALnB,CAAA;AAMA,MAAA,IAAG,IAAC,CAAA,eAAe,CAAC,MAAjB,KAA2B,UAA9B;AACE,cADF;OAAA,MAAA;8BAAA;OAPF;IAAA,CAAA;oBADO;EAAA,CArBT,CAAA;;AAAA,mBAgCA,OAAA,GAAS,SAAC,OAAD,GAAA;AAEP,QAAA,CAAA;AAAA,IAAA,CAAA,GAAI,IAAC,CAAA,cAAD,CAAgB,OAAhB,CAAJ,CAAA;AAAA,IACA,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,CAAjB,CADA,CAAA;AAEA,IAAA,IAAG,CAAA,CAAK,CAAC,OAAF,CAAA,CAAP;AACE,MAAA,IAAC,CAAA,eAAe,CAAC,IAAjB,CAAsB,CAAtB,CAAA,CADF;KAFA;WAIA,IAAC,CAAA,OAAD,CAAA,EANO;EAAA,CAhCT,CAAA;;gBAAA;;IADF,CAAA;;AAAA,MA4CM,CAAC,OAAP,GAAiB,MA5CjB,CAAA"
|
||||
}
|
||||
@@ -6,5 +6,5 @@
|
||||
"JsonYatta.coffee"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "AACA,IAAA,0DAAA;;AAAA,wBAAA,GAA2B,OAAA,CAAQ,2BAAR,CAA3B,CAAA;;AAAA,aACA,GAAgB,OAAA,CAAQ,yBAAR,CADhB,CAAA;;AAAA,MAEA,GAAS,OAAA,CAAQ,kBAAR,CAFT,CAAA;;AAAA;AAKe,EAAA,mBAAC,OAAD,EAAU,SAAV,GAAA;AACX,QAAA,iCAAA;AAAA,IAAA,IAAC,CAAA,EAAD,GAAU,IAAA,aAAA,CAAc,OAAd,CAAV,CAAA;AAAA,IACA,UAAA,GAAa,wBAAA,CAAyB,IAAC,CAAA,EAA1B,CADb,CAAA;AAAA,IAEA,IAAC,CAAA,MAAD,GAAc,IAAA,MAAA,CAAO,IAAC,CAAA,EAAR,EAAY,UAAU,CAAC,MAAvB,CAFd,CAAA;AAAA,IAGA,IAAC,CAAA,SAAD,GAAiB,IAAA,SAAA,CAAU,IAAC,CAAA,MAAX,EAAmB,IAAC,CAAA,EAApB,EAAwB,UAAU,CAAC,kBAAnC,EAAuD,IAAvD,CAHjB,CAAA;AAAA,IAIA,SAAA,GAAY,IAAC,CAAA,SAAS,CAAC,cAAX,CAAA,CAJZ,CAAA;AAKA,IAAA,IAAO,iBAAP;AACE,MAAA,UAAA,GAAiB,IAAA,UAAU,CAAC,KAAK,CAAC,QAAjB,CAA0B,IAAC,CAAA,EAAE,CAAC,0BAAJ,CAAA,CAA1B,CAAjB,CAAA;AAAA,MACA,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,UAAjB,CADA,CAAA;AAAA,MAEA,UAAU,CAAC,OAAX,CAAA,CAFA,CAAA;AAAA,MAGA,IAAC,CAAA,YAAD,GAAgB,UAHhB,CADF;KAAA,MAAA;AAME,MAAA,IAAC,CAAA,YAAD,GAAgB,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,SAAjB,CAAhB,CANF;KANW;EAAA,CAAb;;AAAA,sBAcA,cAAA,GAAgB,SAAA,GAAA;WACd,IAAC,CAAA,aADa;EAAA,CAdhB,CAAA;;AAAA,sBAiBA,SAAA,GAAW,SAAA,GAAA;WACT,IAAC,CAAA,OADQ;EAAA,CAjBX,CAAA;;AAAA,sBAoBA,YAAA,GAAc,SAAA,GAAA;WACZ,IAAC,CAAA,UADW;EAAA,CApBd,CAAA;;AAAA,sBAuBA,gBAAA,GAAkB,SAAA,GAAA;WAChB,IAAC,CAAA,GADe;EAAA,CAvBlB,CAAA;;AAAA,sBA0BA,SAAA,GAAW,SAAA,GAAA;WACT,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,EADS;EAAA,CA1BX,CAAA;;AAAA,sBA6BA,GAAA,GAAK,SAAC,IAAD,EAAO,OAAP,GAAA;WACH,IAAC,CAAA,YAAY,CAAC,GAAd,CAAkB,IAAlB,EAAwB,OAAxB,EADG;EAAA,CA7BL,CAAA;;mBAAA;;IALF,CAAA;;;EAqCA,MAAM,CAAE,SAAR,GAAoB;CArCpB;;AAAA,MAsCM,CAAC,OAAP,GAAiB,SAtCjB,CAAA"
|
||||
"mappings": "AACA,IAAA,0DAAA;;AAAA,wBAAA,GAA2B,OAAA,CAAQ,2BAAR,CAA3B,CAAA;;AAAA,aACA,GAAgB,OAAA,CAAQ,yBAAR,CADhB,CAAA;;AAAA,MAEA,GAAS,OAAA,CAAQ,kBAAR,CAFT,CAAA;;AAAA;AAQe,EAAA,mBAAC,OAAD,EAAU,SAAV,GAAA;AACX,QAAA,iCAAA;AAAA,IAAA,IAAC,CAAA,EAAD,GAAU,IAAA,aAAA,CAAc,OAAd,CAAV,CAAA;AAAA,IACA,UAAA,GAAa,wBAAA,CAAyB,IAAC,CAAA,EAA1B,CADb,CAAA;AAAA,IAEA,IAAC,CAAA,MAAD,GAAc,IAAA,MAAA,CAAO,IAAC,CAAA,EAAR,EAAY,UAAU,CAAC,MAAvB,CAFd,CAAA;AAAA,IAGA,IAAC,CAAA,SAAD,GAAiB,IAAA,SAAA,CAAU,IAAC,CAAA,MAAX,EAAmB,IAAC,CAAA,EAApB,EAAwB,UAAU,CAAC,kBAAnC,EAAuD,IAAvD,CAHjB,CAAA;AAAA,IAIA,SAAA,GAAY,IAAC,CAAA,SAAS,CAAC,cAAX,CAAA,CAJZ,CAAA;AAKA,IAAA,IAAO,iBAAP;AACE,MAAA,UAAA,GAAiB,IAAA,UAAU,CAAC,KAAK,CAAC,QAAjB,CAA0B,IAAC,CAAA,EAAE,CAAC,0BAAJ,CAAA,CAA1B,CAAjB,CAAA;AAAA,MACA,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,UAAjB,CADA,CAAA;AAAA,MAEA,UAAU,CAAC,OAAX,CAAA,CAFA,CAAA;AAAA,MAGA,IAAC,CAAA,YAAD,GAAgB,UAHhB,CADF;KAAA,MAAA;AAME,MAAA,IAAC,CAAA,YAAD,GAAgB,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,SAAjB,CAAhB,CANF;KANW;EAAA,CAAb;;AAAA,sBAcA,cAAA,GAAgB,SAAA,GAAA;WACd,IAAC,CAAA,aADa;EAAA,CAdhB,CAAA;;AAAA,sBAiBA,SAAA,GAAW,SAAA,GAAA;WACT,IAAC,CAAA,OADQ;EAAA,CAjBX,CAAA;;AAAA,sBAoBA,YAAA,GAAc,SAAA,GAAA;WACZ,IAAC,CAAA,UADW;EAAA,CApBd,CAAA;;AAAA,sBAuBA,gBAAA,GAAkB,SAAA,GAAA;WAChB,IAAC,CAAA,GADe;EAAA,CAvBlB,CAAA;;AAAA,sBA0BA,SAAA,GAAW,SAAA,GAAA;WACT,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,EADS;EAAA,CA1BX,CAAA;;AAAA,sBA6BA,GAAA,GAAK,SAAC,IAAD,EAAO,OAAP,GAAA;WACH,IAAC,CAAA,YAAY,CAAC,GAAd,CAAkB,IAAlB,EAAwB,OAAxB,EADG;EAAA,CA7BL,CAAA;;mBAAA;;IARF,CAAA;;;EAwCA,MAAM,CAAE,SAAR,GAAoB;CAxCpB;;AAAA,MAyCM,CAAC,OAAP,GAAiB,SAzCjB,CAAA"
|
||||
}
|
||||
@@ -6,5 +6,5 @@
|
||||
"TextYatta.coffee"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "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"
|
||||
"mappings": "AACA,IAAA,0DAAA;;AAAA,wBAAA,GAA2B,OAAA,CAAQ,2BAAR,CAA3B,CAAA;;AAAA,aACA,GAAgB,OAAA,CAAQ,yBAAR,CADhB,CAAA;;AAAA,MAEA,GAAS,OAAA,CAAQ,kBAAR,CAFT,CAAA;;AAAA;AAQe,EAAA,mBAAC,OAAD,EAAU,SAAV,GAAA;AACX,QAAA,iCAAA;AAAA,IAAA,IAAC,CAAA,EAAD,GAAU,IAAA,aAAA,CAAc,OAAd,CAAV,CAAA;AAAA,IACA,UAAA,GAAa,wBAAA,CAAyB,IAAC,CAAA,EAA1B,CADb,CAAA;AAAA,IAEA,IAAC,CAAA,MAAD,GAAc,IAAA,MAAA,CAAO,IAAC,CAAA,EAAR,EAAY,UAAU,CAAC,MAAvB,CAFd,CAAA;AAAA,IAGA,IAAC,CAAA,SAAD,GAAiB,IAAA,SAAA,CAAU,IAAC,CAAA,MAAX,EAAmB,IAAC,CAAA,EAApB,EAAwB,UAAU,CAAC,kBAAnC,CAHjB,CAAA;AAAA,IAIA,SAAA,GAAY,IAAC,CAAA,SAAS,CAAC,cAAX,CAAA,CAJZ,CAAA;AAKA,IAAA,IAAO,iBAAP;AACE,MAAA,UAAA,GAAiB,IAAA,UAAU,CAAC,KAAK,CAAC,IAAjB,CAAsB,IAAC,CAAA,EAAE,CAAC,0BAAJ,CAAA,CAAtB,CAAjB,CAAA;AAAA,MACA,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,UAAjB,CADA,CAAA;AAAA,MAEA,UAAU,CAAC,OAAX,CAAA,CAFA,CAAA;AAAA,MAGA,IAAC,CAAA,YAAD,GAAgB,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAqB,IAAA,UAAU,CAAC,KAAK,CAAC,cAAjB,CAAgC,UAAhC,EAA4C,IAAC,CAAA,EAAE,CAAC,0BAAJ,CAAA,CAA5C,CAArB,CAAkG,CAAC,OAAnG,CAAA,CAHhB,CADF;KAAA,MAAA;AAME,MAAA,IAAC,CAAA,YAAD,GAAgB,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,SAAjB,CAAhB,CANF;KANW;EAAA,CAAb;;AAAA,sBAcA,cAAA,GAAgB,SAAA,GAAA;WACd,IAAC,CAAA,aADa;EAAA,CAdhB,CAAA;;AAAA,sBAiBA,SAAA,GAAW,SAAA,GAAA;WACT,IAAC,CAAA,OADQ;EAAA,CAjBX,CAAA;;AAAA,sBAoBA,YAAA,GAAc,SAAA,GAAA;WACZ,IAAC,CAAA,UADW;EAAA,CApBd,CAAA;;AAAA,sBAuBA,gBAAA,GAAkB,SAAA,GAAA;WAChB,IAAC,CAAA,GADe;EAAA,CAvBlB,CAAA;;AAAA,sBA0BA,SAAA,GAAW,SAAA,GAAA;WACT,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,EADS;EAAA,CA1BX,CAAA;;AAAA,sBA6BA,GAAA,GAAK,SAAA,GAAA;WACH,IAAC,CAAA,YAAY,CAAC,GAAd,CAAA,CAAmB,CAAC,GAApB,CAAA,EADG;EAAA,CA7BL,CAAA;;AAAA,sBAgCA,UAAA,GAAY,SAAC,GAAD,EAAM,OAAN,GAAA;WACV,IAAC,CAAA,YAAY,CAAC,GAAd,CAAA,CAAmB,CAAC,UAApB,CAA+B,GAA/B,EAAoC,OAApC,EADU;EAAA,CAhCZ,CAAA;;AAAA,sBAmCA,UAAA,GAAY,SAAC,GAAD,EAAM,MAAN,GAAA;WACV,IAAC,CAAA,YAAY,CAAC,GAAd,CAAA,CAAmB,CAAC,UAApB,CAA+B,GAA/B,EAAoC,MAApC,EADU;EAAA,CAnCZ,CAAA;;AAAA,sBAsCA,WAAA,GAAa,SAAC,IAAD,GAAA;WACX,IAAC,CAAA,YAAY,CAAC,GAAd,CAAA,CAAmB,CAAC,WAApB,CAAgC,IAAhC,EADW;EAAA,CAtCb,CAAA;;mBAAA;;IARF,CAAA;;AAAA,MAkDM,CAAC,OAAP,GAAiB,SAlDjB,CAAA"
|
||||
}
|
||||
@@ -6,5 +6,5 @@
|
||||
"HistoryBuffer.coffee"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "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"
|
||||
"mappings": "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"
|
||||
}
|
||||
@@ -6,8 +6,8 @@ module.exports = function(HB) {
|
||||
parser = {};
|
||||
execution_listener = [];
|
||||
Operation = (function() {
|
||||
function Operation(_arg) {
|
||||
this.creator = _arg['creator'], this.op_number = _arg['op_number'];
|
||||
function Operation(uid) {
|
||||
this.creator = uid['creator'], this.op_number = uid['op_number'];
|
||||
}
|
||||
|
||||
Operation.prototype.getUid = function() {
|
||||
@@ -92,9 +92,9 @@ module.exports = function(HB) {
|
||||
return Delete;
|
||||
|
||||
})(Operation);
|
||||
parser['Delete'] = function(_arg) {
|
||||
parser['Delete'] = function(o) {
|
||||
var deletes_uid, uid;
|
||||
uid = _arg['uid'], deletes_uid = _arg['deletes'];
|
||||
uid = o['uid'], deletes_uid = o['deletes'];
|
||||
return new Delete(uid, deletes_uid);
|
||||
};
|
||||
Insert = (function(_super) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -32,14 +32,13 @@ module.exports = function(HB) {
|
||||
if (typeof content === 'string') {
|
||||
word = HB.addOperation(new types.Word(HB.getNextOperationIdentifier(), content)).execute();
|
||||
JsonType.__super__.val.call(this, name, word);
|
||||
return content;
|
||||
} else if (typeof content === 'object') {
|
||||
json = HB.addOperation(JsonType(HB.getNextOperationIdentifier(), content)).execute();
|
||||
JsonType.__super__.val.call(this, name, json);
|
||||
return content;
|
||||
} else {
|
||||
throw new Error("You must not set " + (typeof content) + "-types in collaborative Json-objects!");
|
||||
}
|
||||
return this;
|
||||
} else {
|
||||
return JsonType.__super__.val.call(this, name, content);
|
||||
}
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
"JsonTypes.coffee"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "AAAA,IAAA,wBAAA;EAAA;iSAAA;;AAAA,wBAAA,GAA2B,OAAA,CAAQ,oBAAR,CAA3B,CAAA;;AAAA,MAEM,CAAC,OAAP,GAAiB,SAAC,EAAD,GAAA;AACf,MAAA,mCAAA;AAAA,EAAA,UAAA,GAAa,wBAAA,CAAyB,EAAzB,CAAb,CAAA;AAAA,EACA,KAAA,GAAQ,UAAU,CAAC,KADnB,CAAA;AAAA,EAEA,MAAA,GAAS,UAAU,CAAC,MAFpB,CAAA;AAAA,EAIM;AACJ,+BAAA,CAAA;;AAAa,IAAA,kBAAC,GAAD,EAAM,aAAN,GAAA;AACX,UAAA,OAAA;AAAA,MAAA,0CAAM,GAAN,CAAA,CAAA;AACA,MAAA,IAAG,qBAAH;AACE,QAAA,IAAG,MAAA,CAAA,aAAA,KAA0B,QAA7B;AACE,gBAAU,IAAA,KAAA,CAAO,wEAAA,GAAuE,CAAA,MAAA,CAAA,aAAA,CAAvE,GAA6F,GAApG,CAAV,CADF;SAAA;AAEA,aAAA,qBAAA;kCAAA;AACE,UAAA,IAAC,CAAA,GAAD,CAAK,IAAL,EAAW,CAAX,CAAA,CADF;AAAA,SAHF;OAFW;IAAA,CAAb;;AAAA,uBAQA,GAAA,GAAK,SAAC,IAAD,EAAO,OAAP,GAAA;AACH,UAAA,UAAA;AAAA,MAAA,IAAG,cAAA,IAAU,iBAAb;AACE,QAAA,IAAG,MAAA,CAAA,OAAA,KAAkB,QAArB;AACE,UAAA,IAAA,GAAO,EAAE,CAAC,YAAH,CAAoB,IAAA,KAAK,CAAC,IAAN,CAAW,EAAE,CAAC,0BAAH,CAAA,CAAX,EAA4C,OAA5C,CAApB,CAAwE,CAAC,OAAzE,CAAA,CAAP,CAAA;AAAA,UACA,kCAAM,IAAN,EAAY,IAAZ,CADA,CAAA;iBAEA,QAHF;SAAA,MAIK,IAAG,MAAA,CAAA,OAAA,KAAkB,QAArB;AACH,UAAA,IAAA,GAAO,EAAE,CAAC,YAAH,CAAgB,QAAA,CAAS,EAAE,CAAC,0BAAH,CAAA,CAAT,EAA0C,OAA1C,CAAhB,CAAkE,CAAC,OAAnE,CAAA,CAAP,CAAA;AAAA,UACA,kCAAM,IAAN,EAAY,IAAZ,CADA,CAAA;iBAEA,QAHG;SAAA,MAAA;AAKH,gBAAU,IAAA,KAAA,CAAO,mBAAA,GAAkB,CAAA,MAAA,CAAA,OAAA,CAAlB,GAAkC,uCAAzC,CAAV,CALG;SALP;OAAA,MAAA;eAYE,kCAAM,IAAN,EAAY,OAAZ,EAZF;OADG;IAAA,CARL,CAAA;;AAAA,uBAuBA,MAAA,GAAQ,SAAA,GAAA;aACN;AAAA,QACE,MAAA,EAAS,UADX;AAAA,QAEE,KAAA,EAAQ,IAAC,CAAA,MAAD,CAAA,CAFV;QADM;IAAA,CAvBR,CAAA;;oBAAA;;KADqB,KAAK,CAAC,WAJ7B,CAAA;AAAA,EAkCA,MAAO,CAAA,UAAA,CAAP,GAAqB,SAAC,IAAD,GAAA;AACnB,QAAA,GAAA;AAAA,IACU,MACN,KADF,MADF,CAAA;WAGI,IAAA,QAAA,CAAS,GAAT,EAJe;EAAA,CAlCrB,CAAA;AAAA,EAyCA,KAAM,CAAA,UAAA,CAAN,GAAoB,QAzCpB,CAAA;SA2CA,WA5Ce;AAAA,CAFjB,CAAA"
|
||||
"mappings": "AAAA,IAAA,wBAAA;EAAA;iSAAA;;AAAA,wBAAA,GAA2B,OAAA,CAAQ,oBAAR,CAA3B,CAAA;;AAAA,MAEM,CAAC,OAAP,GAAiB,SAAC,EAAD,GAAA;AACf,MAAA,mCAAA;AAAA,EAAA,UAAA,GAAa,wBAAA,CAAyB,EAAzB,CAAb,CAAA;AAAA,EACA,KAAA,GAAQ,UAAU,CAAC,KADnB,CAAA;AAAA,EAEA,MAAA,GAAS,UAAU,CAAC,MAFpB,CAAA;AAAA,EAOM;AACJ,+BAAA,CAAA;;AAAa,IAAA,kBAAC,GAAD,EAAM,aAAN,GAAA;AACX,UAAA,OAAA;AAAA,MAAA,0CAAM,GAAN,CAAA,CAAA;AACA,MAAA,IAAG,qBAAH;AACE,QAAA,IAAG,MAAA,CAAA,aAAA,KAA0B,QAA7B;AACE,gBAAU,IAAA,KAAA,CAAO,wEAAA,GAAuE,CAAA,MAAA,CAAA,aAAA,CAAvE,GAA6F,GAApG,CAAV,CADF;SAAA;AAEA,aAAA,qBAAA;kCAAA;AACE,UAAA,IAAC,CAAA,GAAD,CAAK,IAAL,EAAW,CAAX,CAAA,CADF;AAAA,SAHF;OAFW;IAAA,CAAb;;AAAA,uBAuBA,GAAA,GAAK,SAAC,IAAD,EAAO,OAAP,GAAA;AACH,UAAA,UAAA;AAAA,MAAA,IAAG,cAAA,IAAU,iBAAb;AACE,QAAA,IAAG,MAAA,CAAA,OAAA,KAAkB,QAArB;AACE,UAAA,IAAA,GAAO,EAAE,CAAC,YAAH,CAAoB,IAAA,KAAK,CAAC,IAAN,CAAW,EAAE,CAAC,0BAAH,CAAA,CAAX,EAA4C,OAA5C,CAApB,CAAwE,CAAC,OAAzE,CAAA,CAAP,CAAA;AAAA,UACA,kCAAM,IAAN,EAAY,IAAZ,CADA,CADF;SAAA,MAGK,IAAG,MAAA,CAAA,OAAA,KAAkB,QAArB;AACH,UAAA,IAAA,GAAO,EAAE,CAAC,YAAH,CAAgB,QAAA,CAAS,EAAE,CAAC,0BAAH,CAAA,CAAT,EAA0C,OAA1C,CAAhB,CAAkE,CAAC,OAAnE,CAAA,CAAP,CAAA;AAAA,UACA,kCAAM,IAAN,EAAY,IAAZ,CADA,CADG;SAAA,MAAA;AAIH,gBAAU,IAAA,KAAA,CAAO,mBAAA,GAAkB,CAAA,MAAA,CAAA,OAAA,CAAlB,GAAkC,uCAAzC,CAAV,CAJG;SAHL;eAQA,KATF;OAAA,MAAA;eAWE,kCAAM,IAAN,EAAY,OAAZ,EAXF;OADG;IAAA,CAvBL,CAAA;;AAAA,uBAqCA,MAAA,GAAQ,SAAA,GAAA;aACN;AAAA,QACE,MAAA,EAAS,UADX;AAAA,QAEE,KAAA,EAAQ,IAAC,CAAA,MAAD,CAAA,CAFV;QADM;IAAA,CArCR,CAAA;;oBAAA;;KADqB,KAAK,CAAC,WAP7B,CAAA;AAAA,EAmDA,MAAO,CAAA,UAAA,CAAP,GAAqB,SAAC,IAAD,GAAA;AACnB,QAAA,GAAA;AAAA,IACU,MACN,KADF,MADF,CAAA;WAGI,IAAA,QAAA,CAAS,GAAT,EAJe;EAAA,CAnDrB,CAAA;AAAA,EA0DA,KAAM,CAAA,UAAA,CAAN,GAAoB,QA1DpB,CAAA;SA4DA,WA7De;AAAA,CAFjB,CAAA"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -6,5 +6,5 @@
|
||||
"TextTypes.coffee"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "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"
|
||||
"mappings": "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"
|
||||
}
|
||||
@@ -6,5 +6,5 @@
|
||||
"XmlTypes.coffee"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "AAiJkB"
|
||||
"mappings": "AAqKkB"
|
||||
}
|
||||
@@ -19,155 +19,141 @@
|
||||
|
||||
Connector_uninitialized = require("../lib/Connectors/TestConnector.coffee");
|
||||
|
||||
describe("JsonYatta", function() {
|
||||
beforeEach(function(done) {
|
||||
var i, _i, _ref;
|
||||
this.last_user = 10;
|
||||
this.users = [];
|
||||
this.Connector = Connector_uninitialized(this.users);
|
||||
for (i = _i = 0, _ref = this.last_user + 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
|
||||
this.users.push(new Yatta(i, this.Connector));
|
||||
}
|
||||
return done();
|
||||
});
|
||||
return it("can handle many engines, many operations, concurrently (random)", function() {
|
||||
var Connector, applyRandomOp, doSomething, doSomething_amount, found_error, generateDeleteOp, generateInsertOp, generateRandomOp, generateReplaceOp, i, j, number_of_created_operations, number_of_engines, number_of_test_cases_multiplier, ops, ops_per_msek, printOpsInExecutionOrder, repeat_this, time_now, times, u, user, user_number, users, _i, _j, _k, _l, _len, _m, _ref, _results;
|
||||
number_of_test_cases_multiplier = 1;
|
||||
repeat_this = 1 * number_of_test_cases_multiplier;
|
||||
doSomething_amount = 200 * number_of_test_cases_multiplier;
|
||||
number_of_engines = 12 + number_of_test_cases_multiplier - 1;
|
||||
this.time = 0;
|
||||
this.ops = 0;
|
||||
users = [];
|
||||
generateInsertOp = function(user_num) {
|
||||
var chars, length, nextchar, pos, text;
|
||||
chars = "1234567890";
|
||||
pos = _.random(0, users[user_num].val('name').length - 1);
|
||||
length = 1;
|
||||
nextchar = chars[_.random(0, chars.length - 1)];
|
||||
text = "";
|
||||
_(length).times(function() {
|
||||
return text += nextchar;
|
||||
});
|
||||
users[user_num].val('name').insertText(pos, text);
|
||||
return null;
|
||||
};
|
||||
generateReplaceOp = function(user_num) {
|
||||
var chars, length, nextchar, text;
|
||||
chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
length = _.random(0, 10);
|
||||
nextchar = chars[_.random(0, chars.length - 1)];
|
||||
text = "";
|
||||
_(length).times(function() {
|
||||
return text += nextchar;
|
||||
});
|
||||
return users[user_num].val('name').replaceText(text);
|
||||
};
|
||||
generateDeleteOp = function(user_num) {
|
||||
var length, ops1, pos;
|
||||
if (users[user_num].val('name').val().length > 0) {
|
||||
pos = _.random(0, users[user_num].val('name').val().length - 1);
|
||||
length = 1;
|
||||
ops1 = users[user_num].val('name').deleteText(pos, length);
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
generateRandomOp = function(user_num) {
|
||||
var i, op, op_gen;
|
||||
op_gen = [generateDeleteOp, generateInsertOp, generateReplaceOp];
|
||||
i = _.random(op_gen.length - 1);
|
||||
return op = op_gen[i](user_num);
|
||||
};
|
||||
applyRandomOp = function(user_num) {
|
||||
var user;
|
||||
user = users[user_num];
|
||||
return user.getConnector().flushOneRandom();
|
||||
};
|
||||
doSomething = (function() {
|
||||
return function() {
|
||||
var choice, choices, user_num;
|
||||
user_num = _.random(number_of_engines - 1);
|
||||
choices = [applyRandomOp, generateRandomOp];
|
||||
choice = _.random(choices.length - 1);
|
||||
return choices[choice](user_num);
|
||||
};
|
||||
})();
|
||||
console.log("");
|
||||
_results = [];
|
||||
for (times = _i = 1; 1 <= repeat_this ? _i <= repeat_this : _i >= repeat_this; times = 1 <= repeat_this ? ++_i : --_i) {
|
||||
users = [];
|
||||
Connector = Connector_uninitialized(users);
|
||||
users.push(new Yatta(0, Connector));
|
||||
users[0].val('name', "initial");
|
||||
for (i = _j = 1; 1 <= number_of_engines ? _j < number_of_engines : _j > number_of_engines; i = 1 <= number_of_engines ? ++_j : --_j) {
|
||||
users.push(new Yatta(i, Connector));
|
||||
}
|
||||
found_error = false;
|
||||
time_now = (new Date).getTime();
|
||||
for (i = _k = 1; 1 <= doSomething_amount ? _k <= doSomething_amount : _k >= doSomething_amount; i = 1 <= doSomething_amount ? ++_k : --_k) {
|
||||
doSomething();
|
||||
}
|
||||
for (user_number = _l = 0, _len = users.length; _l < _len; user_number = ++_l) {
|
||||
user = users[user_number];
|
||||
user.getConnector().flushAll();
|
||||
}
|
||||
this.time += (new Date()).getTime() - time_now;
|
||||
number_of_created_operations = 0;
|
||||
for (i = _m = 0, _ref = users.length; 0 <= _ref ? _m < _ref : _m > _ref; i = 0 <= _ref ? ++_m : --_m) {
|
||||
number_of_created_operations += users[i].getConnector().getOpsInExecutionOrder().length;
|
||||
}
|
||||
this.ops += number_of_created_operations * users.length;
|
||||
ops_per_msek = Math.floor(this.ops / this.time);
|
||||
console.log(("" + times + "/" + repeat_this + ": Every collaborator (" + users.length + ") applied " + number_of_created_operations + " ops in a different order.") + (" Over all we consumed " + this.ops + " operations in " + (this.time / 1000) + " seconds (" + ops_per_msek + " ops/msek)."));
|
||||
console.log(users[0].val('name').val());
|
||||
_results.push((function() {
|
||||
var _len1, _n, _o, _ref1, _results1;
|
||||
_results1 = [];
|
||||
for (i = _n = 0, _ref1 = users.length - 1; 0 <= _ref1 ? _n < _ref1 : _n > _ref1; i = 0 <= _ref1 ? ++_n : --_n) {
|
||||
if (users[i].val('name').val() !== users[i + 1].val('name').val()) {
|
||||
printOpsInExecutionOrder = function(otnumber, otherotnumber) {
|
||||
var j, o, ops, s, _len1, _len2, _o, _p;
|
||||
ops = users[otnumber].getConnector().getOpsInExecutionOrder();
|
||||
for (_o = 0, _len1 = ops.length; _o < _len1; _o++) {
|
||||
s = ops[_o];
|
||||
console.log(JSON.stringify(s));
|
||||
}
|
||||
console.log("");
|
||||
s = "ops = [";
|
||||
for (j = _p = 0, _len2 = ops.length; _p < _len2; j = ++_p) {
|
||||
o = ops[j];
|
||||
if (j !== 0) {
|
||||
s += ", ";
|
||||
}
|
||||
s += "op" + j;
|
||||
}
|
||||
s += "]";
|
||||
console.log(s);
|
||||
console.log("@users[@last_user].ot.applyOps ops");
|
||||
console.log("expect(@users[@last_user].ot.val('name')).to.equal(\"" + (users[otherotnumber].val('name')) + "\")");
|
||||
return ops;
|
||||
};
|
||||
console.log("");
|
||||
console.log("Found an OT Puzzle!");
|
||||
console.log("OT states:");
|
||||
for (j = _o = 0, _len1 = users.length; _o < _len1; j = ++_o) {
|
||||
u = users[j];
|
||||
console.log(("OT" + j + ": ") + u.val('name'));
|
||||
}
|
||||
console.log("\nOT execution order (" + i + "," + (i + 1) + "):");
|
||||
printOpsInExecutionOrder(i, i + 1);
|
||||
console.log("");
|
||||
ops = printOpsInExecutionOrder(i + 1, i);
|
||||
_results1.push(console.log(""));
|
||||
} else {
|
||||
_results1.push(void 0);
|
||||
}
|
||||
}
|
||||
return _results1;
|
||||
})());
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
describe "JsonYatta", ->
|
||||
beforeEach (done)->
|
||||
@last_user = 10
|
||||
@users = []
|
||||
@Connector = Connector_uninitialized @users
|
||||
for i in [0..(@last_user+1)]
|
||||
@users.push(new Yatta i, @Connector)
|
||||
|
||||
|
||||
done()
|
||||
|
||||
it "can handle many engines, many operations, concurrently (random)", ->
|
||||
number_of_test_cases_multiplier = 1
|
||||
repeat_this = 100 * number_of_test_cases_multiplier
|
||||
doSomething_amount = 200 * number_of_test_cases_multiplier
|
||||
number_of_engines = 12 + number_of_test_cases_multiplier - 1
|
||||
|
||||
@time = 0
|
||||
@ops = 0
|
||||
|
||||
users = []
|
||||
|
||||
generateInsertOp = (user_num)->
|
||||
chars = "1234567890"
|
||||
|
||||
pos = _.random 0, (users[user_num].val('name').length-1)
|
||||
length = 1 #_.random 0, 10
|
||||
|
||||
nextchar = chars[(_.random 0, (chars.length-1))]
|
||||
|
||||
text = ""
|
||||
_(length).times ()-> text += nextchar
|
||||
|
||||
users[user_num].val('name').insertText pos, text
|
||||
null
|
||||
|
||||
generateReplaceOp = (user_num)->
|
||||
chars = "abcdefghijklmnopqrstuvwxyz"
|
||||
length = _.random 0, 10
|
||||
|
||||
nextchar = chars[(_.random 0, (chars.length-1))]
|
||||
|
||||
text = ""
|
||||
_(length).times ()-> text += nextchar
|
||||
users[user_num].val('name').replaceText text
|
||||
|
||||
generateDeleteOp = (user_num)->
|
||||
if users[user_num].val('name').val().length > 0
|
||||
pos = _.random 0, (users[user_num].val('name').val().length-1)
|
||||
length = 1 # _.random 0, ot.val('name').length - pos
|
||||
ops1 = users[user_num].val('name').deleteText pos, length
|
||||
undefined
|
||||
|
||||
generateRandomOp = (user_num)->
|
||||
op_gen = [generateDeleteOp, generateInsertOp, generateReplaceOp]
|
||||
i = _.random (op_gen.length - 1)
|
||||
op = op_gen[i](user_num)
|
||||
|
||||
applyRandomOp = (user_num)->
|
||||
user = users[user_num]
|
||||
user.getConnector().flushOneRandom()
|
||||
|
||||
doSomething = do ()->
|
||||
()->
|
||||
user_num = _.random (number_of_engines-1)
|
||||
choices = [applyRandomOp, generateRandomOp]
|
||||
*if (users[user_num].buffer[user_num].length < maximum_ops_per_engine)
|
||||
* choices = choices.concat generateRandomOp
|
||||
|
||||
choice = _.random (choices.length-1)
|
||||
|
||||
choices[choice](user_num)
|
||||
|
||||
console.log ""
|
||||
for times in [1..repeat_this]
|
||||
*console.log "repeated_this x #{times} times"
|
||||
users = []
|
||||
Connector = Connector_uninitialized users
|
||||
users.push(new Yatta 0, Connector)
|
||||
users[0].val('name',"initial")
|
||||
for i in [1...number_of_engines]
|
||||
users.push(new Yatta i, Connector)
|
||||
|
||||
found_error = false
|
||||
|
||||
*try
|
||||
time_now = (new Date).getTime()
|
||||
for i in [1..doSomething_amount]
|
||||
doSomething()
|
||||
|
||||
for user,user_number in users
|
||||
user.getConnector().flushAll()
|
||||
|
||||
@time += (new Date()).getTime() - time_now
|
||||
|
||||
number_of_created_operations = 0
|
||||
for i in [0...(users.length)]
|
||||
number_of_created_operations += users[i].getConnector().getOpsInExecutionOrder().length
|
||||
@ops += number_of_created_operations*users.length
|
||||
|
||||
ops_per_msek = Math.floor(@ops/@time)
|
||||
console.log "#{times}/#{repeat_this}: Every collaborator (#{users.length}) applied #{number_of_created_operations} ops in a different order." + " Over all we consumed #{@ops} operations in #{@time/1000} seconds (#{ops_per_msek} ops/msek)."
|
||||
|
||||
console.log users[0].val('name').val()
|
||||
for i in [0...(users.length-1)]
|
||||
if ((users[i].val('name').val() isnt users[i+1].val('name').val()) )# and (number_of_created_operations <= 6 or true)) or found_error
|
||||
|
||||
printOpsInExecutionOrder = (otnumber, otherotnumber)->
|
||||
ops = users[otnumber].getConnector().getOpsInExecutionOrder()
|
||||
for s in ops
|
||||
console.log JSON.stringify s
|
||||
console.log ""
|
||||
s = "ops = ["
|
||||
for o,j in ops
|
||||
if j isnt 0
|
||||
s += ", "
|
||||
s += "op#{j}"
|
||||
s += "]"
|
||||
console.log s
|
||||
console.log "@users[@last_user].ot.applyOps ops"
|
||||
console.log "expect(@users[@last_user].ot.val('name')).to.equal(\"#{users[otherotnumber].val('name')}\")"
|
||||
ops
|
||||
console.log ""
|
||||
console.log "Found an OT Puzzle!"
|
||||
console.log "OT states:"
|
||||
for u,j in users
|
||||
console.log "OT#{j}: "+u.val('name')
|
||||
console.log "\nOT execution order (#{i},#{i+1}):"
|
||||
printOpsInExecutionOrder i, i+1
|
||||
console.log ""
|
||||
ops = printOpsInExecutionOrder i+1, i
|
||||
|
||||
console.log ""
|
||||
*/
|
||||
|
||||
}).call(this);
|
||||
|
||||
@@ -19,154 +19,145 @@
|
||||
|
||||
Connector_uninitialized = require("../lib/Connectors/TestConnector.coffee");
|
||||
|
||||
describe("TextYatta", function() {
|
||||
beforeEach(function(done) {
|
||||
var i, _i, _ref;
|
||||
this.last_user = 10;
|
||||
this.users = [];
|
||||
this.Connector = Connector_uninitialized(this.users);
|
||||
for (i = _i = 0, _ref = this.last_user + 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
|
||||
this.users.push(new Yatta(i, this.Connector));
|
||||
}
|
||||
return done();
|
||||
});
|
||||
it("handles inserts correctly", function() {});
|
||||
return it("can handle many engines, many operations, concurrently (random)", function() {
|
||||
var Connector, applyRandomOp, doSomething, doSomething_amount, found_error, found_inconsistency, generateDeleteOp, generateInsertOp, generateRandomOp, generateReplaceOp, i, j, number_of_created_operations, number_of_engines, number_of_test_cases_multiplier, ops, ops_per_msek, printOpsInExecutionOrder, repeat_this, time_now, times, u, user, user_number, users, _i, _j, _k, _l, _len, _len1, _m, _n, _o, _ref, _ref1, _results;
|
||||
number_of_test_cases_multiplier = 1;
|
||||
repeat_this = 1 * number_of_test_cases_multiplier;
|
||||
doSomething_amount = 500 * number_of_test_cases_multiplier;
|
||||
number_of_engines = 12 + number_of_test_cases_multiplier - 1;
|
||||
this.time = 0;
|
||||
this.ops = 0;
|
||||
users = [];
|
||||
generateInsertOp = function(user_num) {
|
||||
var chars, length, nextchar, pos, text;
|
||||
chars = "1234567890";
|
||||
pos = _.random(0, users[user_num].val().length - 1);
|
||||
length = 1;
|
||||
nextchar = chars[_.random(0, chars.length - 1)];
|
||||
text = "";
|
||||
_(length).times(function() {
|
||||
return text += nextchar;
|
||||
});
|
||||
users[user_num].insertText(pos, text);
|
||||
return null;
|
||||
};
|
||||
generateReplaceOp = function(user_num) {
|
||||
var chars, length, nextchar, text;
|
||||
chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
length = _.random(0, 10);
|
||||
nextchar = chars[_.random(0, chars.length - 1)];
|
||||
text = "";
|
||||
_(length).times(function() {
|
||||
return text += nextchar;
|
||||
});
|
||||
return users[user_num].replaceText(text);
|
||||
};
|
||||
generateDeleteOp = function(user_num) {
|
||||
var length, ops1, pos;
|
||||
if (users[user_num].val().length > 0) {
|
||||
pos = _.random(0, users[user_num].val().length - 1);
|
||||
length = 1;
|
||||
ops1 = users[user_num].deleteText(pos, length);
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
generateRandomOp = function(user_num) {
|
||||
var i, op, op_gen;
|
||||
op_gen = [generateDeleteOp, generateInsertOp, generateReplaceOp];
|
||||
i = _.random(op_gen.length - 1);
|
||||
return op = op_gen[i](user_num);
|
||||
};
|
||||
applyRandomOp = function(user_num) {
|
||||
var user;
|
||||
user = users[user_num];
|
||||
return user.getConnector().flushOneRandom();
|
||||
};
|
||||
doSomething = (function() {
|
||||
return function() {
|
||||
var choice, choices, user_num;
|
||||
user_num = _.random(number_of_engines - 1);
|
||||
choices = [applyRandomOp, generateRandomOp];
|
||||
choice = _.random(choices.length - 1);
|
||||
return choices[choice](user_num);
|
||||
};
|
||||
})();
|
||||
console.log("");
|
||||
_results = [];
|
||||
for (times = _i = 1; 1 <= repeat_this ? _i <= repeat_this : _i >= repeat_this; times = 1 <= repeat_this ? ++_i : --_i) {
|
||||
users = [];
|
||||
Connector = Connector_uninitialized(users);
|
||||
for (i = _j = 0; 0 <= number_of_engines ? _j <= number_of_engines : _j >= number_of_engines; i = 0 <= number_of_engines ? ++_j : --_j) {
|
||||
users.push(new Yatta(i, Connector));
|
||||
}
|
||||
found_error = false;
|
||||
time_now = (new Date).getTime();
|
||||
for (i = _k = 1; 1 <= doSomething_amount ? _k <= doSomething_amount : _k >= doSomething_amount; i = 1 <= doSomething_amount ? ++_k : --_k) {
|
||||
doSomething();
|
||||
}
|
||||
for (user_number = _l = 0, _len = users.length; _l < _len; user_number = ++_l) {
|
||||
user = users[user_number];
|
||||
user.getConnector().flushAll();
|
||||
}
|
||||
this.time += (new Date()).getTime() - time_now;
|
||||
number_of_created_operations = 0;
|
||||
for (i = _m = 0, _ref = users.length; 0 <= _ref ? _m < _ref : _m > _ref; i = 0 <= _ref ? ++_m : --_m) {
|
||||
number_of_created_operations += users[i].getConnector().getOpsInExecutionOrder().length;
|
||||
}
|
||||
this.ops += number_of_created_operations * users.length;
|
||||
ops_per_msek = Math.floor(this.ops / this.time);
|
||||
console.log(("" + times + "/" + repeat_this + ": Every collaborator (" + users.length + ") applied " + number_of_created_operations + " ops in a different order.") + (" Over all we consumed " + this.ops + " operations in " + (this.time / 1000) + " seconds (" + ops_per_msek + " ops/msek)."));
|
||||
console.log(users[0].val());
|
||||
found_inconsistency = false;
|
||||
for (i = _n = 0, _ref1 = users.length - 1; 0 <= _ref1 ? _n < _ref1 : _n > _ref1; i = 0 <= _ref1 ? ++_n : --_n) {
|
||||
if (users[i].val() !== users[i + 1].val()) {
|
||||
found_inconsistency = true;
|
||||
printOpsInExecutionOrder = function(otnumber, otherotnumber) {
|
||||
var j, o, ops, s, _len1, _len2, _o, _p;
|
||||
ops = users[otnumber].getConnector().getOpsInExecutionOrder();
|
||||
for (j = _o = 0, _len1 = ops.length; _o < _len1; j = ++_o) {
|
||||
s = ops[j];
|
||||
console.log("op" + j + " = " + (JSON.stringify(s)));
|
||||
}
|
||||
console.log("");
|
||||
s = "ops = [";
|
||||
for (j = _p = 0, _len2 = ops.length; _p < _len2; j = ++_p) {
|
||||
o = ops[j];
|
||||
if (j !== 0) {
|
||||
s += ", ";
|
||||
}
|
||||
s += "op" + j;
|
||||
}
|
||||
s += "]";
|
||||
console.log(s);
|
||||
console.log("@users[@last_user].ot.applyOps ops");
|
||||
console.log("expect(@users[@last_user].val()).to.equal(\"" + (users[otherotnumber].val()) + "\")");
|
||||
return ops;
|
||||
};
|
||||
console.log("");
|
||||
console.log("Found an OT Puzzle!");
|
||||
console.log("OT states:");
|
||||
for (j = _o = 0, _len1 = users.length; _o < _len1; j = ++_o) {
|
||||
u = users[j];
|
||||
console.log(("OT" + j + ": ") + u.val());
|
||||
}
|
||||
console.log("\nOT execution order (" + i + "," + (i + 1) + "):");
|
||||
printOpsInExecutionOrder(i, i + 1);
|
||||
console.log("");
|
||||
ops = printOpsInExecutionOrder(i + 1, i);
|
||||
console.log("");
|
||||
}
|
||||
}
|
||||
if (found_inconsistency) {
|
||||
throw new Error("dtrn");
|
||||
} else {
|
||||
_results.push(void 0);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
describe "TextYatta", ->
|
||||
beforeEach (done)->
|
||||
@last_user = 10
|
||||
@users = []
|
||||
@Connector = Connector_uninitialized @users
|
||||
for i in [0..(@last_user+1)]
|
||||
@users.push(new Yatta i, @Connector)
|
||||
done()
|
||||
|
||||
it "handles inserts correctly", ->
|
||||
|
||||
|
||||
it "can handle many engines, many operations, concurrently (random)", ->
|
||||
number_of_test_cases_multiplier = 1
|
||||
repeat_this = 1 * number_of_test_cases_multiplier
|
||||
doSomething_amount = 500 * number_of_test_cases_multiplier
|
||||
number_of_engines = 12 + number_of_test_cases_multiplier - 1
|
||||
*maximum_ops_per_engine = 20 * number_of_test_cases_multiplier
|
||||
|
||||
@time = 0
|
||||
@ops = 0
|
||||
users = []
|
||||
|
||||
generateInsertOp = (user_num)->
|
||||
chars = "1234567890"
|
||||
|
||||
pos = _.random 0, (users[user_num].val().length-1)
|
||||
length = 1 #_.random 0, 10
|
||||
|
||||
nextchar = chars[(_.random 0, (chars.length-1))]
|
||||
|
||||
text = ""
|
||||
_(length).times ()-> text += nextchar
|
||||
|
||||
users[user_num].insertText pos, text
|
||||
null
|
||||
|
||||
generateReplaceOp = (user_num)->
|
||||
chars = "abcdefghijklmnopqrstuvwxyz"
|
||||
length = _.random 0, 10
|
||||
|
||||
nextchar = chars[(_.random 0, (chars.length-1))]
|
||||
|
||||
text = ""
|
||||
_(length).times ()-> text += nextchar
|
||||
users[user_num].replaceText text
|
||||
|
||||
generateDeleteOp = (user_num)->
|
||||
if users[user_num].val().length > 0
|
||||
pos = _.random 0, (users[user_num].val().length-1)
|
||||
length = 1 # _.random 0, ot.val().length - pos
|
||||
ops1 = users[user_num].deleteText pos, length
|
||||
undefined
|
||||
|
||||
generateRandomOp = (user_num)->
|
||||
op_gen = [generateDeleteOp, generateInsertOp, generateReplaceOp]
|
||||
i = _.random (op_gen.length - 1)
|
||||
op = op_gen[i](user_num)
|
||||
|
||||
applyRandomOp = (user_num)->
|
||||
user = users[user_num]
|
||||
user.getConnector().flushOneRandom()
|
||||
|
||||
doSomething = do ()->
|
||||
()->
|
||||
user_num = _.random (number_of_engines-1)
|
||||
choices = [applyRandomOp, generateRandomOp]
|
||||
*if (users[user_num].buffer[user_num].length < maximum_ops_per_engine)
|
||||
* choices = choices.concat generateRandomOp
|
||||
|
||||
choice = _.random (choices.length-1)
|
||||
|
||||
choices[choice](user_num)
|
||||
|
||||
console.log ""
|
||||
for times in [1..repeat_this]
|
||||
*console.log "repeated_this x #{times} times"
|
||||
users = []
|
||||
Connector = Connector_uninitialized users
|
||||
for i in [0..number_of_engines]
|
||||
users.push(new Yatta i, Connector)
|
||||
|
||||
found_error = false
|
||||
|
||||
*try
|
||||
time_now = (new Date).getTime()
|
||||
for i in [1..doSomething_amount]
|
||||
doSomething()
|
||||
|
||||
for user,user_number in users
|
||||
user.getConnector().flushAll()
|
||||
|
||||
@time += (new Date()).getTime() - time_now
|
||||
|
||||
number_of_created_operations = 0
|
||||
for i in [0...(users.length)]
|
||||
number_of_created_operations += users[i].getConnector().getOpsInExecutionOrder().length
|
||||
@ops += number_of_created_operations*users.length
|
||||
|
||||
ops_per_msek = Math.floor(@ops/@time)
|
||||
console.log "#{times}/#{repeat_this}: Every collaborator (#{users.length}) applied #{number_of_created_operations} ops in a different order." + " Over all we consumed #{@ops} operations in #{@time/1000} seconds (#{ops_per_msek} ops/msek)."
|
||||
|
||||
console.log users[0].val()
|
||||
found_inconsistency = false
|
||||
for i in [0...(users.length-1)]
|
||||
if ((users[i].val() isnt users[i+1].val()) )# and (number_of_created_operations <= 6 or true)) or found_error
|
||||
found_inconsistency =true
|
||||
printOpsInExecutionOrder = (otnumber, otherotnumber)->
|
||||
ops = users[otnumber].getConnector().getOpsInExecutionOrder()
|
||||
for s,j in ops
|
||||
console.log "op#{j} = #{JSON.stringify s}"
|
||||
console.log ""
|
||||
s = "ops = ["
|
||||
for o,j in ops
|
||||
if j isnt 0
|
||||
s += ", "
|
||||
s += "op#{j}"
|
||||
s += "]"
|
||||
console.log s
|
||||
console.log "@users[@last_user].ot.applyOps ops"
|
||||
console.log "expect(@users[@last_user].val()).to.equal(\"#{users[otherotnumber].val()}\")"
|
||||
ops
|
||||
console.log ""
|
||||
console.log "Found an OT Puzzle!"
|
||||
console.log "OT states:"
|
||||
for u,j in users
|
||||
console.log "OT#{j}: "+u.val()
|
||||
console.log "\nOT execution order (#{i},#{i+1}):"
|
||||
printOpsInExecutionOrder i, i+1
|
||||
console.log ""
|
||||
ops = printOpsInExecutionOrder i+1, i
|
||||
|
||||
console.log ""
|
||||
if found_inconsistency
|
||||
throw new Error "dtrn"
|
||||
|
||||
* expect(users[i].ot.val()).to.equal(users[i+1].ot.val())
|
||||
*/
|
||||
|
||||
}).call(this);
|
||||
|
||||
197
dest/test/test/Yatta_test.js
Normal file
197
dest/test/test/Yatta_test.js
Normal file
@@ -0,0 +1,197 @@
|
||||
(function() {
|
||||
var Connector_uninitialized, Test, Yatta, chai, expect, should, sinon, sinonChai, _,
|
||||
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
||||
|
||||
chai = require('chai');
|
||||
|
||||
expect = chai.expect;
|
||||
|
||||
should = chai.should();
|
||||
|
||||
sinon = require('sinon');
|
||||
|
||||
sinonChai = require('sinon-chai');
|
||||
|
||||
_ = require("underscore");
|
||||
|
||||
chai.use(sinonChai);
|
||||
|
||||
Yatta = require("../lib/Frameworks/JsonYatta.coffee");
|
||||
|
||||
Connector_uninitialized = require("../lib/Connectors/TestConnector.coffee");
|
||||
|
||||
Test = (function() {
|
||||
function Test() {
|
||||
this.applyRandomOp = __bind(this.applyRandomOp, this);
|
||||
this.generateRandomOp = __bind(this.generateRandomOp, this);
|
||||
this.generateDeleteOp = __bind(this.generateDeleteOp, this);
|
||||
this.generateReplaceOp = __bind(this.generateReplaceOp, this);
|
||||
this.generateInsertOp = __bind(this.generateInsertOp, this);
|
||||
this.number_of_test_cases_multiplier = 1;
|
||||
this.repeat_this = 100 * this.number_of_test_cases_multiplier;
|
||||
this.doSomething_amount = 200 * this.number_of_test_cases_multiplier;
|
||||
this.number_of_engines = 12 + this.number_of_test_cases_multiplier - 1;
|
||||
this.time = 0;
|
||||
this.ops = 0;
|
||||
this.reinitialize();
|
||||
}
|
||||
|
||||
Test.prototype.reinitialize = function() {
|
||||
var i, _i, _ref, _results;
|
||||
this.users = [];
|
||||
this.Connector = Connector_uninitialized(this.users);
|
||||
this.users.push(new Yatta(0, this.Connector));
|
||||
this.users[0].val('name', "initial");
|
||||
_results = [];
|
||||
for (i = _i = 1, _ref = this.number_of_engines; 1 <= _ref ? _i < _ref : _i > _ref; i = 1 <= _ref ? ++_i : --_i) {
|
||||
_results.push(this.users.push(new Yatta(i, this.Connector)));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
Test.prototype.getRandomText = function() {
|
||||
var chars, length, nextchar, text;
|
||||
chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
length = _.random(0, 10);
|
||||
nextchar = chars[_.random(0, chars.length - 1)];
|
||||
text = "";
|
||||
_(length).times(function() {
|
||||
return text += nextchar;
|
||||
});
|
||||
return text;
|
||||
};
|
||||
|
||||
Test.prototype.generateInsertOp = function(user_num) {
|
||||
var pos;
|
||||
pos = _.random(0, this.users[user_num].val('name').val().length - 1);
|
||||
this.users[user_num].val('name').insertText(pos, this.getRandomText());
|
||||
return null;
|
||||
};
|
||||
|
||||
Test.prototype.generateReplaceOp = function(user_num) {
|
||||
this.users[user_num].val('name').replaceText(this.getRandomText());
|
||||
return null;
|
||||
};
|
||||
|
||||
Test.prototype.generateDeleteOp = function(user_num) {
|
||||
var length, ops1, pos;
|
||||
if (this.users[user_num].val('name').val().length > 0) {
|
||||
pos = _.random(0, this.users[user_num].val('name').val().length - 1);
|
||||
length = 1;
|
||||
ops1 = this.users[user_num].val('name').deleteText(pos, length);
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
|
||||
Test.prototype.generateRandomOp = function(user_num) {
|
||||
var i, op, op_gen;
|
||||
op_gen = [this.generateDeleteOp, this.generateInsertOp, this.generateReplaceOp];
|
||||
i = _.random(op_gen.length - 1);
|
||||
return op = op_gen[i](user_num);
|
||||
};
|
||||
|
||||
Test.prototype.applyRandomOp = function(user_num) {
|
||||
var user;
|
||||
user = this.users[user_num];
|
||||
return user.getConnector().flushOneRandom();
|
||||
};
|
||||
|
||||
Test.prototype.doSomething = function() {
|
||||
var choice, choices, user_num;
|
||||
user_num = _.random(this.number_of_engines - 1);
|
||||
choices = [this.applyRandomOp, this.generateRandomOp];
|
||||
choice = _.random(choices.length - 1);
|
||||
return choices[choice](user_num);
|
||||
};
|
||||
|
||||
Test.prototype.flushAll = function() {
|
||||
var user, user_number, _i, _len, _ref, _results;
|
||||
_ref = this.users;
|
||||
_results = [];
|
||||
for (user_number = _i = 0, _len = _ref.length; _i < _len; user_number = ++_i) {
|
||||
user = _ref[user_number];
|
||||
_results.push(user.getConnector().flushAll());
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
Test.prototype.run = function() {
|
||||
var i, j, number_of_created_operations, ops, ops_per_msek, printOpsInExecutionOrder, time_now, times, u, _i, _j, _k, _ref, _ref1, _ref2, _results;
|
||||
_results = [];
|
||||
for (times = _i = 1, _ref = this.repeat_this; 1 <= _ref ? _i <= _ref : _i >= _ref; times = 1 <= _ref ? ++_i : --_i) {
|
||||
this.reinitialize();
|
||||
time_now = (new Date).getTime();
|
||||
for (i = _j = 1, _ref1 = this.doSomething_amount; 1 <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = 1 <= _ref1 ? ++_j : --_j) {
|
||||
this.doSomething();
|
||||
}
|
||||
this.flushAll();
|
||||
this.time += (new Date()).getTime() - time_now;
|
||||
number_of_created_operations = 0;
|
||||
for (i = _k = 0, _ref2 = this.users.length; 0 <= _ref2 ? _k < _ref2 : _k > _ref2; i = 0 <= _ref2 ? ++_k : --_k) {
|
||||
number_of_created_operations += this.users[i].getConnector().getOpsInExecutionOrder().length;
|
||||
}
|
||||
this.ops += number_of_created_operations * this.users.length;
|
||||
ops_per_msek = Math.floor(this.ops / this.time);
|
||||
console.log(("" + times + "/" + this.repeat_this + ": Every collaborator (" + this.users.length + ") applied " + this.number_of_created_operations + " ops in a different order.") + (" Over all we consumed " + this.ops + " operations in " + (this.time / 1000) + " seconds (" + ops_per_msek + " ops/msek)."));
|
||||
_results.push((function() {
|
||||
var _l, _len, _m, _ref3, _results1;
|
||||
_results1 = [];
|
||||
for (i = _l = 0, _ref3 = this.users.length - 1; 0 <= _ref3 ? _l < _ref3 : _l > _ref3; i = 0 <= _ref3 ? ++_l : --_l) {
|
||||
if (this.users[i].val('name').val() !== this.users[i + 1].val('name').val()) {
|
||||
printOpsInExecutionOrder = function(otnumber, otherotnumber) {
|
||||
var j, o, ops, s, _len, _len1, _m, _n;
|
||||
ops = this.users[otnumber].getConnector().getOpsInExecutionOrder();
|
||||
for (_m = 0, _len = ops.length; _m < _len; _m++) {
|
||||
s = ops[_m];
|
||||
console.log(JSON.stringify(s));
|
||||
}
|
||||
console.log("");
|
||||
s = "ops = [";
|
||||
for (j = _n = 0, _len1 = ops.length; _n < _len1; j = ++_n) {
|
||||
o = ops[j];
|
||||
if (j !== 0) {
|
||||
s += ", ";
|
||||
}
|
||||
s += "op" + j;
|
||||
}
|
||||
s += "]";
|
||||
console.log(s);
|
||||
console.log("@users[@last_user].ot.applyOps ops");
|
||||
console.log("expect(@users[@last_user].ot.val('name')).to.equal(\"" + (users[otherotnumber].val('name')) + "\")");
|
||||
return ops;
|
||||
};
|
||||
console.log("");
|
||||
console.log("Found an OT Puzzle!");
|
||||
console.log("OT states:");
|
||||
for (j = _m = 0, _len = users.length; _m < _len; j = ++_m) {
|
||||
u = users[j];
|
||||
console.log(("OT" + j + ": ") + u.val('name'));
|
||||
}
|
||||
console.log("\nOT execution order (" + i + "," + (i + 1) + "):");
|
||||
printOpsInExecutionOrder(i, i + 1);
|
||||
console.log("");
|
||||
ops = printOpsInExecutionOrder(i + 1, i);
|
||||
_results1.push(console.log(""));
|
||||
} else {
|
||||
_results1.push(void 0);
|
||||
}
|
||||
}
|
||||
return _results1;
|
||||
}).call(this));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
return Test;
|
||||
|
||||
})();
|
||||
|
||||
describe("JsonYatta", function() {
|
||||
return it("can handle many engines, many operations, concurrently (random)", function() {
|
||||
var yTest;
|
||||
yTest = new Test();
|
||||
return yTest.run();
|
||||
});
|
||||
});
|
||||
|
||||
}).call(this);
|
||||
Reference in New Issue
Block a user