1/* Copyright (C) 2002 Free Software Foundation. 2 3 Test memset with various combinations of pointer alignments and lengths to 4 make sure any optimizations in the library are correct. 5 6 Written by Michael Meissner, March 9, 2002. */ 7 8#include <string.h> 9 10#ifndef MAX_OFFSET 11#define MAX_OFFSET (sizeof (long long)) 12#endif 13 14#ifndef MAX_COPY 15#define MAX_COPY (10 * sizeof (long long)) 16#endif 17 18#ifndef MAX_EXTRA 19#define MAX_EXTRA (sizeof (long long)) 20#endif 21 22#define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA) 23 24static union { 25 char buf[MAX_LENGTH]; 26 long long align_int; 27 long double align_fp; 28} u; 29 30char A = 'A'; 31 32main () 33{ 34 int off, len, i; 35 char *p, *q; 36 37 for (off = 0; off < MAX_OFFSET; off++) 38 for (len = 1; len < MAX_COPY; len++) 39 { 40 for (i = 0; i < MAX_LENGTH; i++) 41 u.buf[i] = 'a'; 42 43 p = memset (u.buf + off, '\0', len); 44 if (p != u.buf + off) 45 abort (); 46 47 q = u.buf; 48 for (i = 0; i < off; i++, q++) 49 if (*q != 'a') 50 abort (); 51 52 for (i = 0; i < len; i++, q++) 53 if (*q != '\0') 54 abort (); 55 56 for (i = 0; i < MAX_EXTRA; i++, q++) 57 if (*q != 'a') 58 abort (); 59 60 p = memset (u.buf + off, A, len); 61 if (p != u.buf + off) 62 abort (); 63 64 q = u.buf; 65 for (i = 0; i < off; i++, q++) 66 if (*q != 'a') 67 abort (); 68 69 for (i = 0; i < len; i++, q++) 70 if (*q != 'A') 71 abort (); 72 73 for (i = 0; i < MAX_EXTRA; i++, q++) 74 if (*q != 'a') 75 abort (); 76 77 p = memset (u.buf + off, 'B', len); 78 if (p != u.buf + off) 79 abort (); 80 81 q = u.buf; 82 for (i = 0; i < off; i++, q++) 83 if (*q != 'a') 84 abort (); 85 86 for (i = 0; i < len; i++, q++) 87 if (*q != 'B') 88 abort (); 89 90 for (i = 0; i < MAX_EXTRA; i++, q++) 91 if (*q != 'a') 92 abort (); 93 } 94 95 exit (0); 96} 97