react / wstein / node_modules / browserify / node_modules / module-deps / node_modules / detective / node_modules / escodegen / node_modules / optionator / node_modules / fast-levenshtein / test / tests.js
80690 viewsvar _ = require('lodash'),1chai = require('chai'),2fs = require('fs'),3levenshtein = require('../levenshtein.min');45var expect = chai.expect,6assert = chai.assert;789/**10* Create test functions.11* @return Object12*/13var createTests = function(str1, str2, expectedLength, options) {14options = _.extend({}, {15description: null16}, options);1718if (!options.description) {19options.description = (0 === str1.length ? '(empty)' : str1) + ' <-> ' + (0 === str2.length ? '(empty)' : str2);20}2122var ret = {};2324ret["SYNC:\t" + options.description] = function() {25expect(levenshtein.get(str1, str2)).to.eql(expectedLength);26};2728ret["ASYNC:\t" + options.description] = function(done) {29levenshtein.getAsync(str1, str2, function(err, distance) {30expect(err).to.be.null;31expect(distance).to.eql(expectedLength);3233done();34});35};3637return ret;38};394041// ----- Basic tests ----- //4243(function() {4445var tests = {},46str = 'hello',47str1 = str,48str2 = str,49i;5051// equal strings52_.extend(tests, createTests('hello', 'hello', 0));5354// inserts55for (i=0; i<=str.length; ++i) {56str1 = str.substr(0,i);57str2 = str;5859_.extend(tests, createTests(str1, str2, str.length - i));60}6162// deletes63for (i=str.length-1; i>=0; --i) {64str1 = str;65str2 = str.substr(0,i);6667_.extend(tests, createTests(str1, str2, str.length - i));68}6970// substitutions71_.extend(tests, createTests("a", "b", 1 ));72_.extend(tests, createTests("ab", "ac", 1 ));73_.extend(tests, createTests("ac", "bc", 1 ));74_.extend(tests, createTests("abc", "axc", 1 ));75_.extend(tests, createTests("xabxcdxxefxgx", "1ab2cd34ef5g6", 6 ));7677// many ops78_.extend(tests, createTests('xabxcdxxefxgx', 'abcdefg', 6));79_.extend(tests, createTests('javawasneat', 'scalaisgreat', 7));80_.extend(tests, createTests("example", "samples", 3));81_.extend(tests, createTests("sturgeon", "urgently", 6 ));82_.extend(tests, createTests("levenshtein", "frankenstein", 6 ));83_.extend(tests, createTests("distance", "difference", 5 ));8485// non-latin86_.extend(tests, createTests('因為我是中國人所以我會說中文', '因為我是英國人所以我會說英文', 2, {87description: 'non-latin'88}));8990// long text91_.extend(tests, createTests(92'Morbi interdum ultricies neque varius condimentum. Donec volutpat turpis interdum metus ultricies vulputate. Duis ultricies rhoncus sapien, sit amet fermentum risus imperdiet vitae. Ut et lectus',93'Duis erat dolor, cursus in tincidunt a, lobortis in odio. Cras magna sem, pharetra et iaculis quis, faucibus quis tellus. Suspendisse dapibus sapien in justo cursus',94143,95{96description: 'long text'97}98));99100exports['Basic'] = tests;101})();102103// ------ Asynchronous tests ----- //104105var text1 = fs.readFileSync(__dirname + '/text1.txt', 'utf-8'),106text2 = fs.readFileSync(__dirname + '/text2.txt', 'utf-8');107108exports['Async'] = {109'no progress callback': function(done) {110this.timeout(20000);111112var startTime = new Date().valueOf();113114levenshtein.getAsync(text1, text2, function(err, distance) {115var timeElapsed = new Date().valueOf() - startTime;116117expect(err).to.be.null;118expect(distance).to.eql(194);119120console.log(timeElapsed + ' ms');121122done();123});124},125'with progress callback': function(done) {126this.timeout(20000);127128var percents = [];129var progress = function(percent) {130percents.push(percent);131};132133var startTime = new Date().valueOf();134135levenshtein.getAsync(text1, text2, function(err, distance) {136var timeElapsed = new Date().valueOf() - startTime;137138expect(err).to.be.null;139expect(distance).to.eql(194);140141console.log(timeElapsed + ' ms, ' + percents.length + ' progress updates');142143expect(0 < percents.length).to.be.true;144145// check percentages146var lastPercent = 0;147_.each(percents, function(percent) {148expect(100 >= percent);149expect(percent > lastPercent);150lastPercent = percent;151});152153done();154}, {155progress: progress156});157},158'progress callback error': function(done) {159levenshtein.getAsync(text1 + text2, text2 + text1, function(err) {160expect(err.toString()).to.be.eql('Progress callback: Error: Bla bla');161162done();163}, {164progress: function() {165throw new Error('Bla bla');166}167});168}169};170171172173