home *** CD-ROM | disk | FTP | other *** search
- /* test suite for malloc(3),realloc(3), and free(3) */
-
- /* (c) Copyright 1990 H.Rogers */
-
- #include <stdio.h>
- #include <string.h>
- #ifdef __STDC__
- #include <stdlib.h>
- #else
- extern void srand ();
- extern int rand ();
- extern void *malloc ();
- extern void *realloc ();
- extern void free ();
- #endif
- #include <time.h>
-
- #ifndef ARCH
- #ifdef __STDC__
- extern void __initalloc (void);
- #else
- extern void __initalloc ();
- #endif
- #endif
-
- #define NBLK 512
- #define BLKSIZ 2048
-
- #ifdef M_DEBUG
- #ifdef __STDC__
- extern void __m_debug (void);
- #else
- extern void __m_debug ();
- #endif
- #else
- #ifdef __STDC__
- static void
- __m_debug (void)
- {
- }
- #else
- static void
- __m_debug ()
- {
- }
- #endif
- #endif
-
- #ifdef __STDC__
- static void *
- alloc (register size_t z)
- #else
- static void *
- alloc (z)
- register size_t z;
- #endif
- {
- register void *r;
-
- r = malloc (z);
- if (r)
- memset (r, 0xff, z);
-
- return (r);
- }
-
- #ifdef __STDC__
- static void *
- ralloc (register void *r, register size_t z)
- #else
- static void *
- ralloc (r, z)
- register void *r;
- register size_t z;
- #endif
- {
- r = realloc (r, z);
- if (r)
- memset (r, 0xff, z);
-
- return (r);
- }
-
- int
- main (int argc, char **argv)
- {
- void *m[NBLK];
- int i, j;
- void *k;
-
- #ifndef ARCH
- __initalloc ();
- #endif
-
- if (argc < 2)
- srand (0);
- else
- srand (atoi (argv[1]));
-
- printf ("stage: 1\n");
-
- for (i = 0; i < NBLK; i++)
- m[i] = alloc (rand () & (BLKSIZ - 1));
-
- __m_debug ();
-
- printf ("stage: 2\n");
-
- for (i = 0; i < NBLK; i++)
- if (m[i])
- {
- j = rand () & (BLKSIZ - 1);
- k = ralloc (m[i], j);
- if (!k)
- free (m[i]);
- m[i] = k;
- }
-
- __m_debug ();
-
- printf ("stage: 3\n");
-
- for (i = 0; i < (NBLK >> 2); i++)
- {
- j = rand () & (NBLK - 1);
- if (m[j])
- {
- free (m[j]);
- m[j] = 0;
- }
- }
-
- __m_debug ();
-
- printf ("stage: 4\n");
-
- for (i = 0; i < NBLK; i++)
- if (m[i])
- {
- j = rand () & (BLKSIZ - 1);
- k = ralloc (m[i], j);
- if (!k)
- free (m[i]);
- m[i] = k;
- }
-
- __m_debug ();
-
- printf ("stage: 5\n");
-
- for (i = 0; i < (NBLK >> 2); i++)
- {
- j = rand () & (NBLK - 1);
- if (m[j])
- {
- free (m[j]);
- m[j] = 0;
- }
- }
-
- __m_debug ();
-
- printf ("stage: 6\n");
-
- for (i = 0; i < NBLK; i++)
- if (!m[i])
- m[i] = alloc (rand () & (BLKSIZ - 1));
-
- __m_debug ();
-
- printf ("stage: 7\n");
-
- for (i = 0; i < NBLK; i++)
- if (m[i])
- {
- j = rand () & (BLKSIZ - 1);
- k = ralloc (m[i], j);
- if (!k)
- free (m[i]);
- m[i] = k;
- }
-
- __m_debug ();
-
- printf ("stage: 8\n");
-
- for (i = 0; i < NBLK; i++)
- if (m[i])
- free (m[i]);
-
- __m_debug ();
-
- return (0);
- }
-