aboutsummaryrefslogtreecommitdiff
path: root/node_modules/fast-diff/test.js
blob: 731c0dccb4e1307362cfbed86a8cdb9ea5dd1768 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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!");