You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
382 lines
9.4 KiB
382 lines
9.4 KiB
var collectEntries = require('level-concat-iterator')
|
|
var xtend = require('xtend')
|
|
|
|
var db
|
|
|
|
var data = (function () {
|
|
var d = []
|
|
var i = 0
|
|
var k
|
|
for (; i < 100; i++) {
|
|
k = (i < 10 ? '0' : '') + i
|
|
d.push({
|
|
key: k,
|
|
value: String(Math.random())
|
|
})
|
|
}
|
|
return d
|
|
}())
|
|
|
|
exports.setUp = function (test, testCommon) {
|
|
test('setUp common', testCommon.setUp)
|
|
test('setUp db', function (t) {
|
|
db = testCommon.factory()
|
|
db.open(function () {
|
|
db.batch(data.map(function (d) {
|
|
return {
|
|
type: 'put',
|
|
key: d.key,
|
|
value: d.value
|
|
}
|
|
}), t.end.bind(t))
|
|
})
|
|
})
|
|
}
|
|
|
|
exports.range = function (test, testCommon) {
|
|
function rangeTest (name, opts, expected) {
|
|
opts.keyAsBuffer = false
|
|
opts.valueAsBuffer = false
|
|
test(name, function (t) {
|
|
collectEntries(db.iterator(opts), function (err, result) {
|
|
t.error(err)
|
|
t.is(result.length, expected.length, 'correct number of entries')
|
|
t.same(result, expected)
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
// Test the documented promise that in reverse mode,
|
|
// "the returned entries are the same, but in reverse".
|
|
if (!opts.reverse && !('limit' in opts)) {
|
|
var reverseOpts = xtend(opts, { reverse: true })
|
|
|
|
// Swap start & end options
|
|
if (('start' in opts) && ('end' in opts)) {
|
|
reverseOpts.end = opts.start
|
|
reverseOpts.start = opts.end
|
|
} else if ('start' in opts) {
|
|
reverseOpts.end = opts.start
|
|
delete reverseOpts.start
|
|
} else if ('end' in opts) {
|
|
reverseOpts.start = opts.end
|
|
delete reverseOpts.end
|
|
}
|
|
|
|
rangeTest(
|
|
name + ' (flipped)',
|
|
reverseOpts,
|
|
expected.slice().reverse()
|
|
)
|
|
}
|
|
}
|
|
|
|
rangeTest('test full data collection', {}, data)
|
|
|
|
rangeTest('test iterator with reverse=true', {
|
|
reverse: true
|
|
}, data.slice().reverse())
|
|
|
|
rangeTest('test iterator with gte=00', {
|
|
gte: '00'
|
|
}, data)
|
|
|
|
rangeTest('test iterator with start=00 - legacy', {
|
|
start: '00'
|
|
}, data)
|
|
|
|
rangeTest('test iterator with gte=50', {
|
|
gte: '50'
|
|
}, data.slice(50))
|
|
|
|
rangeTest('test iterator with start=50 - legacy', {
|
|
start: '50'
|
|
}, data.slice(50))
|
|
|
|
rangeTest('test iterator with lte=50 and reverse=true', {
|
|
lte: '50',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(49))
|
|
|
|
rangeTest('test iterator with start=50 and reverse=true - legacy', {
|
|
start: '50',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(49))
|
|
|
|
rangeTest('test iterator with gte=49.5 (midway)', {
|
|
gte: '49.5'
|
|
}, data.slice(50))
|
|
|
|
rangeTest('test iterator with start=49.5 (midway) - legacy', {
|
|
start: '49.5'
|
|
}, data.slice(50))
|
|
|
|
rangeTest('test iterator with gte=49999 (midway)', {
|
|
gte: '49999'
|
|
}, data.slice(50))
|
|
|
|
rangeTest('test iterator with start=49999 (midway) - legacy', {
|
|
start: '49999'
|
|
}, data.slice(50))
|
|
|
|
rangeTest('test iterator with lte=49.5 (midway) and reverse=true', {
|
|
lte: '49.5',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(50))
|
|
|
|
rangeTest('test iterator with lt=49.5 (midway) and reverse=true', {
|
|
lt: '49.5',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(50))
|
|
|
|
rangeTest('test iterator with lt=50 and reverse=true', {
|
|
lt: '50',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(50))
|
|
|
|
rangeTest('test iterator with start=49.5 (midway) and reverse=true - legacy', {
|
|
start: '49.5',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(50))
|
|
|
|
rangeTest('test iterator with lte=50', {
|
|
lte: '50'
|
|
}, data.slice(0, 51))
|
|
|
|
rangeTest('test iterator with end=50 - legacy', {
|
|
end: '50'
|
|
}, data.slice(0, 51))
|
|
|
|
rangeTest('test iterator with lte=50.5 (midway)', {
|
|
lte: '50.5'
|
|
}, data.slice(0, 51))
|
|
|
|
rangeTest('test iterator with end=50.5 (midway) - legacy', {
|
|
end: '50.5'
|
|
}, data.slice(0, 51))
|
|
|
|
rangeTest('test iterator with lte=50555 (midway)', {
|
|
lte: '50555'
|
|
}, data.slice(0, 51))
|
|
|
|
rangeTest('test iterator with lt=50555 (midway)', {
|
|
lt: '50555'
|
|
}, data.slice(0, 51))
|
|
|
|
rangeTest('test iterator with end=50555 (midway) - legacy', {
|
|
end: '50555'
|
|
}, data.slice(0, 51))
|
|
|
|
rangeTest('test iterator with gte=50.5 (midway) and reverse=true', {
|
|
gte: '50.5',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(0, 49))
|
|
|
|
rangeTest('test iterator with gt=50.5 (midway) and reverse=true', {
|
|
gt: '50.5',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(0, 49))
|
|
|
|
rangeTest('test iterator with end=50.5 (midway) and reverse=true - legacy', {
|
|
end: '50.5',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(0, 49))
|
|
|
|
rangeTest('test iterator with gt=50 and reverse=true', {
|
|
gt: '50',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(0, 49))
|
|
|
|
// end='0', starting key is actually '00' so it should avoid it
|
|
rangeTest('test iterator with lte=0', {
|
|
lte: '0'
|
|
}, [])
|
|
|
|
// end='0', starting key is actually '00' so it should avoid it
|
|
rangeTest('test iterator with lt=0', {
|
|
lt: '0'
|
|
}, [])
|
|
|
|
// end='0', starting key is actually '00' so it should avoid it
|
|
rangeTest('test iterator with end=0 - legacy', {
|
|
end: '0'
|
|
}, [])
|
|
|
|
rangeTest('test iterator with gte=30 and lte=70', {
|
|
gte: '30',
|
|
lte: '70'
|
|
}, data.slice(30, 71))
|
|
|
|
rangeTest('test iterator with gt=29 and lt=71', {
|
|
gt: '29',
|
|
lt: '71'
|
|
}, data.slice(30, 71))
|
|
|
|
rangeTest('test iterator with start=30 and end=70 - legacy', {
|
|
start: '30',
|
|
end: '70'
|
|
}, data.slice(30, 71))
|
|
|
|
rangeTest('test iterator with gte=30 and lte=70 and reverse=true', {
|
|
lte: '70',
|
|
gte: '30',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(29, 70))
|
|
|
|
rangeTest('test iterator with gt=29 and lt=71 and reverse=true', {
|
|
lt: '71',
|
|
gt: '29',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(29, 70))
|
|
|
|
rangeTest('test iterator with start=70 and end=30 and reverse=true - legacy', {
|
|
start: '70',
|
|
end: '30',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(29, 70))
|
|
|
|
rangeTest('test iterator with limit=20', {
|
|
limit: 20
|
|
}, data.slice(0, 20))
|
|
|
|
rangeTest('test iterator with limit=20 and gte=20', {
|
|
limit: 20,
|
|
gte: '20'
|
|
}, data.slice(20, 40))
|
|
|
|
rangeTest('test iterator with limit=20 and start=20 - legacy', {
|
|
limit: 20,
|
|
start: '20'
|
|
}, data.slice(20, 40))
|
|
|
|
rangeTest('test iterator with limit=20 and reverse=true', {
|
|
limit: 20,
|
|
reverse: true
|
|
}, data.slice().reverse().slice(0, 20))
|
|
|
|
rangeTest('test iterator with limit=20 and lte=79 and reverse=true', {
|
|
limit: 20,
|
|
lte: '79',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(20, 40))
|
|
|
|
rangeTest('test iterator with limit=20 and start=79 and reverse=true - legacy', {
|
|
limit: 20,
|
|
start: '79',
|
|
reverse: true
|
|
}, data.slice().reverse().slice(20, 40))
|
|
|
|
// the default limit value from levelup is -1
|
|
rangeTest('test iterator with limit=-1 should iterate over whole database', {
|
|
limit: -1
|
|
}, data)
|
|
|
|
rangeTest('test iterator with limit=0 should not iterate over anything', {
|
|
limit: 0
|
|
}, [])
|
|
|
|
rangeTest('test iterator with lte after limit', {
|
|
limit: 20,
|
|
lte: '50'
|
|
}, data.slice(0, 20))
|
|
|
|
rangeTest('test iterator with end after limit - legacy', {
|
|
limit: 20,
|
|
end: '50'
|
|
}, data.slice(0, 20))
|
|
|
|
rangeTest('test iterator with lte before limit', {
|
|
limit: 50,
|
|
lte: '19'
|
|
}, data.slice(0, 20))
|
|
|
|
rangeTest('test iterator with end before limit - legacy', {
|
|
limit: 50,
|
|
end: '19'
|
|
}, data.slice(0, 20))
|
|
|
|
rangeTest('test iterator with gte after database end', {
|
|
gte: '9a'
|
|
}, [])
|
|
|
|
rangeTest('test iterator with gt after database end', {
|
|
gt: '9a'
|
|
}, [])
|
|
|
|
rangeTest('test iterator with start after database end - legacy', {
|
|
start: '9a'
|
|
}, [])
|
|
|
|
rangeTest('test iterator with lte after database end and reverse=true', {
|
|
lte: '9a',
|
|
reverse: true
|
|
}, data.slice().reverse())
|
|
|
|
rangeTest('test iterator with start after database end and reverse=true - legacy', {
|
|
start: '9a',
|
|
reverse: true
|
|
}, data.slice().reverse())
|
|
|
|
rangeTest('test iterator with lt after database end', {
|
|
lt: 'a'
|
|
}, data.slice())
|
|
|
|
rangeTest('test iterator with end after database end - legacy', {
|
|
end: 'a'
|
|
}, data.slice())
|
|
|
|
rangeTest('test iterator with lt at database end', {
|
|
lt: data[data.length - 1].key
|
|
}, data.slice(0, -1))
|
|
|
|
rangeTest('test iterator with lte at database end', {
|
|
lte: data[data.length - 1].key
|
|
}, data.slice())
|
|
|
|
rangeTest('test iterator with end at database end - legacy', {
|
|
end: data[data.length - 1].key
|
|
}, data.slice())
|
|
|
|
rangeTest('test iterator with lt before database end', {
|
|
lt: data[data.length - 2].key
|
|
}, data.slice(0, -2))
|
|
|
|
rangeTest('test iterator with lte before database end', {
|
|
lte: data[data.length - 2].key
|
|
}, data.slice(0, -1))
|
|
|
|
rangeTest('test iterator with end before database end - legacy', {
|
|
end: data[data.length - 2].key
|
|
}, data.slice(0, -1))
|
|
|
|
rangeTest('test iterator with lte and gte after database and reverse=true', {
|
|
lte: '9b',
|
|
gte: '9a',
|
|
reverse: true
|
|
}, [])
|
|
|
|
rangeTest('test iterator with lt and gt after database and reverse=true', {
|
|
lt: '9b',
|
|
gt: '9a',
|
|
reverse: true
|
|
}, [])
|
|
|
|
rangeTest('test iterator with start and end after database and reverse=true - legacy', {
|
|
start: '9b',
|
|
end: '9a',
|
|
reverse: true
|
|
}, [])
|
|
}
|
|
|
|
exports.tearDown = function (test, testCommon) {
|
|
test('tearDown', function (t) {
|
|
db.close(testCommon.tearDown.bind(null, t))
|
|
})
|
|
}
|
|
|
|
exports.all = function (test, testCommon) {
|
|
exports.setUp(test, testCommon)
|
|
exports.range(test, testCommon)
|
|
exports.tearDown(test, testCommon)
|
|
}
|