You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							91 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							91 lines
						
					
					
						
							2.5 KiB
						
					
					
				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!");
 | 
						|
 |