public void EnqueueDequeueKV() { var pq1 = new PriorityQueueDictionary <int, string>(); var pq2 = new PriorityQueueDictionary <int, string>(); for (int i = 10; i > 0; i--) { pq1.Enqueue(i, i.ToString()); pq2.Enqueue(i, i.ToString()); } var mt = MTRandom.Create(); for (int i = -1; i < 20; i++) { EnqueueDequeue(i); EnqueueDequeue(mt.Next()); } void EnqueueDequeue(int value) { pq2.Enqueue(value, value.ToString()); pq1.EnqueueDequeue(value, value.ToString()).Should().Be(pq2.Dequeue()); pq1.UnorderdKeys().ToArray().Should().BeEquivalentTo(pq2.UnorderdKeys().ToArray()); pq1.UnorderdValues().ToArray().Should().BeEquivalentTo(pq2.UnorderdValues().ToArray()); } }
public void DequeueEnqueueKV() { var pq1 = new PriorityQueueDictionary <int, string>(); var pq2 = new PriorityQueueDictionary <int, string>(); Func <int, string, (int, string)> func = (k, v) => (k * 2, (2 * k).ToString()); for (int i = 10; i > 0; i--) { pq1.Enqueue(i, i.ToString()); pq2.Enqueue(i, i.ToString()); } var mt = MTRandom.Create(); for (int i = -1; i < 20; i++) { EnqueueDequeue(); } void EnqueueDequeue() { var(k, v) = pq2.Dequeue(); var(ek, ev) = func(k, v); pq2.Enqueue(KeyValuePair.Create(ek, ev)); pq1.DequeueEnqueue(func); pq1.UnorderdKeys().ToArray().Should().BeEquivalentTo(pq2.UnorderdKeys().ToArray()); pq1.UnorderdValues().ToArray().Should().BeEquivalentTo(pq2.UnorderdValues().ToArray()); } }
public void SimpleKV() { var mt = MTRandom.Create(); for (int n = 0; n < 200; n++) { var list = new List <int>(); var pq = new PriorityQueueDictionary <long, int>(); for (int i = 0; i < n; i++) { var x = mt.Next(0, int.MaxValue); pq.Enqueue(x, -x); list.Add(x); pq.Count.Should().Be(list.Count).And.Be(i + 1); } pq.UnorderdKeys().ToArray().Should().HaveCount(n); pq.UnorderdValues().ToArray().Should().HaveCount(n); list.Sort(); foreach (var lx in list) { pq.Dequeue().Should().Be(KeyValuePair.Create((long)lx, -lx)); } pq.Count.Should().Be(0); list.Reverse(); foreach (var lx in list) { pq.Enqueue(-lx, lx); } foreach (var lx in list) { pq.TryDequeue(out var res).Should().BeTrue(); res.Should().Be(KeyValuePair.Create(-(long)lx, lx)); } pq.TryDequeue(out _).Should().BeFalse(); pq.Count.Should().Be(0); foreach (var lx in list) { pq.Enqueue(-lx, lx); } foreach (var lx in list) { pq.TryDequeue(out var key, out var val).Should().BeTrue(); key.Should().Be(-lx); val.Should().Be(lx); } pq.TryDequeue(out _, out _).Should().BeFalse(); pq.Count.Should().Be(0); } }