public void ComplexRemove()
        {
            TimeSpan?RemoveFunc(Person t)
            {
                if (t.Age <= 40)
                {
                    return(TimeSpan.FromSeconds(5));
                }

                if (t.Age <= 80)
                {
                    return(TimeSpan.FromSeconds(7));
                }

                return(null);
            }

            const int size = 100;

            Person[] items = Enumerable.Range(1, size).Select(i => new Person($"Name.{i}", i)).ToArray();
            _source.AddRange(items);

            var remover = _source.ExpireAfter(RemoveFunc, _scheduler).Subscribe();

            _scheduler.AdvanceBy(TimeSpan.FromMilliseconds(5010).Ticks);

            _source.Count.Should().Be(60, "40 items should have been removed from the cache");

            _scheduler.AdvanceBy(TimeSpan.FromSeconds(5).Ticks);
            _source.Count.Should().Be(20, "80 items should have been removed from the cache");

            remover.Dispose();
        }
예제 #2
0
        public void ComplexRemove()
        {
            Func <Person, TimeSpan?> removeFunc = t =>
            {
                if (t.Age <= 40)
                {
                    return(TimeSpan.FromSeconds(5));
                }

                if (t.Age <= 80)
                {
                    return(TimeSpan.FromSeconds(7));
                }
                return(null);
            };

            const int size = 100;

            Person[] items = Enumerable.Range(1, size).Select(i => new Person("Name.{0}".FormatWith(i), i)).ToArray();
            _source.AddRange(items);

            var remover = _source.ExpireAfter(removeFunc, _scheduler).Subscribe();

            _scheduler.AdvanceBy(TimeSpan.FromMilliseconds(5010).Ticks);

            Assert.AreEqual(60, _source.Count, "40 items should have been removed from the cache");

            _scheduler.AdvanceBy(TimeSpan.FromSeconds(5).Ticks);
            Assert.AreEqual(20, _source.Count, "80 items should have been removed from the cache");

            remover.Dispose();
        }
        public void CanHandleABatchOfUpdates()
        {
            var       remover = _source.ExpireAfter(p => TimeSpan.FromMilliseconds(100), _scheduler).Subscribe();
            const int size    = 100;

            Person[] items = Enumerable.Range(1, size).Select(i => new Person($"Name.{i}", i)).ToArray();

            _source.AddRange(items);
            _scheduler.AdvanceBy(TimeSpan.FromMilliseconds(200).Ticks);
            remover.Dispose();

            _results.Data.Count.Should().Be(0, "Should be no data in the cache");
            _results.Messages.Count.Should().Be(2, "Should be 2 updates");
            _results.Messages[0].Adds.Should().Be(100, "Should be 100 adds in the first message");
            _results.Messages[1].Removes.Should().Be(100, "Should be 100 removes in the second message");
        }