UNPKG

pessimism

Version:

A fast HAMT Map intended for KV caching and optimistic updates

165 lines (150 loc) 7.39 kB
'use strict'; var Jest = require("@glennsl/bs-jest/lib/js/src/jest.js"); var $$Array = require("bs-platform/lib/js/array.js"); var Curry = require("bs-platform/lib/js/curry.js"); var Pessimism = require("../src/pessimism.js"); var Caml_array = require("bs-platform/lib/js/caml_array.js"); var ca = "coest"; var cb = "01pcj"; Jest.test("works for values on a single Index node", (function (param) { var words = /* array */[ "hello", "world", "test" ]; var map = Pessimism.set(Pessimism.set(Pessimism.set(Pessimism.make(/* () */0), Caml_array.caml_array_get(words, 0), Caml_array.caml_array_get(words, 0)), Caml_array.caml_array_get(words, 1), Caml_array.caml_array_get(words, 1)), Caml_array.caml_array_get(words, 2), Caml_array.caml_array_get(words, 2)); var words_out = $$Array.map((function (x) { return Pessimism.get(map, x); }), words); return Curry._2(Jest.Expect[/* Operators */25][/* = */5], Jest.Expect[/* expect */0](words_out), $$Array.map((function (x) { return x; }), words)); })); Jest.test("works for values on nested Index nodes", (function (param) { var map = Pessimism.set(Pessimism.set(Pessimism.make(/* () */0), ca, ca), cb, cb); var expected = /* array */[ ca, cb ]; var actual = /* array */[ Pessimism.get(map, ca), Pessimism.get(map, cb) ]; return Curry._2(Jest.Expect[/* Operators */25][/* = */5], Jest.Expect[/* expect */0](actual), expected); })); Jest.test("works for values that are colliding", (function (param) { var words = /* array */[ "hetairas", "mentioner", "heliotropes", "neurospora" ]; var map = Pessimism.set(Pessimism.set(Pessimism.set(Pessimism.set(Pessimism.make(/* () */0), Caml_array.caml_array_get(words, 0), Caml_array.caml_array_get(words, 0)), Caml_array.caml_array_get(words, 1), Caml_array.caml_array_get(words, 1)), Caml_array.caml_array_get(words, 2), Caml_array.caml_array_get(words, 2)), Caml_array.caml_array_get(words, 3), Caml_array.caml_array_get(words, 3)); var words_out = $$Array.map((function (x) { return Pessimism.get(map, x); }), words); return Curry._2(Jest.Expect[/* Operators */25][/* = */5], Jest.Expect[/* expect */0](words_out), $$Array.map((function (x) { return x; }), words)); })); Jest.test("works for transitive changes", (function (param) { var words = /* array */[ "hello", "world", "test", "hetairas", "mentioner", "heliotropes", "neurospora" ]; var map = /* record */[/* contents */Pessimism.asMutable(Pessimism.make(/* () */0))]; $$Array.iter((function (word) { map[0] = Pessimism.set(map[0], word, word); return /* () */0; }), words); var map$1 = Pessimism.asImmutable(map[0]); var words_out = $$Array.map((function (x) { return Pessimism.get(map$1, x); }), words); return Curry._2(Jest.Expect[/* Operators */25][/* = */5], Jest.Expect[/* expect */0](words_out), $$Array.map((function (x) { return x; }), words)); })); Jest.test("deletes values correctly", (function (param) { var words = /* array */[ "hello", "world", "test" ]; var map = Pessimism.remove(Pessimism.set(Pessimism.set(Pessimism.set(Pessimism.make(/* () */0), Caml_array.caml_array_get(words, 0), Caml_array.caml_array_get(words, 0)), Caml_array.caml_array_get(words, 1), Caml_array.caml_array_get(words, 1)), Caml_array.caml_array_get(words, 2), Caml_array.caml_array_get(words, 2)), Caml_array.caml_array_get(words, 1)); var a = Pessimism.get(map, Caml_array.caml_array_get(words, 0)); var b = Pessimism.get(map, Caml_array.caml_array_get(words, 1)); return Curry._2(Jest.Expect[/* Operators */25][/* = */5], Jest.Expect[/* expect */0](/* array */[ a, b ]), /* array */[ Caml_array.caml_array_get(words, 0), undefined ]); })); Jest.test("deleted values correctly on nested Index nodes", (function (param) { var map = Pessimism.remove(Pessimism.set(Pessimism.set(Pessimism.make(/* () */0), ca, ca), cb, cb), ca); var expected = /* array */[ undefined, cb ]; var actual = /* array */[ Pessimism.get(map, ca), Pessimism.get(map, cb) ]; return Curry._2(Jest.Expect[/* Operators */25][/* = */5], Jest.Expect[/* expect */0](actual), expected); })); Jest.test("sets optimistic values and clears them", (function (param) { var map = Pessimism.setOptimistic(Pessimism.set(Pessimism.make(/* () */0), "key", "permanent"), "key", "temporary", 1); var before = Pessimism.get(map, "key"); var map$1 = Pessimism.setOptimistic(map, "key", "temporary2", 2); var middle = Pessimism.get(map$1, "key"); var map$2 = Pessimism.clearOptimistic(map$1, 1); var after = Pessimism.get(map$2, "key"); var map$3 = Pessimism.clearOptimistic(map$2, 2); var after2 = Pessimism.get(map$3, "key"); return Curry._2(Jest.Expect[/* Operators */25][/* = */5], Jest.Expect[/* expect */0](/* array */[ before, middle, after, after2 ]), /* array */[ "temporary", "temporary2", "temporary2", "permanent" ]); })); Jest.test("sets optimistic values and overrides them if needed", (function (param) { var map = Pessimism.setOptimistic(Pessimism.set(Pessimism.make(/* () */0), "key", "permanent"), "key", "temporary", 1); var before = Pessimism.get(map, "key"); var map$1 = Pessimism.set(map, "key", "permanent2"); var after = Pessimism.get(map$1, "key"); return Curry._2(Jest.Expect[/* Operators */25][/* = */5], Jest.Expect[/* expect */0](/* array */[ before, after ]), /* array */[ "temporary", "permanent2" ]); })); Jest.test("supports setting and retrieving undefined", (function (param) { var map = Pessimism.setOptimistic(Pessimism.set(Pessimism.make(/* () */0), "key", "permanent"), "key", undefined, 1); var before = Pessimism.getUndefined(map, "key"); var map$1 = Pessimism.clearOptimistic(map, 1); var after = Pessimism.getUndefined(map$1, "key"); return Curry._2(Jest.Expect[/* Operators */25][/* = */5], Jest.Expect[/* expect */0](/* array */[ before, after ]), ([undefined, 'permanent'])); })); var it = Jest.test; exports.it = it; exports.ca = ca; exports.cb = cb; /* Not a pure module */