UNPKG

skip

Version:

Iterate an MVCC b-tree skipping defunct versions of the records.

76 lines (74 loc) 2.71 kB
require('./proof')(6, prove) function prove (async, assert) { var iterate = require('../..') var revise = require('revise') var versions = {}, visited ; [ 0, 1, 2 ].forEach(function (version) { versions[version] = true }) function extractor (record) { return record.value } function comparator (a, b) { return a < b ? -1 : a > b ? 1 : 0 } var strata = createStrata({ extractor: revise.extractor(extractor), comparator: revise.comparator(comparator), leafSize: 3, branchSize: 3, directory: tmp }) async(function () { serialize(__dirname + '/fixtures/skip.json', tmp, async()) }, function () { strata.open(async()) }, function () { iterate.forward(strata, comparator, versions, visited = {}, 'a', async()) }, function (iterator) { var records = [] var versions = [] async(function () { var loop = async(function () { iterator.next(async()) }, function (items) { if (items == null) { return [ loop ] } items.forEach(function (item) { records.push(item.record.value) versions.push(item.record.version) }) })() }, function () { iterator.unlock(async()) }, function () { assert(records, [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' ], 'forward records') assert(versions, [ 1, 0, 2, 0, 2, 0, 1, 0, 0 ], 'forward versions') assert(Object.keys(visited).sort(), [ 0, 1, 2 ], 'forward visited') }) }, function () { iterate.reverse(strata, comparator, versions, visited = {}, 'i', async()) }, function (iterator) { var records = [] var versions = [] async(function () { var loop = async(function () { iterator.next(async()) }, function (items) { if (items == null) { return [ loop ] } items.forEach(function (item) { records.push(item.record.value) versions.push(item.record.version) }) })() }, function () { iterator.unlock(async()) }, function () { assert(records, [ 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a' ], 'reverse records') assert(versions, [ 0, 0, 1, 0, 2, 0, 2, 0, 1 ], 'reverse versions') assert(Object.keys(visited).sort(), [ 0, 1, 2 ], 'reverse visited') }) }, function () { strata.close(async()) }) }