xref: /minix3/minix/tests/test6.c (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1*433d6423SLionel Sambuc /* test 6 */
2*433d6423SLionel Sambuc 
3*433d6423SLionel Sambuc #include <sys/types.h>
4*433d6423SLionel Sambuc #include <sys/stat.h>
5*433d6423SLionel Sambuc #include <errno.h>
6*433d6423SLionel Sambuc #include <fcntl.h>
7*433d6423SLionel Sambuc #include <limits.h>
8*433d6423SLionel Sambuc #include <signal.h>
9*433d6423SLionel Sambuc #include <stdlib.h>
10*433d6423SLionel Sambuc #include <unistd.h>
11*433d6423SLionel Sambuc #include <stdio.h>
12*433d6423SLionel Sambuc 
13*433d6423SLionel Sambuc int max_error = 3;
14*433d6423SLionel Sambuc #include "common.h"
15*433d6423SLionel Sambuc 
16*433d6423SLionel Sambuc 
17*433d6423SLionel Sambuc int subtest = 1;
18*433d6423SLionel Sambuc int zilch[5000];
19*433d6423SLionel Sambuc 
20*433d6423SLionel Sambuc 
21*433d6423SLionel Sambuc int main(int argc, char *argv []);
22*433d6423SLionel Sambuc void test6a(void);
23*433d6423SLionel Sambuc void test6b(void);
24*433d6423SLionel Sambuc 
main(argc,argv)25*433d6423SLionel Sambuc int main(argc, argv)
26*433d6423SLionel Sambuc int argc;
27*433d6423SLionel Sambuc char *argv[];
28*433d6423SLionel Sambuc {
29*433d6423SLionel Sambuc   int i, m = 0xFFFF;
30*433d6423SLionel Sambuc 
31*433d6423SLionel Sambuc   if (argc == 2) m = atoi(argv[1]);
32*433d6423SLionel Sambuc 
33*433d6423SLionel Sambuc   start(6);
34*433d6423SLionel Sambuc 
35*433d6423SLionel Sambuc   for (i = 0; i < 70; i++) {
36*433d6423SLionel Sambuc 	if (m & 00001) test6a();
37*433d6423SLionel Sambuc 	if (m & 00002) test6b();
38*433d6423SLionel Sambuc   }
39*433d6423SLionel Sambuc 
40*433d6423SLionel Sambuc   quit();
41*433d6423SLionel Sambuc   return(-1);			/* impossible */
42*433d6423SLionel Sambuc }
43*433d6423SLionel Sambuc 
test6a()44*433d6423SLionel Sambuc void test6a()
45*433d6423SLionel Sambuc {
46*433d6423SLionel Sambuc /* Test sbrk() and brk(). */
47*433d6423SLionel Sambuc 
48*433d6423SLionel Sambuc   char *addr, *addr2, *addr3;
49*433d6423SLionel Sambuc   int i, del, click, click2;
50*433d6423SLionel Sambuc 
51*433d6423SLionel Sambuc   subtest = 1;
52*433d6423SLionel Sambuc   addr = sbrk(0);
53*433d6423SLionel Sambuc   addr = sbrk(0);		/* force break to a click boundary */
54*433d6423SLionel Sambuc   for (i = 0; i < 10; i++) sbrk(7 * i);
55*433d6423SLionel Sambuc   for (i = 0; i < 10; i++) sbrk(-7 * i);
56*433d6423SLionel Sambuc   if (sbrk(0) != addr) e(1);
57*433d6423SLionel Sambuc   sbrk(30);
58*433d6423SLionel Sambuc   if (brk(addr) != 0) e(2);
59*433d6423SLionel Sambuc   if (sbrk(0) != addr) e(3);
60*433d6423SLionel Sambuc 
61*433d6423SLionel Sambuc   del = 0;
62*433d6423SLionel Sambuc   do {
63*433d6423SLionel Sambuc 	del++;
64*433d6423SLionel Sambuc 	brk(addr + del);
65*433d6423SLionel Sambuc 	addr2 = sbrk(0);
66*433d6423SLionel Sambuc   } while (addr2 == addr);
67*433d6423SLionel Sambuc   click = addr2 - addr;
68*433d6423SLionel Sambuc   sbrk(-1);
69*433d6423SLionel Sambuc   if (sbrk(0) != addr) e(4);
70*433d6423SLionel Sambuc   brk(addr);
71*433d6423SLionel Sambuc   if (sbrk(0) != addr) e(5);
72*433d6423SLionel Sambuc 
73*433d6423SLionel Sambuc   del = 0;
74*433d6423SLionel Sambuc   do {
75*433d6423SLionel Sambuc 	del++;
76*433d6423SLionel Sambuc 	brk(addr - del);
77*433d6423SLionel Sambuc 	addr3 = sbrk(0);
78*433d6423SLionel Sambuc   } while (addr3 == addr);
79*433d6423SLionel Sambuc   click2 = addr - addr3;
80*433d6423SLionel Sambuc   sbrk(1);
81*433d6423SLionel Sambuc   if (sbrk(0) != addr) e(6);
82*433d6423SLionel Sambuc   brk(addr);
83*433d6423SLionel Sambuc   if (sbrk(0) != addr) e(8);
84*433d6423SLionel Sambuc   if (click != click2) e(9);
85*433d6423SLionel Sambuc 
86*433d6423SLionel Sambuc   brk(addr + 2 * click);
87*433d6423SLionel Sambuc   if (sbrk(0) != addr + 2 * click) e(10);
88*433d6423SLionel Sambuc   sbrk(3 * click);
89*433d6423SLionel Sambuc   if (sbrk(0) != addr + 5 * click) e(11);
90*433d6423SLionel Sambuc   sbrk(-5 * click);
91*433d6423SLionel Sambuc   if (sbrk(0) != addr) e(12);
92*433d6423SLionel Sambuc }
93*433d6423SLionel Sambuc 
test6b()94*433d6423SLionel Sambuc void test6b()
95*433d6423SLionel Sambuc {
96*433d6423SLionel Sambuc   int i, err;
97*433d6423SLionel Sambuc 
98*433d6423SLionel Sambuc   subtest = 2;
99*433d6423SLionel Sambuc   signal(SIGQUIT, SIG_IGN);
100*433d6423SLionel Sambuc   err = 0;
101*433d6423SLionel Sambuc   for (i = 0; i < 5000; i++)
102*433d6423SLionel Sambuc 	if (zilch[i] != 0) err++;
103*433d6423SLionel Sambuc   if (err > 0) e(1);
104*433d6423SLionel Sambuc   kill(getpid(), SIGQUIT);
105*433d6423SLionel Sambuc }
106*433d6423SLionel Sambuc 
107