AnyPS5/core/libs/tests/GuestSystemGesture.cpp

81 lines
4.8 KiB
C++

#include "prx/libc/include/general/VabiMacros.hpp"
#include <array>
#include <cstdint>
#include <cstdlib>
extern "C" {
std::int32_t APS5_VABI sceSystemGestureOpen(std::int32_t, const void*);
int APS5_VABI sceSystemGestureGetPrimitiveTouchEvents(std::int32_t, void*, std::uint32_t, std::uint32_t*);
int APS5_VABI sceSystemGestureGetPrimitiveTouchEventsCount(std::int32_t);
int APS5_VABI sceSystemGestureGetTouchEvents(std::int32_t, const void*, void*, std::uint32_t, std::uint32_t*);
int APS5_VABI sceSystemGestureGetPrimitiveTouchEventByIndex(std::int32_t, std::uint32_t, void*);
int APS5_VABI sceSystemGestureAppendTouchRecognizer(std::int32_t, void*);
int APS5_VABI sceSystemGestureRemoveTouchRecognizer(std::int32_t, void*);
int APS5_VABI sceSystemGestureResetTouchRecognizer(std::int32_t, void*);
int APS5_VABI sceSystemGestureUpdateTouchRecognizer(std::int32_t, void*);
int APS5_VABI sceSystemGestureUpdateTouchRecognizerRectangle(std::int32_t, void*, const void*);
int APS5_VABI sceSystemGestureResetPrimitiveTouchRecognizer(std::int32_t);
int APS5_VABI sceSystemGestureUpdateAllTouchRecognizer(std::int32_t);
int APS5_VABI sceSystemGestureUpdatePrimitiveTouchRecognizer(std::int32_t, const void*);
}
static void Require(bool value) { if (!value) std::abort(); }
int main() {
constexpr int invalidArgument = static_cast<int>(0x80D10002);
constexpr int invalidHandle = static_cast<int>(0x80D10003);
const std::int32_t handle = sceSystemGestureOpen(0, nullptr);
std::array<unsigned char, 64> buffer;
buffer.fill(0x5a);
const auto original = buffer;
std::uint32_t count = 7;
Require(sceSystemGestureGetPrimitiveTouchEvents(handle, buffer.data(), 4, &count) == 0);
Require(count == 0);
Require(buffer == original);
count = 7;
Require(sceSystemGestureGetPrimitiveTouchEvents(handle, buffer.data(), 4, nullptr) == invalidArgument);
Require(sceSystemGestureGetPrimitiveTouchEvents(handle + 1, buffer.data(), 4, &count) == invalidHandle);
Require(count == 7);
Require(sceSystemGestureGetPrimitiveTouchEventsCount(handle) == 0);
Require(sceSystemGestureGetPrimitiveTouchEventsCount(handle + 1) == invalidHandle);
constexpr int indexOutOfArray = static_cast<int>(0x80D10005);
int recognizer = 0;
int rectangle = 0;
count = 7;
Require(sceSystemGestureGetTouchEvents(handle, &recognizer, buffer.data(), 4, &count) == 0 && count == 0);
Require(sceSystemGestureGetTouchEvents(handle, &recognizer, buffer.data(), 4, nullptr) == invalidArgument);
Require(sceSystemGestureGetTouchEvents(handle + 1, &recognizer, buffer.data(), 4, &count) == invalidHandle);
Require(sceSystemGestureGetPrimitiveTouchEventByIndex(handle, 0, buffer.data()) == indexOutOfArray);
Require(sceSystemGestureGetPrimitiveTouchEventByIndex(handle + 1, 0, buffer.data()) == invalidHandle);
Require(buffer == original);
Require(sceSystemGestureAppendTouchRecognizer(handle, &recognizer) == 0);
Require(sceSystemGestureRemoveTouchRecognizer(handle, &recognizer) == 0);
Require(sceSystemGestureResetTouchRecognizer(handle, &recognizer) == 0);
Require(sceSystemGestureUpdateTouchRecognizer(handle, &recognizer) == 0);
Require(sceSystemGestureUpdateTouchRecognizerRectangle(handle, &recognizer, &rectangle) == 0);
Require(sceSystemGestureResetPrimitiveTouchRecognizer(handle) == 0);
Require(sceSystemGestureUpdateAllTouchRecognizer(handle) == 0);
Require(sceSystemGestureUpdatePrimitiveTouchRecognizer(handle, nullptr) == 0);
Require(sceSystemGestureAppendTouchRecognizer(handle, nullptr) == invalidArgument);
Require(sceSystemGestureUpdateTouchRecognizerRectangle(handle, &recognizer, nullptr) == invalidArgument);
Require(sceSystemGestureAppendTouchRecognizer(handle + 1, &recognizer) == invalidHandle);
Require(sceSystemGestureRemoveTouchRecognizer(handle, nullptr) == invalidArgument);
Require(sceSystemGestureResetTouchRecognizer(handle, nullptr) == invalidArgument);
Require(sceSystemGestureUpdateTouchRecognizer(handle, nullptr) == invalidArgument);
Require(sceSystemGestureUpdateTouchRecognizerRectangle(handle, nullptr, &rectangle) == invalidArgument);
Require(sceSystemGestureRemoveTouchRecognizer(handle + 1, &recognizer) == invalidHandle);
Require(sceSystemGestureResetTouchRecognizer(handle + 1, &recognizer) == invalidHandle);
Require(sceSystemGestureUpdateTouchRecognizer(handle + 1, &recognizer) == invalidHandle);
Require(sceSystemGestureUpdateTouchRecognizerRectangle(handle + 1, &recognizer, &rectangle) == invalidHandle);
Require(sceSystemGestureResetPrimitiveTouchRecognizer(handle + 1) == invalidHandle);
Require(sceSystemGestureUpdateAllTouchRecognizer(handle + 1) == invalidHandle);
Require(sceSystemGestureUpdatePrimitiveTouchRecognizer(handle + 1, nullptr) == invalidHandle);
return 0;
}