1663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <stdio.h>
2663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <unistd.h>
3663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
4663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define MAX 20000
5663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
6663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengint main () {
7663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  int i;
8663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  int inc_dec;
9663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  int delta;
10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov  intptr_t brk_stat;
11663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
12663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  // loop to first increase, then decrease
13663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  for (inc_dec = 1; inc_dec >= -1; inc_dec-=2) {
14663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     // loop to increase(decrease) with small then big delta
15663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     for (delta = 1; delta <= 400; delta+=399) {
16663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        if (0) printf("initial brk value for inc_dec %d delta %d: %p\n",
17663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               inc_dec, delta, sbrk(0));
18663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        for (i=0; i<MAX; i++) {
19436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov           brk_stat = (intptr_t)brk(sbrk(0) + inc_dec * delta);
20663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng           if (brk_stat == -1) {
21663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng              printf("brk value at failure: %p\n", sbrk(0));
22663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng              perror ("brk() failed!\n");
23663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng              return 0;
24663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng           }
25663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        }
26663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        if (0) printf("resulting brk value for inc_dec %d delta %d: %p\n",
27663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               inc_dec, delta, sbrk(0));
28663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     }
29663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  }
30663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
31663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  return 0;
32663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
33