#include "prx/libSceRtc/include/Rtc.hpp" #include "ProcessParametersFixture.hpp" #include #include #include #include #include #include #include #include static void Require(bool value, std::source_location location = std::source_location::current()) { if (!value) { std::fprintf(stderr, "check failed at line %u\n", location.line()); std::abort(); } } int main() { std::array process{}; Require(ProcessParametersFixture::Install(process.data(), process.size())); const std::uint32_t sdk = 0x01000051; std::memcpy(process.data() + 16, &sdk, sizeof(sdk)); using namespace std::chrono; const sys_days first = year{2000}/January/1; const sys_days last = year{2400}/January/1; for (sys_days current = first; current < last; current += days{1}) { const year_month_day date{current}; const auto y = static_cast(date.year()); const auto m = static_cast(date.month()); const auto d = static_cast(date.day()); Require(sceRtcGetDayOfWeek(y, m, d) == static_cast(weekday{current}.c_encoding())); Require(sceRtcIsLeapYear(y) == date.year().is_leap()); RtcDateTime input{static_cast(y), static_cast(m), static_cast(d), 12, 34, 56, 789123}; RtcTick tick{}; const auto elapsed = duration_cast(current.time_since_epoch()).count(); const auto expected = 62135596800000000ull + elapsed + 45296789123ull; Require(sceRtcGetTick(&input, &tick) == 0 && tick.tick == expected); RtcDateTime result{}; Require(sceRtcSetTick(&result, &tick) == 0); Require(result.year == input.year && result.month == input.month && result.day == input.day && result.hour == input.hour && result.minute == input.minute && result.second == input.second && result.microsecond == input.microsecond); } }