1 // RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s
2 //
3 // UNSUPPORTED: linux, solaris
4
5 #include <cstdlib>
6 #include <ctime>
7 #include <cstdio>
8 #include <inttypes.h>
9
print_buf(unsigned char * buf,size_t buflen)10 void print_buf(unsigned char *buf, size_t buflen) {
11 printf("buf '");
12 for (auto i = 0; i < buflen; i ++)
13 printf("%" PRIx8, buf[i]);
14 printf("'\n");
15 }
16
test_seed()17 void test_seed() {
18 #ifdef __NetBSD__
19 time_t now = ::time(nullptr);
20 arc4random_addrandom((unsigned char *)&now, sizeof(now));
21 #endif
22 }
23
test_arc4random()24 void test_arc4random() {
25 printf("test_arc4random\n");
26 auto i = arc4random();
27 print_buf((unsigned char *)&i, sizeof(i));
28 }
29
test_arc4random_uniform()30 void test_arc4random_uniform() {
31 printf("test_arc4random_uniform\n");
32 auto i = arc4random_uniform(1024);
33 print_buf((unsigned char *)&i, sizeof(i));
34 }
35
test_arc4random_buf10()36 void test_arc4random_buf10() {
37 printf("test_arc4random_buf10\n");
38 char buf[10];
39 #ifdef __NetBSD__
40 arc4random_stir();
41 #endif
42 arc4random_buf(buf, sizeof(buf));
43 print_buf((unsigned char *)buf, sizeof(buf));
44 }
45
test_arc4random_buf256()46 void test_arc4random_buf256() {
47 printf("test_arc4random_buf256\n");
48 char buf[256];
49 #ifdef __NetBSD__
50 arc4random_stir();
51 #endif
52 arc4random_buf(buf, sizeof(buf));
53 print_buf((unsigned char *)buf, sizeof(buf));
54 }
55
main(void)56 int main(void) {
57 test_seed();
58 test_arc4random();
59 test_arc4random_uniform();
60 test_arc4random_buf10();
61 test_arc4random_buf256();
62 return 0;
63 // CHECK: test_arc4random
64 // CHECK: buf '{{.*}}'
65 // CHECK: test_arc4random_uniform
66 // CHECK: buf '{{.*}}'
67 // CHECK: test_arc4random_buf10
68 // CHECK: buf '{{.*}}'
69 // CHECK: test_arc4random_buf256
70 // CHECK: buf '{{.*}}'
71 }
72