public void PinnedOperatorsAreNotGarbageCollected() { var storage = new InMemoryStorageEngine(); var source = new Source <int>(); var valueHolder = new ValueHolder(); var stream = source.Do(valueHolder.SetValue).Pin(); var subscriptionHolder = new SubscriptionHolder(stream); source.Emit(25); valueHolder.Value.ShouldBe(25); subscriptionHolder.Value.ShouldBe(25); var store = ObjectStore.New(storage); store.Entangle(source); store.Entangle(valueHolder); store.Entangle(subscriptionHolder); store.Persist(); store = ObjectStore.Load(storage, true, new MockScheduler()); source = store.Resolve <Source <int> >(); valueHolder = store.Resolve <ValueHolder>(); subscriptionHolder = store.Resolve <SubscriptionHolder>(); source.Emit(100); valueHolder.Value.ShouldBe(100); subscriptionHolder.Value.ShouldBe(100); subscriptionHolder.Subscription.Dispose(); source.Emit(200); valueHolder.Value.ShouldBe(200); subscriptionHolder.Value.ShouldBe(100); store.Persist(); store = ObjectStore.Load(storage, true, new MockScheduler()); source = store.Resolve <Source <int> >(); valueHolder = store.Resolve <ValueHolder>(); subscriptionHolder = store.Resolve <SubscriptionHolder>(); source.Emit(300); valueHolder.Value.ShouldBe(300); subscriptionHolder.Value.ShouldBe(100); }
public void SubscriptionIsDisposedAfterAwaitableCompletes() { var storage = new InMemoryStorageEngine(); var os = ObjectStore.New(storage); var source = new Source <int>(); var awaitable = new CAwaitable(); var valueHolder = new ValueHolder <int>(); source.DisposeOn(awaitable).CallOnEvent(valueHolder.SetValue); source.Emit(1); valueHolder.Value.ShouldBe(1); os.Entangle(source); os.Entangle(awaitable); os.Entangle(valueHolder); os.Persist(); os = ObjectStore.Load(storage, true); source = os.Resolve <Source <int> >(); awaitable = os.Resolve <CAwaitable>(); valueHolder = os.Resolve <ValueHolder <int> >(); source.Emit(2); valueHolder.Value.ShouldBe(2); awaitable.SignalCompletion(); source.Emit(3); valueHolder.Value.ShouldBe(2); os.Persist(); os = ObjectStore.Load(storage, true); source = os.Resolve <Source <int> >(); awaitable = os.Resolve <CAwaitable>(); valueHolder = os.Resolve <ValueHolder <int> >(); source.Emit(4); valueHolder.Value.ShouldBe(2); }
public void StreamObserversAreDeserialized() { var storage = new InMemoryStorageEngine(); var source = new Source <int>(); var valueHolder = new ValueHolder(); source.Select(_ => _).CallOnEvent(valueHolder.SetValue); var store = ObjectStore.New(storage); store.Entangle(source); store.Entangle(valueHolder); store.Persist(); store = ObjectStore.Load(storage, true, (IScheduler) new MockScheduler()); source = store.Resolve <Source <int> >(); valueHolder = store.Resolve <ValueHolder>(); source.Emit(123); valueHolder.Value.ShouldBe(123); }
public ValueEmitter(ValueHolder valueHolder) => _valueHolder = valueHolder;
public ValueEmitter(Stream <int> s, ValueHolder valueHolder) { _valueHolder = valueHolder; s.CallOnEvent(AddValue); }