442 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			442 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
#
 | 
						|
{
 | 
						|
  (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
 | 
						|
 
 | 
						|
           This product is part of the Amsterdam Compiler Kit.
 | 
						|
 
 | 
						|
  Permission to use, sell, duplicate or disclose this software must be
 | 
						|
  obtained in writing. Requests for such permissions may be sent to
 | 
						|
 
 | 
						|
       Dr. Andrew S. Tanenbaum
 | 
						|
       Wiskundig Seminarium
 | 
						|
       Vrije Universiteit
 | 
						|
       Postbox 7161
 | 
						|
       1007 MC Amsterdam
 | 
						|
       The Netherlands
 | 
						|
 
 | 
						|
}
 | 
						|
{$i64 : sets of integers contain 64 bits}
 | 
						|
program t3(input,output,f1,f2,f3,f4,f5,f6);
 | 
						|
 | 
						|
{ The Berkeley and EM-1 compilers both can handle this program }
 | 
						|
 | 
						|
const rcsversion='$Header$';
 | 
						|
type wavelength = (red,blue,yellow,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,
 | 
						|
                   pink,green,orange);
 | 
						|
  spectrum= set of wavelength;
 | 
						|
  bit = 0..1;
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  tp3=  packed record c1:char; i:integer; p:boolean; x:real end;
 | 
						|
  tp4=  record c1:char; i:integer; p:boolean; x:real end;
 | 
						|
#else
 | 
						|
  tp3=  packed record c1:char; i:integer; p:boolean; end;
 | 
						|
  tp4=  record c1:char; i:integer; p:boolean; end;
 | 
						|
#endif
 | 
						|
 | 
						|
  vec1 =  array [-10..+10] of integer;
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  vrec = record case t:boolean of false:(r:real); true:(b:bit) end;
 | 
						|
#else
 | 
						|
  vrec = record case t:boolean of false:(); true:(b:bit) end;
 | 
						|
#endif
 | 
						|
 | 
						|
var t,pct,ect:integer;
 | 
						|
 i,j,k,l:integer;
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
 x,y: real;
 | 
						|
#endif
 | 
						|
 | 
						|
 p:boolean;
 | 
						|
 c2:char;
 | 
						|
 a1: vec1;
 | 
						|
 c: array [1..20] of char;
 | 
						|
 r3: tp3;
 | 
						|
 r4: tp4;
 | 
						|
 vr: vrec;
 | 
						|
 colors: spectrum;
 | 
						|
 letters,cset:set of char;
 | 
						|
 f1: text;
 | 
						|
 f2: file of spectrum;
 | 
						|
 f3: file of tp3;
 | 
						|
 f4: file of tp4;
 | 
						|
 f5: file of vec1;
 | 
						|
 f6: file of vrec;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
procedure e(n:integer); 
 | 
						|
begin 
 | 
						|
  ect := ect + 1;
 | 
						|
  writeln(' Error', n:3,' in test ', t) 
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
{************************************************************************}
 | 
						|
procedure tst34;
 | 
						|
{ Global files }
 | 
						|
var i:integer; c1:char;
 | 
						|
begin t:=34; pct := pct + 1;
 | 
						|
  rewrite(f1);
 | 
						|
  if not eof(f1) then e(1);
 | 
						|
  write(f1,'abc',20+7:2,'a':2); writeln(f1);
 | 
						|
  write(f1,'xyz');
 | 
						|
  i:=-3000;  write(f1,i:5);
 | 
						|
  reset(f1);
 | 
						|
  if eof(f1) or eoln(f1) then e(2);
 | 
						|
  for i:=1 to 17 do read(f1,c[i]);
 | 
						|
  if(c[1]<>'a') or (c[3]<>'c') or (c[5]<>'7') or (c[8]<>' ') or
 | 
						|
     (c[12]<>'-') or (c[13]<>'3') or (c[16]<>'0') then e(3);
 | 
						|
  if not eof(f1) then e(4);
 | 
						|
  rewrite(f1);
 | 
						|
  for i:= 32 to 127 do write(f1,chr(i));
 | 
						|
  reset(f1);  p:= false;
 | 
						|
  for i:= 32 to 127 do begin read(f1,c1); if ord(c1) <> i then p:=true end;
 | 
						|
  if p then e(5);
 | 
						|
  rewrite(f1);
 | 
						|
  for c1 := 'a' to 'z' do write(f1,c1);
 | 
						|
  reset(f1);  p:= false;
 | 
						|
  for c1 := 'a' to 'z' do begin read(f1,c2); if c2 <> c1 then p:=true end;
 | 
						|
  if p then e(6);
 | 
						|
end;
 | 
						|
 | 
						|
procedure tst36;
 | 
						|
var i,j:integer;
 | 
						|
begin t:=36; pct:=pct+1;
 | 
						|
  rewrite(f2); rewrite(f3); rewrite(f4); rewrite(f5); rewrite(f6);
 | 
						|
  colors := []; f2^ := colors; put(f2);
 | 
						|
  colors := [red]; f2^ := colors; put(f2);
 | 
						|
  colors := [red,blue]; f2^ := colors; put(f2);
 | 
						|
  colors := [yellow,blue]; f2^ := colors; put(f2);
 | 
						|
  reset(f2);
 | 
						|
  colors := f2^;  get(f2);  if colors <> [] then e(4);
 | 
						|
  colors := f2^;  get(f2);  if colors <> [red] then e(5);
 | 
						|
  colors := f2^;  get(f2);  if colors <> [blue,red] then e(6);
 | 
						|
  colors := f2^;  get(f2);  if colors <> [blue,yellow] then e(7);
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  r3.c1:='w';  r3.i:= -100; r3.x:=303.56;  r3.p:=true; f3^:=r3; put(f3);
 | 
						|
  r3.c1:='y';  r3.i:= -35;  r3.x:=26.32;   f3^:=r3; put(f3);
 | 
						|
  r3.c1:='q';  r3.i:= +29;  r3.x:=10.00;   f3^:=r3; put(f3);
 | 
						|
  r3.c1:='j';  r3.i:=   8;  r3.x:=10000;   f3^:=r3; put(f3);
 | 
						|
#else
 | 
						|
  r3.c1:='w';  r3.i:= -100; r3.p:=true; f3^:=r3; put(f3);
 | 
						|
  r3.c1:='y';  r3.i:= -35;  f3^:=r3; put(f3);
 | 
						|
  r3.c1:='q';  r3.i:= +29;  f3^:=r3; put(f3);
 | 
						|
  r3.c1:='j';  r3.i:=   8;  f3^:=r3; put(f3);
 | 
						|
#endif
 | 
						|
 | 
						|
  for i:= 1 to 1000 do begin f3^ := r3; put(f3) end;
 | 
						|
  reset(f3);
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  r3 := f3^; get(f3);
 | 
						|
  if (r3.c1<>'w') or (r3.i<>-100) or (r3.x<>303.56) then e(8);
 | 
						|
  r3 := f3^; get(f3);
 | 
						|
  if (r3.c1<>'y') or (r3.i<> -35) or (r3.x<> 26.32) then e(9);
 | 
						|
  r3 := f3^; get(f3);
 | 
						|
  if (r3.c1<>'q') or (r3.i<>  29) or (r3.x<> 10.00) then e(10);
 | 
						|
  r3 := f3^; get(f3);
 | 
						|
  if (r3.c1<>'j') or (r3.i<>   8) or (r3.x<> 10000) then e(11);
 | 
						|
#else
 | 
						|
  r3 := f3^; get(f3);
 | 
						|
  if (r3.c1<>'w') or (r3.i<>-100) then e(8);
 | 
						|
  r3 := f3^; get(f3);
 | 
						|
  if (r3.c1<>'y') or (r3.i<> -35) then e(9);
 | 
						|
  r3 := f3^; get(f3);
 | 
						|
  if (r3.c1<>'q') or (r3.i<>  29) then e(10);
 | 
						|
  r3 := f3^; get(f3);
 | 
						|
  if (r3.c1<>'j') or (r3.i<>   8) then e(11);
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  r4.c1:='w';  r4.i:= -100; r4.x:=303.56;  r4.p:=true; f4^:=r4; put(f4);
 | 
						|
  r4.c1:='y';  r4.i:= -35;  r4.x:=26.32;   f4^:=r4; put(f4);
 | 
						|
  r4.c1:='q';  r4.i:= +29;  r4.x:=10.00;   f4^:=r4; put(f4);
 | 
						|
  r4.c1:='j';  r4.i:=   8;  r4.x:=10000;   f4^:=r4; put(f4);
 | 
						|
#else
 | 
						|
  r4.c1:='w';  r4.i:= -100; r4.p:=true; f4^:=r4; put(f4);
 | 
						|
  r4.c1:='y';  r4.i:= -35;  f4^:=r4; put(f4);
 | 
						|
  r4.c1:='q';  r4.i:= +29;  f4^:=r4; put(f4);
 | 
						|
  r4.c1:='j';  r4.i:=   8;  f4^:=r4; put(f4);
 | 
						|
#endif 
 | 
						|
 | 
						|
  for i:= 1 to 1000 do begin f4^ := r4; put(f4) end;
 | 
						|
  reset(f4);
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  r4 := f4^; get(f4);
 | 
						|
  if (r4.c1<>'w') or (r4.i<>-100) or (r4.x<>303.56) then e(12);
 | 
						|
  r4 := f4^; get(f4);
 | 
						|
  if (r4.c1<>'y') or (r4.i<> -35) or (r4.x<> 26.32) then e(13);
 | 
						|
  r4 := f4^; get(f4);
 | 
						|
  if (r4.c1<>'q') or (r4.i<>  29) or (r4.x<> 10.00) then e(13);
 | 
						|
  r4 := f4^; get(f4);
 | 
						|
  if (r4.c1<>'j') or (r4.i<>   8) or (r4.x<> 10000) then e(14);
 | 
						|
#else
 | 
						|
  r4 := f4^; get(f4);
 | 
						|
  if (r4.c1<>'w') or (r4.i<>-100) then e(12);
 | 
						|
  r4 := f4^; get(f4);
 | 
						|
  if (r4.c1<>'y') or (r4.i<> -35) then e(13);
 | 
						|
  r4 := f4^; get(f4);
 | 
						|
  if (r4.c1<>'q') or (r4.i<>  29) then e(13);
 | 
						|
  r4 := f4^; get(f4);
 | 
						|
  if (r4.c1<>'j') or (r4.i<>   8) then e(14);
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
  for j:= 1 to 100 do
 | 
						|
    begin for i:= -10 to +10 do a1[i] := i*j; f5^ := a1; put(f5); end;
 | 
						|
  reset(f5);
 | 
						|
  for j:= 1 to 99 do
 | 
						|
    begin a1:=f5^; get(f5); for i:= -10 to +10 do if a1[i]<> i*j then e(14) end;
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  vr.t:=false;
 | 
						|
  for i:= 1 to 1000 do begin vr.r:=i+0.5;   f6^:=vr; put(f6) ;  p:=true; end;
 | 
						|
  reset(f6);   p:=false;
 | 
						|
  for i:= 1 to 999 do 
 | 
						|
     begin  vr:=f6^; get(f6); if vr.r <> i+0.5 then p:=true end;
 | 
						|
  if p then e(15);
 | 
						|
#endif
 | 
						|
 | 
						|
  rewrite(f6);
 | 
						|
  if not eof(f6) then e(16);
 | 
						|
  for i:= 1 to 1000 do begin vr.b:=i mod 2; f6^:=vr; put(f6) end;
 | 
						|
  reset(f6);
 | 
						|
  if eof(f6) then e(17);
 | 
						|
  p:=false;
 | 
						|
  for i:= 1 to 1000 do 
 | 
						|
     begin  vr:=f6^; get(f6); if vr.b <> i mod 2 then p:=true end;
 | 
						|
  if not eof(f6) then e(18);
 | 
						|
  if p then e(19);
 | 
						|
 | 
						|
  rewrite(f1);
 | 
						|
  f1^:=chr(10); 
 | 
						|
  put(f1);
 | 
						|
  reset(f1);
 | 
						|
  if ord(f1^) <> 32 then e(20);
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  rewrite(f1);
 | 
						|
  x:=0.0625;  write(f1,x:6:4, x:6:2);
 | 
						|
  reset(f1);  read(f1,y);  if y <> 0.0625 then e(21);
 | 
						|
  reset(f1);  for i:= 1 to 12 do begin c[i]:= f1^; get(f1) end;
 | 
						|
  if (c[1]<>'0') or (c[2]<>'.') or (c[4]<>'6') then e(22);
 | 
						|
  if (c[7]<>' ') or (c[9]<>'0') or (c[10]<>'.') or (c[12]<>'6') then e(23);
 | 
						|
#endif
 | 
						|
 | 
						|
end;
 | 
						|
 | 
						|
{************************************************************************}
 | 
						|
procedure tst35;
 | 
						|
{ Local files }
 | 
						|
var g1: text;
 | 
						|
    g2: file of spectrum;
 | 
						|
    g3: file of tp4;
 | 
						|
    g4: file of vec1;
 | 
						|
    i,j:integer;
 | 
						|
 begin t:=35; pct := pct + 1;
 | 
						|
  rewrite(g1); rewrite(g2); rewrite(g3); rewrite(g4);
 | 
						|
  if (not (eof(g1) and eof(g4))) then e(1);
 | 
						|
  writeln(g1,'abc', 20+7:2,'a':2);
 | 
						|
  write(g1,'xyz');
 | 
						|
  reset(g1);
 | 
						|
  if eof(g1) or eoln(g1) then e(2);
 | 
						|
  read(g1,c[1]); read(g1,c[2]); read(g1,c[3],c[4],c[5],c[6],c[7]);
 | 
						|
  if (c[1]<>'a') or (c[3]<>'c') or (c[4]<>'2') or (c[7]<>'a') then e(3);
 | 
						|
  if not eoln(g1) then e(4)
 | 
						|
  else readln(g1);
 | 
						|
  for i:=1 to 2 do read(g1,c[8+i]);
 | 
						|
  if c[10]<>'y' then e(5);
 | 
						|
  if eof(g1) or eoln(g1) then e(6);
 | 
						|
  colors := []; g2^ := colors; put(g2);
 | 
						|
  colors := [pink]; g2^ := colors; put(g2);
 | 
						|
  colors := [pink,green];  g2^ := colors;  put(g2); 
 | 
						|
  colors := [orange,green];  g2^ := colors;  put(g2); 
 | 
						|
  reset(g2); 
 | 
						|
  colors := g2^;  get(g2); if colors <> [] then e(7); 
 | 
						|
  colors := g2^; get(g2); if colors <> [pink] then e(8);
 | 
						|
  colors := g2^; get(g2); if colors <> [green,pink] then e(9);
 | 
						|
  colors := g2^; get(g2); if colors <> [green,orange] then e(10);
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  r4.c1:='w';  r4.i:= -100; r4.x:=303.56;  g3^:=r4; put(g3);
 | 
						|
  r4.c1:='y';  r4.i:= -35;  r4.x:=26.32;   g3^:=r4; put(g3);
 | 
						|
  r4.c1:='q';  r4.i:= +29;  r4.x:=10.00;   g3^:=r4; put(g3);
 | 
						|
  r4.c1:='j';  r4.i:=   8;  r4.x:=10000;   g3^:=r4; put(g3);
 | 
						|
#else
 | 
						|
  r4.c1:='w';  r4.i:= -100; g3^:=r4; put(g3);
 | 
						|
  r4.c1:='y';  r4.i:= -35;  g3^:=r4; put(g3);
 | 
						|
  r4.c1:='q';  r4.i:= +29;  g3^:=r4; put(g3);
 | 
						|
  r4.c1:='j';  r4.i:=   8;  g3^:=r4; put(g3);
 | 
						|
#endif
 | 
						|
 | 
						|
  for i:= 1 to 1000 do begin g3^ := r4; put(g3) end;
 | 
						|
  reset(g3);
 | 
						|
  if eof(g3) then e(11);
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'w') or (r4.i<>-100) or (r4.x<>303.56) then e(12);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'y') or (r4.i<> -35) or (r4.x<> 26.32) then e(13);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'q') or (r4.i<>  29) or (r4.x<> 10.00) then e(14);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'j') or (r4.i<>   8) or (r4.x<> 10000) then e(15);
 | 
						|
