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); } } }