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() })