#else
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'w') or (r4.i<>-100) then e(12);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'y') or (r4.i<> -35) then e(13);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'q') or (r4.i<>  29) then e(14);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'j') or (r4.i<>   8) then e(15);
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
  for j:= 1 to 100 do
 | 
						|
    begin for i:= -10 to +10 do a1[i] := i*j; g4^ := a1; put(g4) end;
 | 
						|
  reset(g4);
 | 
						|
  for j:= 1 to 100 do
 | 
						|
    begin a1:=g4^; get(g4); for i:= -10 to +10 do if a1[i]<>i*j then e(16) end;
 | 
						|
  if not eof(g2) then e(17);
 | 
						|
colors:=[q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11];
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
{***********************************************************************}
 | 
						|
procedure tst37;
 | 
						|
{ Intermediate level files }
 | 
						|
var g1: text;
 | 
						|
    g2: file of spectrum;
 | 
						|
    g3: file of tp4;
 | 
						|
    g4: file of vec1;
 | 
						|
 | 
						|
 procedure tst3701;
 | 
						|
 var i,j:integer;
 | 
						|
 begin t:=3701; pct := pct + 1;
 | 
						|
  rewrite(g1); rewrite(g2); rewrite(g3); rewrite(g4);
 | 
						|
  if (not (eof(g1) and eof(g4))) then e(1);
 | 
						|
  writeln(g1,'abc', 20+7:2,'a':2);
 | 
						|
  write(g1,'xyz');
 | 
						|
  reset(g1);
 | 
						|
  if eof(g1) or eoln(g1) then e(2);
 | 
						|
  read(g1,c[1]); read(g1,c[2]); read(g1,c[3],c[4],c[5],c[6],c[7]);
 | 
						|
  if (c[1]<>'a') or (c[3]<>'c') or (c[4]<>'2') or (c[7]<>'a') then e(3);
 | 
						|
  if not eoln(g1) then e(4)
 | 
						|
  else readln(g1);
 | 
						|
  for i:=1 to 2 do read(g1,c[8+i]);
 | 
						|
  if c[10]<>'y' then e(5);
 | 
						|
  if eof(g1) or eoln(g1) then e(6);
 | 
						|
  colors := []; g2^ := colors; put(g2);
 | 
						|
  colors := [pink]; g2^ := colors; put(g2);
 | 
						|
  colors := [pink,green];  g2^ := colors;  put(g2); 
 | 
						|
  colors := [orange,green];  g2^ := colors;  put(g2); 
 | 
						|
  reset(g2); 
 | 
						|
  colors := g2^;  get(g2); if colors <> [] then e(7); 
 | 
						|
  colors := g2^; get(g2); if colors <> [pink] then e(8);
 | 
						|
  colors := g2^; get(g2); if colors <> [green,pink] then e(9);
 | 
						|
  colors := g2^; get(g2); if colors <> [green,orange] then e(10);
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  r4.c1:='w';  r4.i:= -100; r4.x:=303.56;  g3^:=r4; put(g3);
 | 
						|
  r4.c1:='y';  r4.i:= -35;  r4.x:=26.32;   g3^:=r4; put(g3);
 | 
						|
  r4.c1:='q';  r4.i:= +29;  r4.x:=10.00;   g3^:=r4; put(g3);
 | 
						|
  r4.c1:='j';  r4.i:=   8;  r4.x:=10000;   g3^:=r4; put(g3);
 | 
						|
