From 096c671887c0c526b1138deba5344004ab2587e8 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Fri, 4 Mar 2022 09:07:40 +0100 Subject: [PATCH] Pruning: Relax too strong assertion: PRUNED => !ARMED If two Connect stages are sequenced, both sides can become ARMED. However, that means that the wave of PRUNED status updates, shouldn't overwrite a present ARMED state. Added unit test. --- core/src/storage.cpp | 5 +++-- core/test/test_pruning.cpp | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/core/src/storage.cpp b/core/src/storage.cpp index bd0211d9..42c7d8ff 100644 --- a/core/src/storage.cpp +++ b/core/src/storage.cpp @@ -83,8 +83,9 @@ bool InterfaceState::Priority::operator<(const InterfaceState::Priority& other) } void InterfaceState::updatePriority(const InterfaceState::Priority& priority) { - // Never overwrite ARMED with PRUNED: PRUNED => !ARMED - assert(priority.status() != InterfaceState::Status::PRUNED || priority_.status() != InterfaceState::Status::ARMED); + // Never overwrite ARMED with PRUNED + if (priority.status() == InterfaceState::Status::PRUNED && priority_.status() == InterfaceState::Status::ARMED) + return; if (owner()) { owner()->updatePriority(this, priority); diff --git a/core/test/test_pruning.cpp b/core/test/test_pruning.cpp index d386f1a3..b26ac527 100644 --- a/core/test/test_pruning.cpp +++ b/core/test/test_pruning.cpp @@ -193,3 +193,17 @@ TEST_F(Pruning, PropagateFromParallelContainerMultiplePaths) { // the failure in one branch of Alternatives must not prune computing back EXPECT_EQ(back->runs_, 1u); } + +TEST_F(Pruning, TwoConnects) { + add(t, new GeneratorMockup({ 0 })); + add(t, new ForwardMockup({ INF })); + add(t, new ConnectMockup()); + + add(t, new GeneratorMockup()); + add(t, new ConnectMockup()); + + add(t, new GeneratorMockup()); + add(t, new ForwardMockup()); + + EXPECT_FALSE(t.plan()); +}