Formerly ../string/strings.h.~3~
[kopensolaris-gnu/glibc.git] / string / testcopy.c
1 /* Copyright (C) 1992 Free Software Foundation, Inc.
2    Contributed by Torbjorn Granlund (tege@sics.se).
3
4 This file is part of the GNU C Library.
5
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public License as
8 published by the Free Software Foundation; either version 2 of the
9 License, or (at your option) any later version.
10
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public
17 License along with the GNU C Library; see the file COPYING.LIB.  If
18 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
19 Cambridge, MA 02139, USA.  */
20
21 #include <ansidecl.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include <malloc.h>
25
26 int
27 DEFUN(main, (argc, argv),
28       int argc AND char **argv)
29 {
30   if (argc > 1)
31     {
32       long int s[1025], d[1025];
33       int i;
34       int a, b = 0;
35
36       a = atoi(argv[1]);
37       if (argc > 2)
38         b = atoi(argv[2]);
39
40       for (i = 10000; --i; )
41         memmove (((char *) d) + b, ((char *) s) + a, 1024 * 4);
42     }
43   else
44     {
45 #define SIZE (3*0x200)
46
47       unsigned char *p = valloc(SIZE + 40);
48       int src_align, dst_align;
49       int i;
50       int len;
51
52       for (len = 0; len < 256; len++)
53         {
54           printf("phase %d\n", len);
55           for (src_align = 0; src_align < 32; src_align++)
56             {
57               unsigned char *src;
58
59               src = p + 40 + SIZE/3 + src_align;
60
61               for (dst_align = 0; dst_align < 32; dst_align++)
62                 {
63                   unsigned char *dst;
64
65                   memset (p, 0, SIZE + 40);
66                   for (i = 0; i < len; i++)
67                     src[i] = i;
68
69                   dst = p + 40 + dst_align;
70                   memmove (dst, src, len);
71
72                   for (i = -32; i < 0; i++)
73                     if (dst[i] != 0)
74                       abort();
75                   for (i = 0; i < len; i++)
76                     if (dst[i] != i)
77                       abort();
78                   for (i = 32; i >= 0; i--)
79                     if (dst[len + i] != 0)
80                       abort();
81
82                   memset (p, 0, SIZE + 40);
83                   for (i = 0; i < len; i++)
84                     src[i] = i;
85
86                   dst = p + 40 + SIZE/3*2 + dst_align;
87                   memmove (dst, src, len);
88
89                   for (i = -32; i < 0; i++)
90                     if (dst[i] != 0)
91                       abort();
92                   for (i = 0; i < len; i++)
93                     if (dst[i] != i)
94                       abort();
95                   for (i = 32; i >= 0; i--)
96                     if (dst[len + i] != 0)
97                       abort();
98                 }
99             }
100         }
101     }
102
103   exit (0);
104 }