1/* zz30
2 *
3 * demonstrate a splay-tree depth problem
4*/
5
6#include <stdlib.h>
7#include <stdio.h>
8#include <unistd.h>
9
10#ifndef SCALE
11#define SCALE 100000
12#endif
13
14
15struct list
16{
17  struct list *next;
18};
19
20
21int
22main ()
23{
24  struct list *head = NULL;
25  struct list *tail = NULL;
26  struct list *p;
27  long n;
28  int direction;
29
30  for (direction = 0; direction < 2; direction++)
31    {
32      fprintf (stdout, "allocating\n");
33      fflush (stdout);
34
35      for (n = 0; n < SCALE; ++n)
36	{
37	  p = malloc (sizeof *p);
38	  if (NULL == p)
39	    {
40	      fprintf (stdout, "malloc failed\n");
41	      break;
42	    }
43	  if (direction == 0)
44	    {			/* add at tail */
45	      p->next = NULL;
46	      if (NULL != tail)
47		tail->next = p;
48	      else
49		head = p;
50	      tail = p;
51	    }
52	  else
53	    {			/* add at head */
54	      p->next = head;
55	      if (NULL == tail)
56		tail = p;
57	      head = p;
58	    }
59	}
60
61      fprintf (stdout, "freeing\n");
62      fflush (stdout);
63
64      while (NULL != head)
65	{
66	  p = head;
67	  head = head->next;
68	  free (p);
69	}
70
71    }
72
73  fprintf (stdout, "done\n");
74  fflush (stdout);
75
76  return (0);
77}
78
79/* { dg-output "allocating.*freeing.*allocating.*freeing.*done" } */
80