Ejemplo n.º 1
0
 public void AddOrUpdate(TTimer timer, Moment time)
 {
     lock (_lock) {
         var priority = GetPriority(time);
         _timers.AddOrUpdate(priority, timer);
     }
 }
        public void AddOrUpdateTest()
        {
            var heap = new RadixHeapSet <string>();

            heap.AddOrUpdate(5, "a");
            heap.AddOrUpdate(1, "b");
            heap.Count.Should().Be(2);
            heap.PeekMin().Value.Value.Should().Be("b");
            heap.ExtractMin().Value.Value.Should().Be("b");
            heap.Count.Should().Be(1);

            heap.AddOrUpdate(3, "a");
            heap.Count.Should().Be(1);
            heap.PeekMin().Value.Value.Should().Be("a");
            heap.ExtractMin().Value.Value.Should().Be("a");
        }
        public void UpdateMinPriorityTest()
        {
            var heap = new RadixHeapSet <int>();

            for (var i = 1; i < 100; i += 5)
            {
                heap.AddOrUpdate(i, i);
                heap.Count.Should().Be((i + 4) / 5);
                heap.PeekMin().Value.Value.Should().Be(1);
            }
            for (var i = 0; i < 95; i++)
            {
                var minSet = heap.ExtractMinSet(i);
                var isFit  = 0 == (i - 1) % 5;
                minSet.Count.Should().Be(isFit ? 1 : 0);
                if (isFit)
                {
                    minSet.Single().Value.Should().Be(i);
                }
            }
        }