From 42146e81801ac93adac64ecc73fa69ce45f87617 Mon Sep 17 00:00:00 2001 From: milescoviello Date: Wed, 28 Oct 2026 04:02:42 +0000 Subject: [PATCH] test(libSceAjm.native): cover the statistics job sceAjmBatchJobGetStatistics appends Crimson Desert calls sceAjmBatchJobGetStatistics and no test reaches it. Run a batch that holds a statistics job followed by a format query of an uninitialized instance: the batch completes, the statistics job fills the 24 bytes of its result with zeros and leaves the bytes after them alone, and the query after it still reports its result. Co-Authored-By: Claude Opus 5.5 --- core/libs/tests/GuestAjm.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/core/libs/tests/GuestAjm.cpp b/core/libs/tests/GuestAjm.cpp index db284c0321..ab33944e4f 100644 --- a/core/libs/tests/GuestAjm.cpp +++ b/core/libs/tests/GuestAjm.cpp @@ -842,6 +842,23 @@ void TestGetInfo(std::uint32_t context) { Require(sceAjmInstanceDestroy(context, instance) == 0); } +void TestGetStatistics(std::uint32_t context) { + std::uint32_t instance = 0; + Require(sceAjmInstanceCreate(context, 1, 0, &instance) == 0); + std::vector batch(4096); + AjmBatchInfo info{}; + std::vector statistics(32, 0xaa); + FormatSideband format{-1, -1, 0xaaaaaaaau, 0xaaaaaaaau, 0xaaaaaaaau, 0xaaaaaaaau, 0xaaaaaaaau, 0xaaaaaaaau}; + Require(sceAjmBatchInitialize(batch.data(), batch.size(), &info) == 0); + Require(sceAjmBatchJobGetStatistics(&info, 1.0f, statistics.data()) == 0); + Require(sceAjmBatchJobGetInfo(&info, instance, &format) == 0); + Submit(context, info); + Require(std::all_of(statistics.begin(), statistics.begin() + 24, [](std::uint8_t value) { return value == 0; })); + Require(std::all_of(statistics.begin() + 24, statistics.end(), [](std::uint8_t value) { return value == 0xaa; })); + Require(format.result == 1 && format.numChannels == 0xaaaaaaaau); + Require(sceAjmInstanceDestroy(context, instance) == 0); +} + void TestBatchBounds(std::uint32_t context) { constexpr int invalidParameter = static_cast(0x80930005); std::vector storage(128); @@ -2429,6 +2446,7 @@ int main() { TestGaplessDecode(context); TestCodecInfo(context); TestGetInfo(context); + TestGetStatistics(context); TestBatchBounds(context); TestBatchWaitRelease(context); TestInstanceHandleLifetime(context);