test.c
上传用户:nthfjj
上传日期:2007-01-07
资源大小:37k
文件大小:2k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /* Somewhat nonconvincing test for garbage collector.                */
  2. /* Note that this intentionally uses the worlds worst implementation */
  3. /* of cons.  It eats up gobs of memory in an attempt to break the    */
  4. /* collector.  Process size should grow to about 1.5 Meg and stay    */
  5. /* there.                                                            */
  6. /* Should take about 25 seconds (2 minutes) to run on a              */
  7. /* Sun 3/60 (Vax 11/750)                                             */
  8. /* (The Vax does reasonably well here because the compiler assures   */
  9. /* longword pointer alignment.)                                      */
  10. # include <stdio.h>
  11. # include "cons.h"
  12. /* Return reverse(x) concatenated with y */
  13. sexpr reverse1(x, y)
  14. sexpr x, y;
  15. {
  16.     if (null(x)) {
  17.         return(y);
  18.     } else {
  19.         return( reverse1(cdr(x), cons(car(x), y)) );
  20.     }
  21. }
  22. sexpr reverse(x)
  23. sexpr x;
  24. {
  25.     return( reverse1(x, nil) );
  26. }
  27. sexpr ints(low, up)
  28. int low, up;
  29. {
  30.     if (low > up) {
  31. return(nil);
  32.     } else {
  33.         return(cons(low, ints(low+1, up)));
  34.     }
  35. }
  36. void print_int_list(x)
  37. sexpr x;
  38. {
  39.     if (null(x)) {
  40.         printf("NILn");
  41.     } else {
  42.         printf("%d", car(x));
  43.         if (!null(cdr(x))) {
  44.             printf(", ");
  45.             print_int_list(cdr(x));
  46.         } else {
  47.             printf("n");
  48.         }
  49.     }
  50. }
  51. /* Try to force a to be strangely aligned */
  52. struct {
  53.   char dummy;
  54.   sexpr aa;
  55. } A;
  56. #define a A.aa
  57. main()
  58. {
  59.     int i;
  60.     sexpr b;
  61.     gc_init();
  62.     a = ints(1, 100);
  63.     b = ints(1, 50);
  64.     print_int_list(a);
  65.     print_int_list(b);
  66.     print_int_list(reverse(a));
  67.     print_int_list(reverse(b));
  68.     for (i = 0; i < 100; i++) {
  69.         b = reverse(reverse(b));
  70.     }
  71.     print_int_list(a);
  72.     print_int_list(b);
  73.     print_int_list(reverse(a));
  74.     print_int_list(reverse(b));
  75. }