deno.land / x / replicache@v10.0.0-beta.0 / btree / splice.test.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314import {expect} from '@esm-bundle/chai';import {computeSplices, Splice} from './splice';import type {ReadonlyEntry} from './node';
test('splice', () => { const t = <T>( previous: ReadonlyEntry<T>[], current: ReadonlyEntry<T>[], expected: Splice[], ) => { expect([...computeSplices(previous, current)]).to.deep.equal(expected); };
t([['a', 0]], [['a', 0]], []); t([['a', 0]], [['a', 1]], [[0, 1, 1, 0]]); t([['a', 0]], [], [[0, 1, 0, 0]]); t([], [['a', 0]], [[0, 0, 1, 0]]);
t([['a', 0]], [['b', 1]], [[0, 1, 1, 0]]);
t( [ ['a', 0], ['b', 1], ['c', 2], ['d', 3], ['e', 4], ], [ ['a', 0], ['b', 1], ['c', 22], ['d', 3], ['e', 4], ], [[2, 1, 1, 2]], );
t( [ ['a', 0], ['b', 1], ['c', 2], ['d', 3], ['e', 4], ], [ ['a', 0], ['b', 1], ['d', 3], ['e', 4], ], [[2, 1, 0, 0]], );
t( [ ['a', 0], ['b', 1], ['d', 3], ['e', 4], ], [ ['a', 0], ['b', 1], ['c', 2], ['d', 3], ['e', 4], ], [[2, 0, 1, 2]], );
t( [ ['a', 0], ['b', 1], ['c', 2], ], [ ['a', 0], ['b', 1], ], [[2, 1, 0, 0]], );
t( [ ['a', 0], ['b', 1], ['c', 2], ], [ ['b', 1], ['c', 2], ], [[0, 1, 0, 0]], );
t( [ ['a', 0], ['b', 1], ], [ ['a', 0], ['b', 1], ['c', 2], ], [[2, 0, 1, 2]], );
t( [ ['b', 1], ['c', 2], ], [ ['a', 0], ['b', 1], ['c', 2], ], [[0, 0, 1, 0]], );
t( [ ['a', 0], ['b', 1], ['c', 2], ], [ ['a', 10], ['b', 11], ['c', 12], ], [[0, 3, 3, 0]], );
t( [['b', 1]], [ ['a', 0], ['b', 1], ['c', 2], ], [ [0, 0, 1, 0], [1, 0, 1, 2], ], );
t( [ ['a', 0], ['b', 1], ['c', 2], ], [['b', 1]], [ [0, 1, 0, 0], [2, 1, 0, 0], ], );
t( [ ['b', 1], ['d', 3], ], [ ['a', 0], ['b', 1], ['c', 2], ], [ [0, 0, 1, 0], [1, 1, 1, 2], ], );
t( [ ['a', 0], ['b', 1], ['c', 2], ], [ ['b', 1], ['d', 3], ], [ [0, 1, 0, 0], [2, 1, 1, 1], ], );
t( [ ['a', 0], ['b', 1], ['c', 2], ], [ ['b', 1], ['d', 3], ['e', 4], ], [ [0, 1, 0, 0], [2, 1, 2, 1], ], );
t( [ ['a', 0], ['b', 1], ['c', 2], ], [ ['b', 3], ['c', 4], ], [[0, 3, 2, 0]], );
// Test with objects to ensure deep equality is used. t( [ ['a', {x: 0}], ['b', {x: 1}], ['c', {x: 2}], ], [ ['b', {x: 1}], ['d', {x: 3}], ['e', {x: 4}], ], [ [0, 1, 0, 0], [2, 1, 2, 1], ], );});
test('splice roundtrip', () => { const t = <T>( arr: readonly ReadonlyEntry<T>[], start: number, deleteCount: number, ...items: readonly ReadonlyEntry<T>[] ) => { const current = arr.slice(); current.splice(start, deleteCount, ...items); const res = [...computeSplices(arr, current)]; const expected: Splice[] = [ [start, deleteCount, items.length, items.length === 0 ? 0 : start], ]; expect(res).to.deep.equal(expected); };
t( [ ['a', 0], ['b', 1], ['c', 2], ], 1, 1, ); t( [ ['a', 0], ['b', 1], ['c', 2], ], 1, 1, ['b', 3], ); t( [ ['a', 0], ['b', 1], ['c', 2], ], 1, 1, ['b', 3], ['b2', 33], ); t( [ ['a', 0], ['b', 1], ['c', 2], ], 1, 0, ['a2', 3], ); t( [ ['a', 0], ['b', 1], ['c', 2], ], 1, 0, ['a2', 3], ['a3', 4], );});
Version Info