using Xunit; using ZeroLevel.Services.Collections; namespace ZeroLevel.UnitTests { public class PriorityQueueTests { class TestItem { public string Value; } [Fact] public void AllItemsCorrectHandleTest() { // Arrange var q = new ZPriorityQueue(s => new PriorityQueueObjectHandleResult { IsCompleted = true, CanBeSkipped = false }); q.Append("s0", 0); q.Append("s1", 10); q.Append("s2", 4); q.Append("s3", 1); q.Append("s4", 6); q.Append("s5", 2); q.Append("s6", 7); // Assert Assert.Equal("s0", q.HandleCurrentItem()); Assert.Equal("s3", q.HandleCurrentItem()); Assert.Equal("s5", q.HandleCurrentItem()); Assert.Equal("s2", q.HandleCurrentItem()); Assert.Equal("s4", q.HandleCurrentItem()); Assert.Equal("s6", q.HandleCurrentItem()); Assert.Equal("s1", q.HandleCurrentItem()); } [Fact] public void SkipItemsHandleTest() { bool skipped = false; // Arrange var q = new ZPriorityQueue(s => { if (s.Equals("s5") && !skipped) { skipped = true; return new PriorityQueueObjectHandleResult { IsCompleted = false, CanBeSkipped = true }; } return new PriorityQueueObjectHandleResult { IsCompleted = true, CanBeSkipped = false }; }); q.Append("s0", 0); q.Append("s1", 10); q.Append("s2", 4); q.Append("s3", 1); q.Append("s4", 6); q.Append("s5", 2); q.Append("s6", 7); // Assert Assert.Equal("s0", q.HandleCurrentItem()); Assert.Equal("s3", q.HandleCurrentItem()); Assert.Equal("s2", q.HandleCurrentItem()); Assert.Equal("s5", q.HandleCurrentItem()); Assert.Equal("s4", q.HandleCurrentItem()); Assert.Equal("s6", q.HandleCurrentItem()); Assert.Equal("s1", q.HandleCurrentItem()); } [Fact] public void NoSkipItemsIncorrectHandleTest() { bool skipped = false; // Arrange var q = new ZPriorityQueue(s => { if (s.Equals("s5") && !skipped) { skipped = true; return new PriorityQueueObjectHandleResult { IsCompleted = false, CanBeSkipped = false }; } return new PriorityQueueObjectHandleResult { IsCompleted = true, CanBeSkipped = false }; }); q.Append("s0", 0); q.Append("s1", 10); q.Append("s2", 4); q.Append("s3", 1); q.Append("s4", 6); q.Append("s5", 2); q.Append("s6", 7); // Assert Assert.Equal("s0", q.HandleCurrentItem()); Assert.Equal("s3", q.HandleCurrentItem()); Assert.Equal(null, q.HandleCurrentItem()); Assert.Equal("s5", q.HandleCurrentItem()); Assert.Equal("s2", q.HandleCurrentItem()); Assert.Equal("s4", q.HandleCurrentItem()); Assert.Equal("s6", q.HandleCurrentItem()); Assert.Equal("s1", q.HandleCurrentItem()); } } }