public void RegisterMemoizedFunctionSmokeTest() { var input = new[] { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; var output = new[] { 5, 5, 5, 5, 5, 10, 10, 10, 10, 10 }; var sched = new EventLoopScheduler(); var results = new List <Timestamped <int> >(); var start = sched.Now; sched.With(_ => { var fixture = new ReactiveAsyncCommand(null, 5, sched); fixture.RegisterMemoizedFunction(x => { Thread.Sleep(1000); return(((int)x) * 5); }, 50, null, sched) .Timestamp() .Subscribe(x => results.Add(x)); Assert.True(fixture.CanExecute(1)); foreach (var i in input) { Assert.True(fixture.CanExecute(i)); fixture.Execute(i); } Thread.Sleep(2500); }); Assert.Equal(10, results.Count); results.Select(x => x.Timestamp - start) .Run(x => { }); output.AssertAreEqual(results.Select(x => x.Value)); Assert.False(results.Any(x => x.Timestamp - start > new TimeSpan(0, 0, 3))); }
public void MakeSureMemoizedReleaseFuncGetsCalled() { var input = new[] { 1, 1, 2, 2, 1, 1, 3, 3 }; var output = new[] { 5, 5, 10, 10, 5, 5, 15, 15 }; var fixture = new ReactiveAsyncCommand(null, 0); var results = new List<Timestamped<int>>(); var released = new List<int>(); fixture.RegisterMemoizedFunction<int>(x => { Thread.Sleep(250); return ((int)x) * 5; }, 2, x => released.Add(x)) .Timestamp() .DebugObservable() .Subscribe(x => results.Add(x)); Assert.IsTrue(fixture.CanExecute(1)); var start = DateTimeOffset.Now; foreach(var i in input) { Assert.IsTrue(fixture.CanExecute(i)); fixture.Execute(i); } Thread.Sleep(1000); this.Log().Info("Timestamp Deltas"); results.Select(x => x.Timestamp - start) .Run(x => this.Log().Info(x)); this.Log().Info("Release list"); released.Run(x => this.Log().Info(x)); output.Zip(results.Select(x => x.Value), (expected, actual) => new { expected, actual }) .Run(x => Assert.AreEqual(x.expected, x.actual)); Assert.IsTrue(results.Count == 8); Assert.IsTrue(released.Count == 1); Assert.IsTrue(released[0] == 2*5); }
public void MakeSureMemoizedReleaseFuncGetsCalled() { //Assert.True(false, "When an item gets evicted from the cache before it has a chance to complete, it deadlocks. Fix it."); var input = new[] { 1, 1, 2, 2, 1, 1, 3, 3 }; var sched = new EventLoopScheduler(); var fixture = new ReactiveAsyncCommand(); var results = new List <Timestamped <int> >(); var released = new List <int>(); fixture.RegisterMemoizedFunction(x => { Thread.Sleep(250); return(((int)x) * 5); }, 2, x => released.Add(x), sched) .Timestamp() .DebugObservable() .Subscribe(x => results.Add(x)); Assert.True(fixture.CanExecute(1)); var start = DateTimeOffset.Now; foreach (var i in input) { Assert.True(fixture.CanExecute(i)); fixture.Execute(i); } Thread.Sleep(1000); this.Log().Info("Timestamp Deltas"); results.Select(x => x.Timestamp - start) .Run(x => this.Log().Info(x)); this.Log().Info("Release list"); released.Run(x => this.Log().Info(x)); Assert.True(results.Count == 8); Assert.True(released.Count == 1); Assert.True(released[0] == 2 * 5); }
public void RegisterMemoizedFunctionSmokeTest() { var input = new[] { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; var output = new[] { 5, 5, 5, 5, 5, 10, 10, 10, 10, 10 }; var fixture = new ReactiveAsyncCommand(null, 0); var results = new List<Timestamped<int>>(); fixture.RegisterMemoizedFunction<int>(x => { Thread.Sleep(1000); return ((int)x) * 5; }) .Timestamp() .DebugObservable() .Subscribe(x => results.Add(x)); Assert.IsTrue(fixture.CanExecute(1)); var start = DateTimeOffset.Now; foreach(var i in input) { Assert.IsTrue(fixture.CanExecute(i)); fixture.Execute(i); } Thread.Sleep(2500); Assert.IsTrue(results.Count == 10); this.Log().Info("Timestamp Deltas"); results.Select(x => x.Timestamp - start) .Run(x => this.Log().Info(x)); output.AssertAreEqual(results.Select(x => x.Value)); Assert.IsFalse(results.Any(x => x.Timestamp - start > new TimeSpan(0, 0, 3))); }
public void RegisterMemoizedFunctionSmokeTest() { var input = new[] { 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; var output = new[] { 5, 5, 5, 5, 5, 10, 10, 10, 10, 10 }; var sched = new EventLoopScheduler(); var results = new List<Timestamped<int>>(); var start = sched.Now; sched.With(_ => { var fixture = new ReactiveAsyncCommand(null, 5, sched); fixture.RegisterMemoizedFunction(x => { Thread.Sleep(1000); return ((int) x) * 5; }, 50, null, sched) .Timestamp() .Subscribe(x => results.Add(x)); Assert.True(fixture.CanExecute(1)); foreach (var i in input) { Assert.True(fixture.CanExecute(i)); fixture.Execute(i); } Thread.Sleep(2500); }); Assert.Equal(10, results.Count); results.Select(x => x.Timestamp - start) .Run(x => { }); output.AssertAreEqual(results.Select(x => x.Value)); Assert.False(results.Any(x => x.Timestamp - start > new TimeSpan(0, 0, 3))); }
public void MakeSureMemoizedReleaseFuncGetsCalled() { //Assert.True(false, "When an item gets evicted from the cache before it has a chance to complete, it deadlocks. Fix it."); var input = new[] { 1, 1, 2, 2, 1, 1, 3, 3 }; var sched = new EventLoopScheduler(); var fixture = new ReactiveAsyncCommand(); var results = new List<Timestamped<int>>(); var released = new List<int>(); fixture.RegisterMemoizedFunction(x => { Thread.Sleep(250); return ((int)x) * 5; }, 2, x => released.Add(x), sched) .Timestamp() .DebugObservable() .Subscribe(x => results.Add(x)); Assert.True(fixture.CanExecute(1)); var start = DateTimeOffset.Now; foreach(var i in input) { Assert.True(fixture.CanExecute(i)); fixture.Execute(i); } Thread.Sleep(1000); this.Log().Info("Timestamp Deltas"); results.Select(x => x.Timestamp - start) .Run(x => this.Log().Info(x)); this.Log().Info("Release list"); released.Run(x => this.Log().Info(x)); Assert.True(results.Count == 8); Assert.True(released.Count == 1); Assert.True(released[0] == 2*5); }