| 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!"); |