mirror of
https://github.com/DeviceFarmer/stf.git
synced 2026-04-18 08:13:31 +02:00
124 lines
2.3 KiB
JavaScript
124 lines
2.3 KiB
JavaScript
var assert = require('assert')
|
|
|
|
var patchArray = require('./patch-array')
|
|
|
|
var tests = [
|
|
{
|
|
a: ['a', 'b', 'c', 'd', 'e']
|
|
, b: ['a', 'e', 'c', 'd', 'b']
|
|
, ops: [
|
|
['swap', 4, 1]
|
|
]
|
|
}
|
|
, {
|
|
a: ['a', 'b', 'c', 'd', 'e']
|
|
, b: ['e', 'd', 'c', 'b', 'a']
|
|
, ops: [
|
|
['swap', 4, 0]
|
|
, ['swap', 3, 1]
|
|
]
|
|
}
|
|
, {
|
|
a: ['a', 'b', 'c', 'd', 'e', 'f']
|
|
, b: ['f', 'e', 'd', 'c', 'b', 'a']
|
|
, ops: [
|
|
['swap', 5, 0]
|
|
, ['swap', 4, 1]
|
|
, ['swap', 3, 2]
|
|
]
|
|
}
|
|
, {
|
|
a: ['a', 'b', 'c', 'd', 'e', 'f']
|
|
, b: ['f', 'e']
|
|
, ops: [
|
|
['remove', 0]
|
|
, ['remove', 0]
|
|
, ['remove', 0]
|
|
, ['remove', 0]
|
|
, ['swap', 1, 0]
|
|
]
|
|
}
|
|
, {
|
|
a: ['a', 'b', 'c', 'd', 'e', 'f']
|
|
, b: ['f', 'a']
|
|
, ops: [
|
|
['remove', 1]
|
|
, ['remove', 1]
|
|
, ['remove', 1]
|
|
, ['remove', 1]
|
|
, ['swap', 1, 0]
|
|
]
|
|
}
|
|
, {
|
|
a: []
|
|
, b: ['a', 'b', 'c', 'd', 'e', 'f']
|
|
, ops: [
|
|
['insert', 0, 'a']
|
|
, ['insert', 1, 'b']
|
|
, ['insert', 2, 'c']
|
|
, ['insert', 3, 'd']
|
|
, ['insert', 4, 'e']
|
|
, ['insert', 5, 'f']
|
|
]
|
|
}
|
|
, {
|
|
a: ['a', 'd']
|
|
, b: ['a', 'b', 'c', 'd', 'e', 'f']
|
|
, ops: [
|
|
['insert', 1, 'b']
|
|
, ['insert', 2, 'c']
|
|
, ['insert', 4, 'e']
|
|
, ['insert', 5, 'f']
|
|
]
|
|
}
|
|
, {
|
|
a: ['b', 'd', 'a']
|
|
, b: ['a', 'b', 'c', 'd', 'e', 'f']
|
|
, ops: [
|
|
['swap', 2, 0]
|
|
, ['swap', 2, 1]
|
|
, ['insert', 2, 'c']
|
|
, ['insert', 4, 'e']
|
|
, ['insert', 5, 'f']
|
|
]
|
|
}
|
|
]
|
|
|
|
function verify(a, b, ops) {
|
|
var c = [].concat(a)
|
|
ops.forEach(function(op) {
|
|
switch (op[0]) {
|
|
case 'swap':
|
|
var temp = c[op[1]]
|
|
c[op[1]] = c[op[2]]
|
|
c[op[2]] = temp
|
|
break
|
|
case 'move':
|
|
c.splice(op[2] + 1, 0, c[op[1]])
|
|
c.splice(op[1], 1)
|
|
break
|
|
case 'insert':
|
|
c.splice(op[1], 0, op[2])
|
|
break
|
|
case 'remove':
|
|
c.splice(op[1], 1)
|
|
break
|
|
default:
|
|
throw new Error('Unknown op ' + op[0])
|
|
}
|
|
})
|
|
assert.deepEqual(c, b)
|
|
}
|
|
|
|
tests.forEach(function(test) {
|
|
console.log('Running test:')
|
|
console.log(' <- ', test.a)
|
|
console.log(' -> ', test.b)
|
|
console.log('Verifying test expectations')
|
|
verify(test.a, test.b, test.ops)
|
|
console.log('Verifying patchArray')
|
|
var patch = patchArray(test.a, test.b)
|
|
console.log(' patch', patch)
|
|
verify(test.a, test.b, patch)
|
|
})
|