#include "prx/libc/include/general/VabiMacros.hpp" #include #include #include #include #include #include extern "C" void APS5_VABI arc4random_buf_nid_postfix(void*, std::size_t); void Require(bool condition, std::source_location location = std::source_location::current()) { if (!condition) { std::fprintf(stderr, "Posix random check failed at line %u\n", location.line()); std::abort(); } } int main() { std::array first{}; std::array second{}; first.fill(0xa5); arc4random_buf_nid_postfix(first.data(), 0); Require(std::all_of(first.begin(), first.end(), [](unsigned char value) { return value == 0xa5; })); for (const std::size_t size : {1u, 3u, 5u, 4098u}) { first.fill(0xa5); arc4random_buf_nid_postfix(first.data(), size); Require(std::all_of(first.begin() + static_cast(size), first.end(), [](unsigned char value) { return value == 0xa5; })); } arc4random_buf_nid_postfix(first.data(), first.size()); arc4random_buf_nid_postfix(second.data(), second.size()); Require(first != second); std::array counts{}; for (const auto value : first) ++counts[value]; Require(*std::max_element(counts.begin(), counts.end()) < 64); return 0; }