UNPKG

@dstanesc/o-o-o-o-o-o-o

Version:

O-O-O-O-O-O-O is a collection of content addressed persistent data structures

106 lines 4.45 kB
import { compute_chunks } from '@dstanesc/wasm-chunking-fastcdc-node'; import { chunkerFactory } from '../chunking'; import { graphStore } from '../graph-store'; import { Graph } from '../graph'; import { memoryBlockStoreFactory } from '../block-store'; import { linkCodecFactory, valueCodecFactory, } from '../codecs'; import { deltaFactory } from '../delta'; const { chunk } = chunkerFactory(512, compute_chunks); const linkCodec = linkCodecFactory(); const valueCodec = valueCodecFactory(); const blockStore = memoryBlockStoreFactory(); import * as assert from 'assert'; import { versionStoreFactory } from '../version-store'; describe('Multi tx', function () { test('w/ baseline changes, single graph shares state', async () => { const story = await versionStoreFactory({ chunk, linkCodec, valueCodec, blockStore, }); const store = graphStore({ chunk, linkCodec, valueCodec, blockStore }); // baseline const graph = new Graph(story, store); const tx = graph.tx(); await tx.start(); const v1 = tx.addVertex(); const v2 = tx.addVertex(); const v3 = tx.addVertex(); await tx.addEdge(v1, v2); await tx.addEdge(v1, v3); await tx.addVertexProp(v2, 1, { hello: 'v2' }); await tx.addVertexProp(v2, 1, { hello: 'v3' }); const { root: baseRoot, index: baseIndex } = await tx.commit({}); // next const tx2 = graph.tx(); await tx2.start(); const v4 = tx2.addVertex(); await tx2.addEdge(v1, v4); const { root: currentRoot, index: currentIndex } = await tx2.commit({}); const { baselineDelta } = deltaFactory({ linkCodec, valueCodec }); const { vertices, edges } = await baselineDelta({ baseRoot, baseIndex, baseStore: blockStore, currentRoot, currentIndex, currentStore: blockStore, }); assert.strictEqual(vertices.added.size, 1); assert.strictEqual(vertices.updated.size, 0); assert.strictEqual(vertices.added.get(75).status, 1); assert.strictEqual(edges.added.size, 1); assert.strictEqual(edges.updated.size, 1); assert.strictEqual(edges.added.get(90).sourcePrev, 45); assert.strictEqual(edges.updated.get(45).sourcePrev, 0); assert.strictEqual(edges.updated.get(45).sourceNext, 90); }); test('w/ baseline changes, no state shared, second graph reads initial changes via cid', async () => { const story = await versionStoreFactory({ chunk, linkCodec, valueCodec, blockStore, }); const store = graphStore({ chunk, linkCodec, valueCodec, blockStore }); // baseline const graph = new Graph(story, store); const tx = graph.tx(); await tx.start(); const v1 = tx.addVertex(); const v2 = tx.addVertex(); const v3 = tx.addVertex(); await tx.addEdge(v1, v2); await tx.addEdge(v1, v3); await tx.addVertexProp(v2, 1, { hello: 'v2' }); await tx.addVertexProp(v2, 1, { hello: 'v3' }); const { root: baseRoot, index: baseIndex } = await tx.commit({}); // next const graph2 = new Graph(story, store); const tx2 = graph2.tx(); await tx2.start(); const v4 = tx2.addVertex(); const v1p = await tx2.getVertex(v1.offset); await tx2.addEdge(v1p, v4); const { root: currentRoot, index: currentIndex } = await tx2.commit({}); const { baselineDelta } = deltaFactory({ linkCodec, valueCodec }); const { vertices, edges } = await baselineDelta({ baseRoot, baseIndex, baseStore: blockStore, currentRoot, currentIndex, currentStore: blockStore, }); assert.strictEqual(vertices.added.size, 1); assert.strictEqual(vertices.updated.size, 0); assert.strictEqual(vertices.added.get(75).status, 1); assert.strictEqual(edges.added.size, 1); assert.strictEqual(edges.updated.size, 1); assert.strictEqual(edges.added.get(90).sourcePrev, 45); assert.strictEqual(edges.updated.get(45).sourcePrev, 0); assert.strictEqual(edges.updated.get(45).sourceNext, 90); }); }); //# sourceMappingURL=multitx.test.js.map