#else
 | 
						|
  r4.c1:='w';  r4.i:= -100; g3^:=r4; put(g3);
 | 
						|
  r4.c1:='y';  r4.i:= -35;  g3^:=r4; put(g3);
 | 
						|
  r4.c1:='q';  r4.i:= +29;  g3^:=r4; put(g3);
 | 
						|
  r4.c1:='j';  r4.i:=   8;  g3^:=r4; put(g3);
 | 
						|
#endif
 | 
						|
 | 
						|
  for i:= 1 to 1000 do begin g3^ := r4; put(g3) end;
 | 
						|
  reset(g3);
 | 
						|
  if eof(g3) then e(11);
 | 
						|
 | 
						|
#ifndef NOFLOAT
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'w') or (r4.i<>-100) or (r4.x<>303.56) then e(12);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'y') or (r4.i<> -35) or (r4.x<> 26.32) then e(13);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'q') or (r4.i<>  29) or (r4.x<> 10.00) then e(14);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'j') or (r4.i<>   8) or (r4.x<> 10000) then e(15);
 | 
						|
#else
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'w') or (r4.i<>-100) then e(12);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'y') or (r4.i<> -35) then e(13);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'q') or (r4.i<>  29) then e(14);
 | 
						|
  r4 := g3^;  get(g3);
 | 
						|
  if (r4.c1<>'j') or (r4.i<>   8) then e(15);
 | 
						|
