From 39244a88a500d51ada0f8c33ccc3056848466d22 Mon Sep 17 00:00:00 2001
From: pwarszawski
Date: Sat, 7 Nov 2026 21:17:12 +0100
Subject: [PATCH] tests: wait for the pressure switches before notching up
full_power() notched up as soon as the controlling half had closed its line
contactors. In the ET42 test the locomotive brake is still at about 2.0 bar
then, right at the pressure switch threshold, so whether the second half
starts as well depended on thousandths of a bar in its cylinder: a half whose
switch is on when the controller leaves zero doesn't close its line
contactors until the controller is back at zero. Any change to the air
brakes could tip it either way (with the corrected ESt3 the second half
stayed off and the train reached 88.7 instead of 106 km/h).
The helper now waits, as a driver does, until no pressure switch in the
train cuts the start off.
---
tests/unit/scenario.cpp | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/tests/unit/scenario.cpp b/tests/unit/scenario.cpp
index b933a0ab5..4af8be18a 100644
--- a/tests/unit/scenario.cpp
+++ b/tests/unit/scenario.cpp
@@ -5,6 +5,21 @@
namespace test {
+namespace {
+
+// whether the pressure switch of a vehicle in the train still cuts the start off: a half of a locomotive whose
+// switch is on when the controller leaves zero doesn't close its line contactors until the controller is back at zero
+bool start_cut_off(consist &Train) {
+ for (std::size_t i = 0; i < Train.size(); ++i) {
+ if (Train[i].mover().ControlPressureSwitch) {
+ return true;
+ }
+ }
+ return false;
+}
+
+} // namespace
+
scenario::scenario(std::string Name, std::vector Channels, track const &Track) : m_name(std::move(Name)), m_channels(std::move(Channels)), m_track(Track) {
reseed_random();
}
@@ -53,6 +68,11 @@ void scenario::get_going() {
void scenario::full_power(double Seconds) {
auto &controlling{driver().controlling};
+ // as a driver does, wait for the brakes to let go far enough for every pressure switch of the train to allow the
+ // start; otherwise whether all the halves of a locomotive start hangs on thousandths of a bar of their cylinders
+ for (int i = 0; i < 120 && start_cut_off(m_train); ++i) {
+ wait(1.0);
+ }
controlling.IncMainCtrl(1);
for (int i = 0; i < 90 && false == controlling.StLinFlag; ++i) {
wait(1.0);