mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
[commands] Define order of parallel groups (#6602)
This commit is contained in:
@@ -52,6 +52,31 @@ TEST_F(CommandDecoratorTest, Until) {
|
||||
EXPECT_FALSE(scheduler.IsScheduled(command));
|
||||
}
|
||||
|
||||
TEST_F(CommandDecoratorTest, UntilOrder) {
|
||||
CommandScheduler scheduler = GetScheduler();
|
||||
|
||||
bool firstHasRun = false;
|
||||
bool firstWasPolled = false;
|
||||
|
||||
auto first = FunctionalCommand([] {}, [&firstHasRun] { firstHasRun = true; },
|
||||
[](bool interrupted) {},
|
||||
[&firstWasPolled] {
|
||||
firstWasPolled = true;
|
||||
return true;
|
||||
});
|
||||
auto command = std::move(first).Until([&firstHasRun, &firstWasPolled] {
|
||||
EXPECT_TRUE(firstHasRun);
|
||||
EXPECT_TRUE(firstWasPolled);
|
||||
return true;
|
||||
});
|
||||
|
||||
scheduler.Schedule(command);
|
||||
scheduler.Run();
|
||||
|
||||
EXPECT_TRUE(firstHasRun);
|
||||
EXPECT_TRUE(firstWasPolled);
|
||||
}
|
||||
|
||||
TEST_F(CommandDecoratorTest, OnlyWhile) {
|
||||
CommandScheduler scheduler = GetScheduler();
|
||||
|
||||
@@ -70,6 +95,31 @@ TEST_F(CommandDecoratorTest, OnlyWhile) {
|
||||
EXPECT_FALSE(scheduler.IsScheduled(command));
|
||||
}
|
||||
|
||||
TEST_F(CommandDecoratorTest, OnlyWhileOrder) {
|
||||
CommandScheduler scheduler = GetScheduler();
|
||||
|
||||
bool firstHasRun = false;
|
||||
bool firstWasPolled = false;
|
||||
|
||||
auto first = FunctionalCommand([] {}, [&firstHasRun] { firstHasRun = true; },
|
||||
[](bool interrupted) {},
|
||||
[&firstWasPolled] {
|
||||
firstWasPolled = true;
|
||||
return true;
|
||||
});
|
||||
auto command = std::move(first).Until([&firstHasRun, &firstWasPolled] {
|
||||
EXPECT_TRUE(firstHasRun);
|
||||
EXPECT_TRUE(firstWasPolled);
|
||||
return false;
|
||||
});
|
||||
|
||||
scheduler.Schedule(command);
|
||||
scheduler.Run();
|
||||
|
||||
EXPECT_TRUE(firstHasRun);
|
||||
EXPECT_TRUE(firstWasPolled);
|
||||
}
|
||||
|
||||
TEST_F(CommandDecoratorTest, IgnoringDisable) {
|
||||
CommandScheduler scheduler = GetScheduler();
|
||||
|
||||
@@ -203,6 +253,85 @@ TEST_F(CommandDecoratorTest, RaceWith) {
|
||||
EXPECT_FALSE(scheduler.IsScheduled(group));
|
||||
}
|
||||
|
||||
TEST_F(CommandDecoratorTest, DeadlineForOrder) {
|
||||
CommandScheduler scheduler = GetScheduler();
|
||||
|
||||
bool dictatorHasRun = false;
|
||||
bool dictatorWasPolled = false;
|
||||
|
||||
auto dictator =
|
||||
FunctionalCommand([] {}, [&dictatorHasRun] { dictatorHasRun = true; },
|
||||
[](bool interrupted) {},
|
||||
[&dictatorWasPolled] {
|
||||
dictatorWasPolled = true;
|
||||
return true;
|
||||
});
|
||||
auto other = RunCommand([&dictatorHasRun, &dictatorWasPolled] {
|
||||
EXPECT_TRUE(dictatorHasRun);
|
||||
EXPECT_TRUE(dictatorWasPolled);
|
||||
});
|
||||
|
||||
auto group = std::move(dictator).DeadlineFor(std::move(other).ToPtr());
|
||||
|
||||
scheduler.Schedule(group);
|
||||
scheduler.Run();
|
||||
|
||||
EXPECT_TRUE(dictatorHasRun);
|
||||
EXPECT_TRUE(dictatorWasPolled);
|
||||
}
|
||||
|
||||
TEST_F(CommandDecoratorTest, AlongWithOrder) {
|
||||
CommandScheduler scheduler = GetScheduler();
|
||||
|
||||
bool firstHasRun = false;
|
||||
bool firstWasPolled = false;
|
||||
|
||||
auto command1 = FunctionalCommand(
|
||||
[] {}, [&firstHasRun] { firstHasRun = true; }, [](bool interrupted) {},
|
||||
[&firstWasPolled] {
|
||||
firstWasPolled = true;
|
||||
return true;
|
||||
});
|
||||
auto command2 = RunCommand([&firstHasRun, &firstWasPolled] {
|
||||
EXPECT_TRUE(firstHasRun);
|
||||
EXPECT_TRUE(firstWasPolled);
|
||||
});
|
||||
|
||||
auto group = std::move(command1).AlongWith(std::move(command2).ToPtr());
|
||||
|
||||
scheduler.Schedule(group);
|
||||
scheduler.Run();
|
||||
|
||||
EXPECT_TRUE(firstHasRun);
|
||||
EXPECT_TRUE(firstWasPolled);
|
||||
}
|
||||
|
||||
TEST_F(CommandDecoratorTest, RaceWithOrder) {
|
||||
CommandScheduler scheduler = GetScheduler();
|
||||
|
||||
bool firstHasRun = false;
|
||||
bool firstWasPolled = false;
|
||||
|
||||
auto command1 = FunctionalCommand(
|
||||
[] {}, [&firstHasRun] { firstHasRun = true; }, [](bool interrupted) {},
|
||||
[&firstWasPolled] {
|
||||
firstWasPolled = true;
|
||||
return true;
|
||||
});
|
||||
auto command2 = RunCommand([&firstHasRun, &firstWasPolled] {
|
||||
EXPECT_TRUE(firstHasRun);
|
||||
EXPECT_TRUE(firstWasPolled);
|
||||
});
|
||||
|
||||
auto group = std::move(command1).RaceWith(std::move(command2).ToPtr());
|
||||
|
||||
scheduler.Schedule(group);
|
||||
scheduler.Run();
|
||||
|
||||
EXPECT_TRUE(firstHasRun);
|
||||
EXPECT_TRUE(firstWasPolled);
|
||||
}
|
||||
|
||||
TEST_F(CommandDecoratorTest, Unless) {
|
||||
CommandScheduler scheduler = GetScheduler();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user