105 lines
11 KiB
JSON
105 lines
11 KiB
JSON
[
|
|
{
|
|
"test": "test_convoy_auto_settings",
|
|
"exit_code": 0,
|
|
"seconds": 0.84,
|
|
"output": "PASS: actual read migrates old valid settings, preserves explicit disabled state, rejects invalid data; next-round feedback and fixed menu remain honest\n"
|
|
},
|
|
{
|
|
"test": "test_convoy_startup",
|
|
"exit_code": 0,
|
|
"seconds": 0.41,
|
|
"output": "PASS: actual automatic convoy timing/authority/admission/one-attempt/manual-task/stop policy; native deployment unproved\n"
|
|
},
|
|
{
|
|
"test": "test_convoy_admission",
|
|
"exit_code": 0,
|
|
"seconds": 1.24,
|
|
"output": "PASS: actual native readiness exact membership, one-time per-vehicle ledger admission/reservation, partial readiness retry without duplicate records and one-pass56-item cargo allocation without replenishment\nPASS: actual per-vehicle readiness reasons, native agent/activity counts, intended-seat diagnostics, five-second throttle and read-only observation\n"
|
|
},
|
|
{
|
|
"test": "test_convoy_budget",
|
|
"exit_code": 0,
|
|
"seconds": 0.48,
|
|
"output": "PASS: actual convoy receipt identity/one-use, shared60-body and128-formation caps, outstanding/native-ledger accounting, exact10-body composition, source reuse, mode/client guards and no consumed receipt refunds\n"
|
|
},
|
|
{
|
|
"test": "test_supply_budget_admission",
|
|
"exit_code": 1,
|
|
"seconds": 0.54,
|
|
"output": "/tmp/err-policy-t7_uvd66/check.cpp: In member function \u2018bool Startup::StartOne()\u2019:\n/tmp/err-policy-t7_uvd66/check.cpp:153:20: error: \u2018m_Searching\u2019 was not declared in this scope\n 153 | if (m_Stopped || m_Searching || !Replication::IsServer() || !m_Mode || m_Mode != ERR_GameMode::Get() || !m_Mode->Active() || m_Service->Count() >= m_Target) return false;\n | ^~~~~~~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:154:3: error: \u2018m_StartingCount\u2019 was not declared in this scope\n 154 | m_StartingCount = m_Service->Count();\n | ^~~~~~~~~~~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:155:3: error: \u2018m_Source\u2019 was not declared in this scope\n 155 | m_Source = \"supply-convoy-\" + (m_StartingCount + 1).ToString();\n | ^~~~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:159:47: error: \u2018m_Low\u2019 was not declared in this scope\n 159 | GetGame()->GetWorldEntity()->GetWorldBounds(m_Low, m_High);\n | ^~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:159:54: error: \u2018m_High\u2019 was not declared in this scope\n 159 | GetGame()->GetWorldEntity()->GetWorldBounds(m_Low, m_High);\n | ^~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:160:3: error: \u2018m_Separation\u2019 was not declared in this scope\n 160 | m_Separation = Math::Min(1000, Math::Max(m_High[0] - m_Low[0], m_High[2] - m_Low[2]) * 0.1);\n | ^~~~~~~~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:161:3: error: \u2018m_FindingBases\u2019 was not declared in this scope; did you mean \u2018FindBases\u2019?\n 161 | m_FindingBases = m_Bases.Count() < 2;\n | ^~~~~~~~~~~~~~\n | FindBases\n/tmp/err-policy-t7_uvd66/check.cpp:162:33: error: \u2018struct Array<vector>\u2019 has no member named \u2018Clear\u2019; did you mean \u2018clear\u2019?\n 162 | if (m_FindingBases) { m_Bases.Clear(); m_BaseCursor = 0; }\n | ^~~~~\n | clear\n/tmp/err-policy-t7_uvd66/check.cpp:162:42: error: \u2018m_BaseCursor\u2019 was not declared in this scope\n 162 | if (m_FindingBases) { m_Bases.Clear(); m_BaseCursor = 0; }\n | ^~~~~~~~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:163:3: error: \u2018m_SeedAttempt\u2019 was not declared in this scope; did you mean \u2018m_Attempts\u2019?\n 163 | m_SeedAttempt = 0; m_Survey = nullptr; m_Searching = true;\n | ^~~~~~~~~~~~~\n | m_Attempts\n/tmp/err-policy-t7_uvd66/check.cpp:163:22: error: \u2018m_Survey\u2019 was not declared in this scope\n 163 | m_SeedAttempt = 0; m_Survey = nullptr; m_Searching = true;\n | ^~~~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:163:42: error: \u2018m_Searching\u2019 was not declared in this scope\n 163 | m_SeedAttempt = 0; m_Survey = nullptr; m_Searching = true;\n | ^~~~~~~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:165:14: error: \u2018struct Game\u2019 has no member named \u2018GetCallqueue\u2019\n 165 | GetGame()->GetCallqueue().CallLater(SearchStep, 20, true);\n | ^~~~~~~~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:165:39: error: \u2018SearchStep\u2019 was not declared in this scope\n 165 | GetGame()->GetCallqueue().CallLater(SearchStep, 20, true);\n | ^~~~~~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp: In member function \u2018void Startup::Tick(float, bool)\u2019:\n/tmp/err-policy-t7_uvd66/check.cpp:188:20: error: \u2018m_Searching\u2019 was not declared in this scope\n 188 | if (m_Stopped || m_Searching || !m_Automatic || m_Target == 0 || m_Attempts >= 120 || m_Service->Count() >= m_Target || !ERR_ForceRules::Finite(now) || now < 0) return;\n | ^~~~~~~~~~~\n/tmp/err-policy-t7_uvd66/check.cpp:196:8: error: \u2018m_Searching\u2019 was not declared in this scope\n 196 | if (!m_Searching && m_Attempts == 120 && m_Service->Count() < m_Target) ERR_HQ::Event(\"CONVOY STARTUP\", \"bounded startup attempts exhausted; existing crews retained, no replacements. \" + Status());\n | ^~~~~~~~~~~\nTraceback (most recent call last):\n File \"/home/jakub/devel/escapistsrereintroduced/tests/test_supply_budget_admission.py\", line 29, in <module>\n run(r'''\n ~~~^^^^^\n #include <cassert>\n ^^^^^^^^^^^^^^^^^^\n ...<82 lines>...\n }\n ^\n ''')\n ^^^^\n File \"/home/jakub/devel/escapistsrereintroduced/tests/policy_harness.py\", line 13, in run\n subprocess.run(['g++','-std=c++17','-Wall','-Werror',str(p/'check.cpp'),'-o',str(p/'check')],check=True)\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/lib/python3.14/subprocess.py\", line 578, in run\n raise CalledProcessError(retcode, process.args,\n output=stdout, stderr=stderr)\nsubprocess.CalledProcessError: Command '['g++', '-std=c++17', '-Wall', '-Werror', '/tmp/err-policy-t7_uvd66/check.cpp', '-o', '/tmp/err-policy-t7_uvd66/check']' returned non-zero exit status 1.\n"
|
|
},
|
|
{
|
|
"test": "test_convoy_lifecycle",
|
|
"exit_code": 0,
|
|
"seconds": 0.75,
|
|
"output": "PASS: actual native seated-group arrival outside35m, native waypoint removal, idempotent advance, and convoy waypoint idempotence/arrival/deadline, missing/dead/captured/reparented crew refusal, failed native waypoint release, original vehicle/member preservation and no replacement\n"
|
|
},
|
|
{
|
|
"test": "test_convoy_survivors",
|
|
"exit_code": 0,
|
|
"seconds": 0.49,
|
|
"output": "PASS: actual convoy/team Release retains original active survivors and HQ identity, rejects takeover/terminal/unknown roster, preserves exact logistics quarantine and normal eligibility\n"
|
|
},
|
|
{
|
|
"test": "test_convoy_column",
|
|
"exit_code": 0,
|
|
"seconds": 2.56,
|
|
"output": "PASS: production convoy spacing, physical arrival, stable follower targets, supply ownership, leader promotion and bounded stuck recovery\nPASS: convoy combat keeps native manoeuvres for unchanged contacts and refreshes when contact moves\nPASS: native convoy proof excludes pre-departure movement and ends via explicit fixture reset, not prohibited player death\nPASS: boarding retries only after approach/seat progress stops, capped at three, with delayed native reissue and completed-team preservation\nPASS: slow only owned vehicles near fit dismounted infantry; ignore passengers, casualties and released teams/vehicles\nPASS: restore missing native driving registration only for healthy owned seated crews; preserve existing association and refuse invalid/released vehicles\nPASS: actual convoy support preserves visual cover and ongoing approach, retries masked arrived positions, withholds unsafe moves and preserves ammo withdrawal\nPASS: production support geometry rejects occupied, disallowed, blocked and too-close positions; only explicit intermediate approaches waive the firing-lane requirement\n"
|
|
},
|
|
{
|
|
"test": "test_convoy_combat",
|
|
"exit_code": 0,
|
|
"seconds": 1.04,
|
|
"output": "PASS: actual delivered cover freshness/lineage/replay and canonical executor; owned waypoint-only hold, one resume at preserved route index, invalid ownership/crew/ledger refusal and fail-closed native recreation\n"
|
|
},
|
|
{
|
|
"test": "test_convoy_intercept_pair",
|
|
"exit_code": 0,
|
|
"seconds": 1.03,
|
|
"output": "PASS: actual typed original BMP singleton, loss/footprint/custody guards and native cancellation, UAZ-only pair admission, rollback, native allocation/revocation boundaries, per-member ownership, hold and expiry\n"
|
|
},
|
|
{
|
|
"test": "test_hq_convoy_dispatch",
|
|
"exit_code": 0,
|
|
"seconds": 0.87,
|
|
"output": "PASS: actual authenticated convoy dispatch, active/ready admission gates, canonical receipt, safe unconsumed preflight retry, pool refusal, retained partial failure and consumed no-retry\n"
|
|
},
|
|
{
|
|
"test": "test_hq_convoy_combat",
|
|
"exit_code": 0,
|
|
"seconds": 0.6,
|
|
"output": "HQ convoy delivered-report planning and downlink regressions passed\n"
|
|
},
|
|
{
|
|
"test": "test_hq_multiconvoy_supply",
|
|
"exit_code": 0,
|
|
"seconds": 0.51,
|
|
"output": "PASS: actual HQ rotates finite donors, skips unavailable/contacted trucks, uses delivered reports and dispatches at most one trip per planning cadence\n"
|
|
},
|
|
{
|
|
"test": "test_hq_mounted_dispatch",
|
|
"exit_code": 0,
|
|
"seconds": 1.28,
|
|
"output": "actual mounted HQ dispatch planning, radio, ownership and lifecycle checks passed\n"
|
|
},
|
|
{
|
|
"test": "test_hq_mounted_intercept",
|
|
"exit_code": 0,
|
|
"seconds": 0.67,
|
|
"output": "PASS: actual mounted intercept eligibility/order chronology, fixed destinations, native road selection bounds, width, segment heading, clearance and settlement delegation; no native driving claim\n"
|
|
},
|
|
{
|
|
"test": "test_hq_mounted_intercept_pair",
|
|
"exit_code": 0,
|
|
"seconds": 0.66,
|
|
"output": "PASS: actual paired arc geometry,40m/80m spacing, separate original polylines, both-position validation and128road/4096segment budget; no native driving proof\n"
|
|
},
|
|
{
|
|
"test": "test_performance_comparison",
|
|
"exit_code": 0,
|
|
"seconds": 2.21,
|
|
"output": "...............\n----------------------------------------------------------------------\nRan 15 tests in 2.135s\n\nOK\n"
|
|
}
|
|
]
|