test.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. var _ = require('lodash');
  2. var googlediff = require('googlediff');
  3. var seedrandom = require('seedrandom');
  4. var diff = require('./diff.js');
  5. googlediff = new googlediff();
  6. var ITERATIONS = 10000;
  7. var ALPHABET = 'GATTACA';
  8. var LENGTH = 100;
  9. var seed = Math.floor(Math.random() * 10000);
  10. var random = seedrandom(seed);
  11. console.log('Running computing ' + ITERATIONS + ' diffs with seed ' + seed + '...');
  12. console.log('Generating strings...');
  13. var strings = [];
  14. for(var i = 0; i <= ITERATIONS; ++i) {
  15. var chars = [];
  16. for(var l = 0; l < LENGTH; ++l) {
  17. var letter = ALPHABET.substr(Math.floor(random() * ALPHABET.length), 1);
  18. chars.push(letter);
  19. }
  20. strings.push(chars.join(''));
  21. }
  22. console.log('Running tests *without* cursor information...');
  23. for(var i = 0; i < ITERATIONS; ++i) {
  24. var result = diff(strings[i], strings[i+1]);
  25. var expected = googlediff.diff_main(strings[i], strings[i+1]);
  26. if (!_.isEqual(result, expected)) {
  27. console.log('Expected', expected);
  28. console.log('Result', result);
  29. throw new Error('Diff produced difference results.');
  30. }
  31. }
  32. console.log('Running tests *with* cursor information');
  33. for(var i = 0; i < ITERATIONS; ++i) {
  34. var cursor_pos = Math.floor(random() * strings[i].length + 1);
  35. var diffs = diff(strings[i], strings[i+1], cursor_pos);
  36. var patch = googlediff.patch_make(strings[i], strings[i+1], diffs);
  37. var expected = googlediff.patch_apply(patch, strings[i])[0];
  38. if (expected !== strings[i+1]) {
  39. console.log('Expected', expected);
  40. console.log('Result', strings[i+1]);
  41. throw new Error('Diff produced difference results.');
  42. }
  43. }
  44. console.log('Running emoji tests');
  45. (function() {
  46. var result = diff('🐶', '🐯');
  47. var expected = [
  48. [diff.DELETE, '🐶'],
  49. [diff.INSERT, '🐯'],
  50. ];
  51. if (!_.isEqual(result, expected)) {
  52. console.log(result, '!==', expected);
  53. throw new Error('Emoji simple case test failed');
  54. }
  55. })();
  56. (function() {
  57. var result = diff('👨🏽', '👩🏽');
  58. var expected = [
  59. [diff.DELETE, '👨'],
  60. [diff.INSERT, '👩'],
  61. [diff.EQUAL, '🏽']
  62. ];
  63. if (!_.isEqual(result, expected)) {
  64. console.log(result, '!==', expected);
  65. throw new Error('Emoji before case test failed');
  66. }
  67. })();
  68. (function() {
  69. var result = diff('👩🏼', '👩🏽');
  70. var expected = [
  71. [diff.EQUAL, '👩'],
  72. [diff.DELETE, '🏼'],
  73. [diff.INSERT, '🏽'],
  74. ];
  75. if (!_.isEqual(result, expected)) {
  76. console.log(result, '!==', expected);
  77. throw new Error('Emoji after case test failed');
  78. }
  79. })();
  80. console.log("Success!");