예제 #1
0
        public void ChangeTrackerWithAddedElementsRemovedOverSeveralSynchronizations()
        {
            var storage = new InMemoryStorageEngine();
            var os      = ObjectStore2.New(storage);

            var ctw = new ChangeTrackerWrapper();

            os.Roots.Entangle(ctw);

            ctw.ChangeTracker.Append(1);
            ctw.ChangeTracker.Append(2);
            ctw.ChangeTracker.Append(3);
            ctw.ChangeTracker.Prepend(0);

            os.Persist();

            os  = ObjectStore2.Load(storage);
            ctw = os.Roots.Find <ChangeTrackerWrapper>();

            ctw.ValuesFromHead().SequenceEqual(new[] { 0, 1, 2, 3 }).ShouldBeTrue();
            ctw.ValuesFromTail().SequenceEqual(new[] { 3, 2, 1, 0 }).ShouldBeTrue();

            ctw.ChangeTracker.Head.Next.Remove();

            os.Persist();

            os  = ObjectStore2.Load(storage);
            ctw = os.Roots.Find <ChangeTrackerWrapper>();

            ctw.ValuesFromHead().SequenceEqual(new[] { 0, 2, 3 }).ShouldBeTrue();
            ctw.ValuesFromTail().SequenceEqual(new[] { 3, 2, 0 }).ShouldBeTrue();
        }
예제 #2
0
        public void ChangeTrackerWithNoChangesCanBePersistedAndLoadedAgain()
        {
            var storage = new InMemoryStorageEngine();
            var os      = ObjectStore2.New(storage);

            var ctw = new ChangeTrackerWrapper();

            os.Roots.Entangle(ctw);

            os.Persist();

            os  = ObjectStore2.Load(storage);
            ctw = os.Roots.Find <ChangeTrackerWrapper>();

            ctw.ValuesFromHead().Count().ShouldBe(0);
            ctw.ValuesFromTail().Count().ShouldBe(0);
        }
예제 #3
0
        public void ChangeTrackerWithNodeChangedAndRemovedBeforePersisted()
        {
            var storage = new InMemoryStorageEngine();
            var os      = ObjectStore2.New(storage);

            var ctw = new ChangeTrackerWrapper();

            os.Roots.Entangle(ctw);

            ctw.ChangeTracker.Append(1);
            ctw.ChangeTracker.Append(2);
            ctw.ChangeTracker.Head.Remove();

            os.Persist();

            os  = ObjectStore2.Load(storage);
            ctw = os.Roots.Find <ChangeTrackerWrapper>();
            ctw.ChangeTracker.Head.Value.ShouldBe(2);
            ctw.ChangeTracker.Tail.Value.ShouldBe(2);
        }
예제 #4
0
        public void ChangeTrackerWithSetNodeValueSurvivesPersistence()
        {
            var storage = new InMemoryStorageEngine();
            var os      = ObjectStore2.New(storage);

            var ctw = new ChangeTrackerWrapper();

            os.Roots.Entangle(ctw);

            ctw.ChangeTracker.Append(1);
            ctw.ChangeTracker.Append(2);
            os.Persist();

            os  = ObjectStore2.Load(storage);
            ctw = os.Roots.Find <ChangeTrackerWrapper>();

            ctw.ChangeTracker.Head.Value = 3;
            os.Persist();

            os  = ObjectStore2.Load(storage);
            ctw = os.Roots.Find <ChangeTrackerWrapper>();
            ctw.ValuesFromHead().SequenceEqual(new[] { 3, 2 }).ShouldBeTrue();
        }