92 lines
2.5 KiB
JavaScript
92 lines
2.5 KiB
JavaScript
|
var _ = require('lodash');
|
||
|
var googlediff = require('googlediff');
|
||
|
var seedrandom = require('seedrandom');
|
||
|
var diff = require('./diff.js');
|
||
|
|
||
|
googlediff = new googlediff();
|
||
|
|
||
|
var ITERATIONS = 10000;
|
||
|
var ALPHABET = 'GATTACA';
|
||
|
var LENGTH = 100;
|
||
|
|
||
|
var seed = Math.floor(Math.random() * 10000);
|
||
|
var random = seedrandom(seed);
|
||
|
|
||
|
console.log('Running computing ' + ITERATIONS + ' diffs with seed ' + seed + '...');
|
||
|
|
||
|
console.log('Generating strings...');
|
||
|
var strings = [];
|
||
|
for(var i = 0; i <= ITERATIONS; ++i) {
|
||
|
var chars = [];
|
||
|
for(var l = 0; l < LENGTH; ++l) {
|
||
|
var letter = ALPHABET.substr(Math.floor(random() * ALPHABET.length), 1);
|
||
|
chars.push(letter);
|
||
|
}
|
||
|
strings.push(chars.join(''));
|
||
|
}
|
||
|
|
||
|
console.log('Running tests *without* cursor information...');
|
||
|
for(var i = 0; i < ITERATIONS; ++i) {
|
||
|
var result = diff(strings[i], strings[i+1]);
|
||
|
var expected = googlediff.diff_main(strings[i], strings[i+1]);
|
||
|
if (!_.isEqual(result, expected)) {
|
||
|
console.log('Expected', expected);
|
||
|
console.log('Result', result);
|
||
|
throw new Error('Diff produced difference results.');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
console.log('Running tests *with* cursor information');
|
||
|
for(var i = 0; i < ITERATIONS; ++i) {
|
||
|
var cursor_pos = Math.floor(random() * strings[i].length + 1);
|
||
|
var diffs = diff(strings[i], strings[i+1], cursor_pos);
|
||
|
var patch = googlediff.patch_make(strings[i], strings[i+1], diffs);
|
||
|
var expected = googlediff.patch_apply(patch, strings[i])[0];
|
||
|
if (expected !== strings[i+1]) {
|
||
|
console.log('Expected', expected);
|
||
|
console.log('Result', strings[i+1]);
|
||
|
throw new Error('Diff produced difference results.');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
console.log('Running emoji tests');
|
||
|
(function() {
|
||
|
var result = diff('🐶', '🐯');
|
||
|
var expected = [
|
||
|
[diff.DELETE, '🐶'],
|
||
|
[diff.INSERT, '🐯'],
|
||
|
];
|
||
|
if (!_.isEqual(result, expected)) {
|
||
|
console.log(result, '!==', expected);
|
||
|
throw new Error('Emoji simple case test failed');
|
||
|
}
|
||
|
})();
|
||
|
|
||
|
(function() {
|
||
|
var result = diff('👨🏽', '👩🏽');
|
||
|
var expected = [
|
||
|
[diff.DELETE, '👨'],
|
||
|
[diff.INSERT, '👩'],
|
||
|
[diff.EQUAL, '🏽']
|
||
|
];
|
||
|
if (!_.isEqual(result, expected)) {
|
||
|
console.log(result, '!==', expected);
|
||
|
throw new Error('Emoji before case test failed');
|
||
|
}
|
||
|
})();
|
||
|
|
||
|
(function() {
|
||
|
var result = diff('👩🏼', '👩🏽');
|
||
|
var expected = [
|
||
|
[diff.EQUAL, '👩'],
|
||
|
[diff.DELETE, '🏼'],
|
||
|
[diff.INSERT, '🏽'],
|
||
|
];
|
||
|
if (!_.isEqual(result, expected)) {
|
||
|
console.log(result, '!==', expected);
|
||
|
throw new Error('Emoji after case test failed');
|
||
|
}
|
||
|
})();
|
||
|
|
||
|
console.log("Success!");
|