blob: b034280df3effe483be250e31187f6e9680fe5d8 [file] [log] [blame]
{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