home *** CD-ROM | disk | FTP | other *** search
/ ftp.ee.pdx.edu / 2014.02.ftp.ee.pdx.edu.tar / ftp.ee.pdx.edu / pub / users / Harry / compilers / p9 / tst / bool.pcat < prev    next >
Text File  |  2006-02-07  |  3KB  |  128 lines

  1. (* This program tests IR generation for boolean-valued expressions. *)
  2.  
  3. program is
  4.   var
  5.     b, c, d: boolean := false;
  6.     i, j: integer := 0;
  7.   begin
  8.  
  9.     (* Test each operator in a context where a result value is needed. *)
  10.  
  11.     b := i < j;
  12.     b := i <= j;
  13.     b := i > j;
  14.     b := i >= j;
  15.     b := i = j;
  16.     b := i <> j;
  17.     b := not c;
  18.     b := c and d;
  19.     b := c or d;
  20.  
  21.     (* Test each operator in a context where a jump is needed. *)
  22.  
  23.     if i < j then
  24.       i := 101;
  25.       i := 102;
  26.     else
  27.       i := 103;
  28.       i := 104;
  29.     end;
  30.  
  31.     if i <= j then
  32.       i := 105;
  33.       i := 106;
  34.     else
  35.       i := 107;
  36.       i := 108;
  37.     end;
  38.  
  39.     if i > j then
  40.       i := 109;
  41.       i := 110;
  42.     else
  43.       i := 111;
  44.       i := 112;
  45.     end;
  46.  
  47.     if i >= j then
  48.       i := 113;
  49.       i := 114;
  50.     else
  51.       i := 115;
  52.       i := 116;
  53.     end;
  54.  
  55.     if i = j then
  56.       i := 117;
  57.       i := 118;
  58.     else
  59.       i := 119;
  60.       i := 120;
  61.     end;
  62.  
  63.     if i <> j then
  64.       i := 121;
  65.       i := 122;
  66.     else
  67.       i := 123;
  68.       i := 124;
  69.     end;
  70.  
  71.     if not c then
  72.       i := 125;
  73.       i := 126;
  74.     else
  75.       i := 127;
  76.       i := 128;
  77.     end;
  78.  
  79.     if c and d then
  80.       i := 129;
  81.       i := 130;
  82.     else
  83.       i := 131;
  84.       i := 132;
  85.     end;
  86.  
  87.     if c or d then
  88.       i := 133;
  89.       i := 134;
  90.     else
  91.       i := 135;
  92.       i := 136;
  93.     end;
  94.  
  95.     (* Test each operator in a context where a jump is needed. *)
  96.  
  97.     b := (i < j) and d;
  98.     b := (i <= j) and d;
  99.     b := (i > j) and d;
  100.     b := (i >= j) and d;
  101.     b := (i = j) and d;
  102.     b := (not c) and d;
  103.     b := (c and d) and d;
  104.     b := (c or d) and d;
  105.  
  106.     b := c or (i < j);
  107.     b := c or (i <= j);
  108.     b := c or (i > j);
  109.     b := c or (i >= j);
  110.     b := c or (i = j);
  111.     b := c or (not c);
  112.     b := c or (c and d);
  113.     b := c or (c or d);
  114.  
  115.     (* Here are a couple deeply nested boolean expressions. *)
  116.  
  117.     b := (not (((i =  1) or not (i =  2)) and not ((i =  3) or (i =  4))) or
  118.           not (((i =  5) or not (i =  6)) and not ((i =  7) or (i =  8)))) and
  119.          (not (((i =  9) or not (i = 10)) and not ((i = 11) or (i = 12))) or
  120.           not (((i = 13) or not (i = 14)) and not ((i = 15) or (i = 16))));
  121.  
  122.     b := (not (((i = 17) and not (i = 18)) or not ((i = 19) and (i = 20))) and
  123.           not (((i = 21) and not (i = 22)) or not ((i = 23) and (i = 24)))) or
  124.          (not (((i = 25) and not (i = 26)) or not ((i = 27) and (i = 28))) and
  125.           not (((i = 29) and not (i = 30)) or not ((i = 31) and (i = 32))));
  126.  
  127.   end;
  128.