// RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s // // UNSUPPORTED: linux, solaris #include <cstdlib> #include <ctime> #include <cstdio> #include <inttypes.h> void print_buf(unsigned char *buf, size_t buflen) { printf("buf '"); for (auto i = 0; i < buflen; i ++) printf("%" PRIx8, buf[i]); printf("'\n"); } void test_seed() { #ifdef __NetBSD__ time_t now = ::time(nullptr); arc4random_addrandom((unsigned char *)&now, sizeof(now)); #endif } void test_arc4random() { printf("test_arc4random\n"); auto i = arc4random(); print_buf((unsigned char *)&i, sizeof(i)); } void test_arc4random_uniform() { printf("test_arc4random_uniform\n"); auto i = arc4random_uniform(1024); print_buf((unsigned char *)&i, sizeof(i)); } void test_arc4random_buf10() { printf("test_arc4random_buf10\n"); char buf[10]; #ifdef __NetBSD__ arc4random_stir(); #endif arc4random_buf(buf, sizeof(buf)); print_buf((unsigned char *)buf, sizeof(buf)); } void test_arc4random_buf256() { printf("test_arc4random_buf256\n"); char buf[256]; #ifdef __NetBSD__ arc4random_stir(); #endif arc4random_buf(buf, sizeof(buf)); print_buf((unsigned char *)buf, sizeof(buf)); } int main(void) { test_seed(); test_arc4random(); test_arc4random_uniform(); test_arc4random_buf10(); test_arc4random_buf256(); return 0; // CHECK: test_arc4random // CHECK: buf '{{.*}}' // CHECK: test_arc4random_uniform // CHECK: buf '{{.*}}' // CHECK: test_arc4random_buf10 // CHECK: buf '{{.*}}' // CHECK: test_arc4random_buf256 // CHECK: buf '{{.*}}' }