usched: Allow process to change self cpu affinity
[dragonfly.git] / sbin / hammer / test_dupkey.c
blobd52e3b4cdba5e7669efdcfcf3f4e195f25769b95
1 /*
2 * This is a really simple stupid standalone program which will find two
3 * filenames with the same CRC, used to test the directory iterator.
5 * cc -I /usr/src/sys test_dupkey.c /usr/src/sys/libkern/crc32.c \
6 * /usr/src/sys/libkern/icrc32.c -o test_dupkey
8 * $DragonFly: src/sbin/hammer/test_dupkey.c,v 1.1 2008/06/26 04:07:57 dillon Exp $
9 */
11 #include "hammer_util.h"
13 static uint32_t namekey(const char *name);
14 static void randomname(char *name);
16 uint32_t bitmap[0x80000000U / 32];
18 int
19 main(int ac, char **av)
21 char name[32];
22 uint32_t key;
23 uint32_t *ptr;
24 uint32_t mask;
25 uint32_t count;
26 uint32_t saved;
28 srandom(0); /* reproducable random sequence number */
29 count = 0;
30 for (;;) {
31 randomname(name);
32 key = namekey(name);
33 ptr = &bitmap[key / 32];
34 mask = 1 << (key & 31);
35 if (*ptr & mask)
36 break;
37 *ptr |= mask;
38 ++count;
40 printf("duplicate found at count %d key %08x\n", count, key);
41 printf("'%s' and", name);
42 saved = key;
44 srandom(0);
45 count = 0;
46 for (;;) {
47 randomname(name);
48 key = namekey(name);
49 if (saved == key)
50 break;
51 ++count;
53 printf(" '%s'\n", name);
56 static
57 uint32_t
58 namekey(const char *name)
60 uint32_t key;
62 key = crc32(name, strlen(name)) & 0x7FFFFFFF;
63 if (key == 0)
64 key = 1;
65 return(key);
68 static
69 void
70 randomname(char *name)
72 int len = random() % 16 + 8;
73 int i;
75 for (i = 0; i < len; ++i)
76 name[i] = random() % 26 + 'a';
77 name[i] = 0;