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.

101 lines
2.6 KiB

var bytewise = require('../')
var tape = require('tape')
var util = require('typewise-core/test/util')
var ARRAY = bytewise.sorts.array
var STRING = bytewise.sorts.string
function eqHex(t, range, hexExpected) {
t.equal(bytewise.encode(range).toString('hex'), hexExpected)
}
function decodeThrows(t, range) {
var encoded = bytewise.encode(range)
// t.ok(encoded.undecodable, 'range should have undecodable bit set')
t.throws(function () {
bytewise.decode(encoded)
}, 'cannot decode a range')
}
tape('bounded ranges', function (t) {
var range = bytewise.bound.lower()
eqHex(t, range, '00')
decodeThrows(t, range)
range = bytewise.bound.upper()
eqHex(t, range, 'ff')
decodeThrows(t, range)
t.end()
})
tape('bounded arrays', function (t) {
eqHex(t, [ 'foo' ], 'a070666f6f0000')
var range = [ 'foo', bytewise.bound.lower() ]
eqHex(t, range, 'a070666f6f000000')
decodeThrows(t, range)
range = [ 'foo', bytewise.bound.upper() ]
eqHex(t, range, 'a070666f6f00ff00')
decodeThrows(t, range)
t.end()
})
tape('prefix-bounded arrays', function (t) {
var prefix = bytewise.encode([ 'foo', 'bar' ])
var range = ARRAY.bound.lower([ 'foo', 'bar' ])
t.equal(
bytewise.encode(range).toString('hex'),
prefix.toString('hex').slice(0, -2)
)
decodeThrows(t, range)
range = ARRAY.bound.upper([ 'foo', 'bar' ])
t.equal(
bytewise.encode(range).toString('hex'),
prefix.toString('hex').slice(0, -2) + 'ff'
)
decodeThrows(t, range)
t.end()
})
tape('bounded ranges, nested', function (t) {
eqHex(t, [ 'foo', [ 'bar' ] ], 'a070666f6f00a070626172000000')
var range = [ 'foo', [ 'bar', bytewise.bound.lower() ] ]
eqHex(t, range, 'a070666f6f00a07062617200000000')
decodeThrows(t, range)
eqHex(t, [ 'foo', [ 'bar' ] ], 'a070666f6f00a070626172000000')
range = [ 'foo', [ 'bar', bytewise.bound.upper() ] ]
eqHex(t, range, 'a070666f6f00a07062617200ff0000')
decodeThrows(t, range)
t.end()
})
tape('prefix-bounded strings', function (t) {
eqHex(t, 'baz', '7062617a')
var range = STRING.bound.lower('baz')
eqHex(t, range, '7062617a')
decodeThrows(t, range)
range = STRING.bound.upper('baz')
eqHex(t, range, '7062617aff')
decodeThrows(t, range)
t.end()
})
tape('prefix-bounded strings, nested', function (t) {
eqHex(t, [ 'foo', [ 'bar', 'baz' ] ], 'a070666f6f00a070626172007062617a000000')
var range = [ 'foo', [ 'bar', STRING.bound.lower('baz') ] ]
eqHex(t, range, 'a070666f6f00a070626172007062617a0000')
decodeThrows(t, range)
range = [ 'foo', [ 'bar', STRING.bound.upper('baz') ] ]
eqHex(t, range, 'a070666f6f00a070626172007062617aff0000')
decodeThrows(t, range)
t.end()
})