#endif
 | 
						|
 | 
						|
  for j:= 1 to 100 do
 | 
						|
    begin for i:= -10 to +10 do a1[i] := i*j; g4^ := a1; put(g4) end;
 | 
						|
  reset(g4);
 | 
						|
  for j:= 1 to 100 do
 | 
						|
    begin a1:=g4^; get(g4); for i:= -10 to +10 do if a1[i]<>i*j then e(16) end;
 | 
						|
 end;
 | 
						|
 | 
						|
begin t:=37;  pct := pct+1;
 | 
						|
  tst3701;
 | 
						|
  t:=37;
 | 
						|
  if not eof(g2) then e(1);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
{***********************************************************************}
 | 
						|
procedure tst38;
 | 
						|
{ Advanced set theory }
 | 
						|
begin t:=38;  pct := pct + 1;
 | 
						|
  if [50] >= [49,51] then e(1);
 | 
						|
  if [10] <= [9,11] then e(2);
 | 
						|
  if not ([50] <= [49..51]) then e(3);
 | 
						|
  i:=1;  j:=2; k:=3;  l:=5;
 | 
						|
  if [i] + [j] <> [i,j] then e(4);
 | 
						|
  if [i] + [j] <> [i..j] then e(5);
 | 
						|
  if [j..i] <> [] then e(6);
 | 
						|
  if [j..l] + [j..k] <> [2,3,4,5] then e(7);
 | 
						|
  if ([1..k, l..8] + [10]) * [k..7, 2, l] <> [2,3,l..7] then e(8);
 | 
						|
  if [i..9] - [j..l] <> [1,l+1..k*k] then e(9);
 | 
						|
  if [k..j] <> [i..j] * [k..l] then e(10);
 | 
						|
  if not ([k..10] <= [i..15]) then e(11);
 | 
						|
  if not ([k-1..k*l] <= [i..15]) then e(12);
 | 
						|
 | 
						|
  letters := ['a','b', 'z'];
 | 
						|
  if letters <> ['a', 'b', 'z'] then e(13);
 | 
						|
  cset := ['a'] + ['b', 'c', 'z'] - ['c','d'];
 | 
						|
  if cset <> letters then e(14);
 | 
						|
  cset := ['a'..'e'];
 | 
						|
  if cset <> ['a', 'b', 'c', 'd', 'e'] then e(15);
 | 
						|
  cset := ['a'..'z', '0'..'9', '+','-','*','/','.',':','(',')','{','}']; 
 | 
						|
  if not ('+' in cset) or not ('.' in cset) or not ('}' in cset) then e(16);
 | 
						|
  letters := ['a'..'z' , '0'..'9'];
 | 
						|
  if letters >= cset then e(17);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
{***********************************************************************}
 | 
						|
 | 
						|
{ Main program }
 | 
						|
begin ect:=0; pct:=0;
 | 
						|
  tst34;   tst35;   tst36;   tst37;   tst38;
 | 
						|
  write('Program t3:',pct:3,' tests completed.');
 | 
						|
  writeln('Number of errors = ',ect:0);
 | 
						|
end.
 |