<
<     DummyKeyValueStore should retrieve stored values
<   ․ DummyKeyValueStore should retrieve stored values
<     DummyObjectStore .init(type, args) should return a version ID of a newly created object
<   ․ DummyObjectStore .init(type, args) should return a version ID of a newly created object
<     DummyObjectStore .trans(v, p, u) -> {v, r, eff} should return the value returned from the method corresponding to patch p
<   ․ DummyObjectStore .trans(v, p, u) -> {v, r, eff} should return the value returned from the method corresponding to patch p
<     DummyObjectStore .trans(v, p, u) -> {v, r, eff} should pass the patch and u flag as parameters to the called method
<   ․ DummyObjectStore .trans(v, p, u) -> {v, r, eff} should pass the patch and u flag as parameters to the called method
<     DummyObjectStore .trans(v, p, u) -> {v, r, eff} should replace the object with another if replaced with its ID
<   ․ DummyObjectStore .trans(v, p, u) -> {v, r, eff} should replace the object with another if replaced with its ID
<     DummyObjectStore context .init(type, args) should initialize an object with the given type and args and return its version ID
<   ․ DummyObjectStore context .init(type, args) should initialize an object with the given type and args and return its version ID
<     DummyObjectStore context .trans(v, p, u) -> {v,r,eff} should transform a version and return the new version ID and result
<   ․ DummyObjectStore context .trans(v, p, u) -> {v,r,eff} should transform a version and return the new version ID and result
<     DummyObjectStore context .conflict(msg) should throw an exception with .isConflict set to true
<   ․ DummyObjectStore context .conflict(msg) should throw an exception with .isConflict set to true
<     DummyObjectStore context .effect(p) should add patch p to the effect sequence
<   ․ DummyObjectStore context .effect(p) should add patch p to the effect sequence
<     DummyObjectStore context .effect(p) should add patches to the effect set even when called from a nested transformation
<   ․ DummyObjectStore context .effect(p) should add patches to the effect set even when called from a nested transformation
<     DummyObjectStore context .self() should return the version ID of the object prior to this patch application
<   ․ DummyObjectStore context .self() should return the version ID of the object prior to this patch application
<     DummyObjectStore .addTransListener(handler(v1, p, u, v2, r, eff)) should call the handler on each successful call to trans()
<   ․ DummyObjectStore .addTransListener(handler(v1, p, u, v2, r, eff)) should call the handler on each successful call to trans()
<     $inv should unapply the underlying patch
<   ․ $inv should unapply the underlying patch
<     ObjectDispatcher .init(type, args) should return an instance of the referenced type, after calling the init() function associated with the type
<   ․ ObjectDispatcher .init(type, args) should return an instance of the referenced type, after calling the init() function associated with the type
<     ObjectDispatcher .apply(ctx, obj, patch, unapply) should call a method corresponding to patch._type
<   ․ ObjectDispatcher .apply(ctx, obj, patch, unapply) should call a method corresponding to patch._type
<     ObjectDispatcher .apply(ctx, obj, patch, unapply) should call a patch handler function if one exists in the map
<   ․ ObjectDispatcher .apply(ctx, obj, patch, unapply) should call a patch handler function if one exists in the map
<     ObjectDispatcher .apply(ctx, obj, patch, unapply) should prefer the object method when both a method and a handler are defined
<   ․ ObjectDispatcher .apply(ctx, obj, patch, unapply) should prefer the object method when both a method and a handler are defined
<     ObjectMonitor .proxy() should allow modifying an object through a proxy
<   ․ ObjectMonitor .proxy() should allow modifying an object through a proxy
<     ObjectMonitor .proxy() should wrap objects (including arrays) with map proxies
<   ․ ObjectMonitor .proxy() should wrap objects (including arrays) with map proxies
<     ObjectMonitor .proxy() should provide access to child object fields via get/put methods, that update the dirty flag
<   ․ ObjectMonitor .proxy() should provide access to child object fields via get/put methods, that update the dirty flag
<     ObjectMonitor .proxy() should retain the original object as a simple, JSON-style object
<   ․ ObjectMonitor .proxy() should retain the original object as a simple, JSON-style object
<     ObjectMonitor .proxy() should use map proxies recursively
<   ․ ObjectMonitor .proxy() should use map proxies recursively
<     ObjectMonitor .proxy() should return an unextensible proxy object
<   ․ ObjectMonitor .proxy() should return an unextensible proxy object
<     ObjectMonitor .proxy() should not provide a map proxy for id-like objects
<   ․ ObjectMonitor .proxy() should not provide a map proxy for id-like objects
<     ObjectMonitor .proxy() should not provide a map proxy for id-like nested objects
<   ․ ObjectMonitor .proxy() should not provide a map proxy for id-like nested objects
<     ObjectMonitor .proxy() ._replaceWith(obj) should replace the underlying object with the given one
<   ․ ObjectMonitor .proxy() ._replaceWith(obj) should replace the underlying object with the given one
<     ObjectMonitor .isDirty() should indicate if a change to the object has been made since the last time it has been called
<   ․ ObjectMonitor .isDirty() should indicate if a change to the object has been made since the last time it has been called
<     ObjectMonitor .hash() should return a unique string representing the content of the object
<   ․ ObjectMonitor .hash() should return a unique string representing the content of the object
<     ObjectMonitor .hash() should work regardless of dirty testing
<   ․ ObjectMonitor .hash() should work regardless of dirty testing
<     ObjectMonitor .seal(obj) [static] should make the given object unmodifiable
<   ․ ObjectMonitor .seal(obj) [static] should make the given object unmodifiable
<     ObjectMonitor .seal(obj) [static] should place the object's hash as the $ property of the object
<   ․ ObjectMonitor .seal(obj) [static] should place the object's hash as the $ property of the object
<     ObjectMonitor .seal(obj) [static] should return the hash
<   ․ ObjectMonitor .seal(obj) [static] should return the hash
<     ObjectMonitor .seal(obj) [static] should allow an object to be sealed multiple times
<   ․ ObjectMonitor .seal(obj) [static] should allow an object to be sealed multiple times
<     ObjectMonitor .revision() should return the object's revision number, one that icrements with each change
<   ․ ObjectMonitor .revision() should return the object's revision number, one that icrements with each change
<     ObjectMonitor .json() should return a JSON representation of the object
<   ․ ObjectMonitor .json() should return a JSON representation of the object
<     ObjectMonitor .object() should provide an unprovisioned access to the object
<   ․ ObjectMonitor .object() should provide an unprovisioned access to the object
<     ObjectTestBed .trans(p) should apply a patch, returning the result
<   ․ ObjectTestBed .trans(p) should apply a patch, returning the result
<     ObjectTestBed .trans(p) reversibilityChecker should fail for non-reversible transformations
<   ․ ObjectTestBed .trans(p) reversibilityChecker should fail for non-reversible transformations
<     ObjectTestBed .trans(p) commutativityChecker should fail for independent transformations that do not commute
<   ․ ObjectTestBed .trans(p) commutativityChecker should fail for independent transformations that do not commute
<     ObjectTestBed .trans(p) commutativityChecker should not fail when the transformations are not independent
<   ․ ObjectTestBed .trans(p) commutativityChecker should not fail when the transformations are not independent
<     ObjectTestBed .trans(p) commutativityChecker should fail when for independent p1 and p2, one permutation conflicts
<   ․ ObjectTestBed .trans(p) commutativityChecker should fail when for independent p1 and p2, one permutation conflicts
<     RootStore .init(type, args) should return an initial version ID of a new object
<   ․ RootStore .init(type, args) should return an initial version ID of a new object
<     RootStore .trans(v, p, u) -> {v,r} should call a patch method and return its returned value
<   ․ RootStore .trans(v, p, u) -> {v,r} should call a patch method and return its returned value
<     RootStore .trans(v, p, u) -> {v,r} should apply the effect set internally
<   ․ RootStore .trans(v, p, u) -> {v,r} should apply the effect set internally
<     RootStore .trans(v, p, u) -> {v,r} should return the return value of the original patch
<   ․ RootStore .trans(v, p, u) -> {v,r} should return the return value of the original patch
<     SequenceStoreFactory .createSequenceStore() should return a new sequence store
<   ․ SequenceStoreFactory .createSequenceStore() should return a new sequence store
<     SequenceStoreFactory .createSequenceStore() .append(obj) should append an object to a sequence
<   ․ SequenceStoreFactory .createSequenceStore() .append(obj) should append an object to a sequence
<     SequenceStoreFactory .createSequenceStore() .append(obj) should append an entire sequence if given its hash
<   ․ SequenceStoreFactory .createSequenceStore() .append(obj) should append an entire sequence if given its hash
<     SequenceStoreFactory .createSequenceStore() .append(obj) should append a sequence consisting of a single object when given its hash
<   ․ SequenceStoreFactory .createSequenceStore() .append(obj) should append a sequence consisting of a single object when given its hash
<     SequenceStoreFactory .createSequenceStore() .isEmpty() should indicate if the sequence is empty
<   ․ SequenceStoreFactory .createSequenceStore() .isEmpty() should indicate if the sequence is empty
<     SequenceStoreFactory .createSequenceStore() .shift() should remove the first element from the sequence and return it
<   ․ SequenceStoreFactory .createSequenceStore() .shift() should remove the first element from the sequence and return it
<     SequenceStoreFactory .createSequenceStore() .hash() should return an empty string if the sequence is empty
<   ․ SequenceStoreFactory .createSequenceStore() .hash() should return an empty string if the sequence is empty
<     SequenceStoreFactory .createSequenceStore() .hash() should return the object hash, assuming only one object in the sequence
<   ․ SequenceStoreFactory .createSequenceStore() .hash() should return the object hash, assuming only one object in the sequence
<     SequenceStoreFactory .createSequenceStore() .hash() should return a hash unique to the sequence for sequence size larger than 1
<   ․ SequenceStoreFactory .createSequenceStore() .hash() should return a hash unique to the sequence for sequence size larger than 1
<     SequenceStoreFactory .createSequenceStore() .hash() should provide the same hash if the only element in a sequence is a hash of another sequence
<   ․ SequenceStoreFactory .createSequenceStore() .hash() should provide the same hash if the only element in a sequence is a hash of another sequence
<     SimpleObjectStore should avoid running the patch method again if the patch has already been applied on an identical object
<   ․ SimpleObjectStore should avoid running the patch method again if the patch has already been applied on an identical object
<     SimpleObjectStore .init(type, args) should return a version ID of a newly created object
<   ․ SimpleObjectStore .init(type, args) should return a version ID of a newly created object
<     SimpleObjectStore .trans(v, p, u) -> {v, r, eff} should return the value returned from the method corresponding to patch p
<   ․ SimpleObjectStore .trans(v, p, u) -> {v, r, eff} should return the value returned from the method corresponding to patch p
<     SimpleObjectStore .trans(v, p, u) -> {v, r, eff} should pass the patch and u flag as parameters to the called method
<   ․ SimpleObjectStore .trans(v, p, u) -> {v, r, eff} should pass the patch and u flag as parameters to the called method
<     SimpleObjectStore .trans(v, p, u) -> {v, r, eff} should replace the object with another if replaced with its ID
<   ․ SimpleObjectStore .trans(v, p, u) -> {v, r, eff} should replace the object with another if replaced with its ID
<     SimpleObjectStore context .init(type, args) should initialize an object with the given type and args and return its version ID
<   ․ SimpleObjectStore context .init(type, args) should initialize an object with the given type and args and return its version ID
<     SimpleObjectStore context .trans(v, p, u) -> {v,r,eff} should transform a version and return the new version ID and result
<   ․ SimpleObjectStore context .trans(v, p, u) -> {v,r,eff} should transform a version and return the new version ID and result
<     SimpleObjectStore context .conflict(msg) should throw an exception with .isConflict set to true
<   ․ SimpleObjectStore context .conflict(msg) should throw an exception with .isConflict set to true
<     SimpleObjectStore context .effect(p) should add patch p to the effect sequence
<   ․ SimpleObjectStore context .effect(p) should add patch p to the effect sequence
<     SimpleObjectStore context .effect(p) should add patches to the effect set even when called from a nested transformation
<   ․ SimpleObjectStore context .effect(p) should add patches to the effect set even when called from a nested transformation
<     SimpleObjectStore context .self() should return the version ID of the object prior to this patch application
<   ․ SimpleObjectStore context .self() should return the version ID of the object prior to this patch application
<     SimpleQueue should retrieve elements in the same order they were entered
<   ․ SimpleQueue should retrieve elements in the same order they were entered
<     atom should allow setting and getting a value
<   ․ atom should allow setting and getting a value
<     counter should add the given amount to the counter and return the value
<   ․ counter should add the given amount to the counter and return the value
<
<   69 passing (93ms)
<