| {SequenceMatcher} = require '..' |
| |
| suite 'SequenceMatcher' |
| |
| test '#setSeqs', -> |
| s = new SequenceMatcher() |
| s.setSeqs('abcd', 'bcde') |
| s.ratio().should.eql 0.75 |
| |
| test '#setSeq1', -> |
| s = new SequenceMatcher(null, 'abcd', 'bcde') |
| s.ratio().should.eql 0.75 |
| s.setSeq1('bcde') |
| s.ratio().should.eql 1.0 |
| |
| test '#setSeq2', -> |
| s = new SequenceMatcher(null, 'abcd', 'bcde') |
| s.ratio().should.eql 0.75 |
| s.setSeq2('abcd') |
| s.ratio().should.eql 1.0 |
| |
| test '#findLongestMatch', -> |
| isjunk = (x) -> x is ' ' |
| s = new SequenceMatcher(isjunk, ' abcd', 'abcd abcd') |
| m = s.findLongestMatch(0, 5, 0, 9) |
| m.should.eql [1, 0, 4] |
| |
| s = new SequenceMatcher(null, 'ab', 'c') |
| m = s.findLongestMatch(0, 2, 0, 1) |
| m.should.eql [0, 0, 0] |
| |
| test '#getMatchingBlocks', -> |
| s = new SequenceMatcher(null, 'abxcd', 'abcd') |
| ms = s.getMatchingBlocks() |
| ms.should.eql [[0, 0, 2], [3, 2, 2], [5, 4, 0]] |
| |
| isjunk = (x) -> x is ' ' |
| s = new SequenceMatcher(isjunk, |
| 'private Thread currentThread;', |
| 'private volatile Thread currentThread;') |
| s.getMatchingBlocks().should.eql [ [0, 0, 8], [8, 17, 21], [29, 38, 0] ] |
| |
| test '#getOpcodes', -> |
| s = new SequenceMatcher(null, 'qabxcd', 'abycdf') |
| s.getOpcodes().should.eql [ |
| [ 'delete' , 0 , 1 , 0 , 0 ] , |
| [ 'equal' , 1 , 3 , 0 , 2 ] , |
| [ 'replace' , 3 , 4 , 2 , 3 ] , |
| [ 'equal' , 4 , 6 , 3 , 5 ] , |
| [ 'insert' , 6 , 6 , 5 , 6 ] |
| ] |
| |
| isjunk = (x) -> x is ' ' |
| s = new SequenceMatcher(isjunk, |
| 'private Thread currentThread;', |
| 'private volatile Thread currentThread;') |
| |
| s.getOpcodes().should.eql [ |
| ['equal', 0, 8, 0, 8], |
| ['insert', 8, 8, 8, 17], |
| ['equal', 8, 29, 17, 38] |
| ] |
| |
| test '#getGroupedOpcodes', -> |
| a = [1...40].map(String) |
| b = a.slice() |
| b[8...8] = 'i' |
| b[20] += 'x' |
| b[23...28] = [] |
| b[30] += 'y' |
| s = new SequenceMatcher(null, a, b) |
| s.getGroupedOpcodes().should.eql [ |
| [ |
| [ 'equal' , 5 , 8 , 5 , 8 ], |
| [ 'insert' , 8 , 8 , 8 , 9 ], |
| [ 'equal' , 8 , 11 , 9 , 12 ] |
| ], |
| [ |
| [ 'equal' , 16 , 19 , 17 , 20 ], |
| [ 'replace' , 19 , 20 , 20 , 21 ], |
| [ 'equal' , 20 , 22 , 21 , 23 ], |
| [ 'delete' , 22 , 27 , 23 , 23 ], |
| [ 'equal' , 27 , 30 , 23 , 26 ] |
| ], |
| [ |
| [ 'equal' , 31 , 34 , 27 , 30 ], |
| [ 'replace' , 34 , 35 , 30 , 31 ], |
| [ 'equal' , 35 , 38 , 31 , 34 ] |
| ] |
| ] |
| |
| test '#ratio', -> |
| s = new SequenceMatcher(null, 'abcd', 'bcde') |
| s.ratio().should.equal 0.75 |
| |
| isjunk = (x) -> x is ' ' |
| s = new SequenceMatcher(isjunk, |
| 'private Thread currentThread;', |
| 'private volatile Thread currentThread;') |
| s.ratio().toPrecision(3).should.eql '0.866' |
| |
| test '#quickRatio', -> |
| s = new SequenceMatcher(null, 'abcd', 'bcde') |
| s.quickRatio().should.equal 0.75 |
| |
| test '#realQuickRatio', -> |
| s = new SequenceMatcher(null, 'abcd', 'bcde') |
| s.realQuickRatio().should.equal 1.0 |