Skip to content

Commit d4c8d37

Browse files
committed
Cover two edge cases.
1 parent 64b4e07 commit d4c8d37

1 file changed

Lines changed: 21 additions & 13 deletions

File tree

DependencyQueue.Tests/DependencyQueueTests.cs

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -753,10 +753,12 @@ public void Complete_NotDequeued()
753753
{
754754
using var queue = new Queue();
755755

756-
// would be invalid; a is unprovided
757-
// vvvvvvvvvvvvvvv
758-
var itemX = queue.Enqueue("x", value: new(), requires: ["a"], provides: ["b"]);
759-
var itemY = queue.Enqueue("y", value: new(), requires: ["b"], provides: ["c"]);
756+
// provided by another
757+
// required by another ↓
758+
// would be invalid; a is unprovided ↓ ↓
759+
// ↓ ↓ ↓
760+
var itemX = queue.Enqueue("x", value: new(), requires: ["a", "j", "k"], provides: ["b"]);
761+
var itemY = queue.Enqueue("y", value: new(), requires: ["b", "j"], provides: ["c", "k"]);
760762

761763
// Complete() works even if the queue is invalid or has not been validated
762764
//queue.ShouldBeValid();
@@ -766,24 +768,30 @@ public void Complete_NotDequeued()
766768

767769
// Before
768770
queue.ShouldNotHaveReadyItems();
769-
queue.ShouldHaveTopicCount(5);
771+
queue.ShouldHaveTopicCount(7);
770772
queue.ShouldHaveTopic("a", requiredBy: [itemX] );
771-
queue.ShouldHaveTopic("b", requiredBy: [itemY], providedBy: [itemX]);
772-
queue.ShouldHaveTopic("c", providedBy: [itemY]);
773-
queue.ShouldHaveTopic("x", providedBy: [itemX]);
774-
queue.ShouldHaveTopic("y", providedBy: [itemY]);
773+
queue.ShouldHaveTopic("b", requiredBy: [itemY], providedBy: [itemX]);
774+
queue.ShouldHaveTopic("c", providedBy: [itemY]);
775+
queue.ShouldHaveTopic("j", requiredBy: [itemX, itemY] );
776+
queue.ShouldHaveTopic("k", requiredBy: [itemX], providedBy: [itemY]);
777+
queue.ShouldHaveTopic("x", providedBy: [itemX]);
778+
queue.ShouldHaveTopic("y", providedBy: [itemY]);
775779

776780
// Complete an item that has been enqueued but not dequeued
777781
queue.Complete(itemX);
778782
// - Removes topic a because nothing else provides or requires it.
779783
// - Removes topics b and x because their only provider (x) completed.
784+
// - Does not remove topic j because it is still required by y
785+
// - Does not remove topic k because it is still provided by y
780786
// - Makes y ready because its only requirement (b) is now provided
781787

782788
// After
783-
queue.ShouldHaveReadyItems(itemY);
784-
queue.ShouldHaveTopicCount(2);
785-
queue.ShouldHaveTopic("c", providedBy: [itemY]);
786-
queue.ShouldHaveTopic("y", providedBy: [itemY]);
789+
queue.ShouldNotHaveReadyItems();
790+
queue.ShouldHaveTopicCount(4);
791+
queue.ShouldHaveTopic("c", providedBy: [itemY]);
792+
queue.ShouldHaveTopic("j", requiredBy: [itemY] );
793+
queue.ShouldHaveTopic("k", providedBy: [itemY]);
794+
queue.ShouldHaveTopic("y", providedBy: [itemY]);
787795
}
788796

789797
[Test]

0 commit comments

Comments
 (0)