DataMuseum.dk

Presents historical artifacts from the history of:

RC3500

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC3500

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦dd4a08c2e⟧ TextFileVerbose

    Length: 21504 (0x5400)
    Types: TextFileVerbose
    Names: »dynjobs«

Derivation

└─⟦2c55ea56f⟧ Bits:30001844 SW-save af projekt 1000, Alarm-system
    └─⟦6b41451d2⟧ 
        └─⟦this⟧ »dynjobs« 

TextFileVerbose

; dynjobs

%

(****************
*               *
*   ep test 1   *
****************)


process test1(var sv : system_vector );

procedure p(a,b,c,d : integer);

type su = a+b .. c*d;
     ta = array (su) of integer;
     tb = array (1..a) of ta;
     rc = record
           p : integer;
           q : su;
           r : ta;
           s : integer;
           t : su;
           u : tb;
           v : integer
         end;
     tc = array (1..10) of rc;
var  
v1 : su;
v2 : ta;
v3 : tb;
v4 : rc;
v5 : tc;
v6 : integer;
i,j,k,l : integer;

begin
printtext('start p ');
i:=v1;  
printnumber( i, 4 ) ; printnl;
v1:=i;
printnumber( v1, 4); printnl;
i:=v2(i);
printnumber( i, 4); printnl;
j:=v3(k,l);
printnumber( j, 4); printnl;
i:=v4.q;
printnumber( i, 4); printnl;
i:=v4.r(l);
printnumber( i, 4); printnl;
i:=v4.s;
printnumber( i, 4); printnl;
i:=v4.t;
printnumber( i, 4); printnl;
i:=v4.u(k,l);
printnumber( i, 4); printnl;
i:=v4.v;
printnumber( i, 4); printnl;
i:=v5(i).s;
printnumber( i, 4); printnl;
(*$4 1 0*)
printtext( 'end of p ');
end;

begin

p(1,2,3,4);

end.


%

\f



(**********************
*   ep test 2         *
*   test array decl   *
**********************)

process test2( var sv:system_vector);

process testa(var s:semaphore; vn : integer);

type

r1 = record  a : semaphore; b : integer end;

r2 = record  a : semaphore; b : 0..31 end;
 
r3 = record  a : semaphore; b : array (1..vn) of 0..10 end;

r4 = record  a : semaphore; b : array (1..vn+1) of 0..255 end;

r5 = array (1..vn) of integer;

ds = 1..vn;

var

a : array (1..3) of integer;
b : array (1..3) of r1;
c : packed array (1..3) of r2;
d : packed array (1..5) of 0..31;
e : packed array (1..5) of 0..32;
f : packed array (1..6) of 0..10;
g : packed array (1..7) of 0..10;
gg: array (1..3) of ds;
h : array (ds) of r1;
i : packed array (ds) of r2;
j : packed array (ds) of integer;
k : packed array (ds) of 0..32;
l : packed array (ds) of 0..31;
m : packed array (ds) of 0..10;
n : array (1..3) of r3;
o : array (1..3) of r4;
p : array (1..3) of r5;
r : array (ds) of r3;
s : array (ds) of r4;
t1, t : array (ds) of r5;

ii, jj : integer;   vs : ds;
sa, ssa, sb, ssb, sc, ssc, sd, ssd, se, sse, sf, ssf,
sg, ssgg, sgg, ssg, sh, ssh, si, ssi, sj,ssj, sk, ssk,
sl, ssl, sm, ssm, sn, ssn, so, sso, sp, ssp,
sr, ssr, ss, sss, st, sst, sum, ssum, st1, sst1 : integer;

procedure error;
begin trace( #hff ) end;


begin

a(1):=277;    sa:=277;    ssa:=277;
b(1).b:=280;  sb:=280;    ssb:=sb;
c(1).b:=23;   sc:=23;     ssc:=sc;
d(1):=27;     sd:=27;     ssd:=27;
e(1):=28;     se:=28;     sse:=se;
f(1):=0;      sf:=0;      ssf:=sf;
g(1):=1;      sg:=1;      ssg:=sg;
gg(1):=2;     sgg:=2;     ssgg:=sgg;
h(1).b:=100; sh:=100;   ssh:=sh;
i(1).b:=20;   si:=20;     ssi:=si;
j(1):=250 ;   sj:=250;   ssj:=sj;
k(1):=11;     sk:=11;     ssk:=sk;
l(1):=12;     sl:=12;     ssl:=sl;
m(1):=3;      sm:=3;      ssm:=3;

for ii:=2 to 3 do begin
a(ii):=a(ii-1)+1;  sa:=sa+a(ii);  ssa:=ssa+sa;
b(ii).b:=b(ii-1).b+1;  sb:=sb+b(ii).b;  ssb:=ssb+sb;
c(ii).b:=c(ii-1).b+1;  sc:=sc+c(ii).b;  ssc:=ssc+sc;
if vn >= 4 then begin
gg(ii):=gg(ii-1)+1;     sgg:=sgg+gg(ii); ssgg:=ssgg+sgg;
end; (* vn >= 4 *)
end;

sum:=0;  ssum:=0;
for ii:=1 to 3 do begin
sum:=sum+a(ii);  ssum:=ssum+sum;
end;
if (sum<>sa) or (ssa<>ssum) then error;

sum:=0;  ssum:=0;
for ii:=1 to 3 do begin
sum:=sum+b(ii).b;  ssum:=ssum+sum;
end;
if (sum<>sb) or (ssum<>ssb) then error;

sum:=0;  ssum:=0;
for ii:=1 to 3 do begin
sum:=sum+c(ii).b;  ssum:=ssum+sum;
end;
if (sum<>sc) or (ssum<>ssc) then error;

if vn >= 4 then begin
sum:=0;  ssum:=0;
for ii:=1 to 3 do begin
sum:=sum+gg(ii);  ssum:=ssum+sum;
end;
if (sgg<>sum) or (ssum<>ssgg) then error;
end; (* vn >= 4 *)

for ii:=2 to 5 do begin
  d(ii):=d(ii-1)+1;  sd:=sd+d(ii);   ssd:=ssd+sd;
  e(ii):=e(ii-1)+1;  se:=se+e(ii);   sse:=sse+se;
  f(ii):=f(ii-1)+1;  sf:=sf+f(ii);   ssf:=ssf+sf;
  g(ii):=g(ii-1)+1;  sg:=sg+g(ii);   ssg:=ssg+sg;
end;
f(6):=f(5)+1;    sf:=sf+f(6);   ssf:=ssf+sf;
g(6):=g(5)+1;    sg:=sg+g(6);   ssg:=ssg+sg;
g(7):=g(6)+1;    sg:=sg+g(7);   ssg:=ssg+sg;

sum:=0;   ssum:=0;
for ii:=1 to 5 do begin
sum:=sum+d(ii);  ssum:=ssum+sum;
end;
if (sum<>sd) or (ssum<>ssd) then error;

sum:=0;   ssum:=0;
for ii:=1 to 5 do begin
sum:=sum+e(ii);  ssum:=ssum+sum;
end;
if (sum<>se) or (ssum<>sse) then error;

sum:=0;   ssum:=0;
for ii:=1 to 6 do begin
sum:=sum+f(ii);   ssum:=ssum+sum;
end;
if (sum<>sf) or (ssum<>ssf) then error;

sum:=0;   ssum:=0;
for ii:=1 to 7 do  begin
sum:=sum+g(ii);   ssum:=ssum + sum ;
end;
if (sum<>sg) or (ssum<>ssg) then error;

for vs:=2 to vn do begin
h(vs).b:=h(vs-1).b+1;    sh:=sh+h(vs).b;  ssh:=ssh+sh;
i(vs).b:=i(vs-1).b+1;    si:=si+i(vs).b;  ssi:=ssi+si;
j(vs):=j(vs-1)+1;        sj:=sj+j(vs);    ssj:=ssj+sj;
k(vs):=k(vs-1)+1;        sk:=sk+k(vs);    ssk:=ssk+sk;
l(vs):=l(vs-1)+1;        sl:=sl+l(vs);    ssl:=ssl+sl;
m(vs):=(m(vs-1)+1) mod 11;        sm:=sm+m(vs);    ssm:=ssm+sm;
end;

sum:=0;   ssum:=0;
for vs:=1 to vn do begin
sum:=sum+h(vs).b;  ssum:=ssum+sum;
end;
if (sum<>sh) or (ssum<>ssh) then error;

sum:=0;   ssum:=0;
for vs:=1 to vn do begin
sum:=sum+i(vs).b;  ssum:=ssum+sum;
end;
if (sum<>si) or (ssum<>ssi) then error;

sum:=0;   ssum:=0;
for vs:=1 to vn do begin
sum:=sum+j(vs);   ssum:=ssum+sum;
end;
if (sum<>sj) or (ssum<>ssj) then error;

sum:=0;  ssum:=0;
for vs:=1 to vn do begin
sum:=sum+k(vs);   ssum:=ssum+sum;
end;
if (sum<>sk) or (ssum<>ssk) then error;

sum:=0;  ssum:=0;
for vs:=1 to vn do begin
sum:=sum+l(vs);  ssum:=ssum+sum;
end;
if (sum<>sl) or (ssum<>ssl) then error;

sum:=0;   ssum:=0;
for vs:=1 to vn do begin
sum:=sum+m(vs);   ssum:=ssum+sum;
end;
if (sum<>sm) or (ssum<>ssm) then error;

jj:=1;
sn:=0;   ssn:=0;
so:=0;   sso:=0;
sp:=0;   ssp:=0;
for ii:=1 to 3 do
for vs:=1 to vn do begin
 n(ii).b(vs):=jj;   sn:=sn+n(ii).b(vs);   ssn:=ssn+sn;
 o(ii).b(vs):=jj;   so:=so+o(ii).b(vs);   sso:=sso+so;
 p(ii,vs):=jj;      sp:=sp+p(ii,vs);      ssp:=ssp+sp;
jj := (jj+1) mod 11;
end;

for ii:=1 to 3 do 
with o(ii) do begin
b(vn+1):=jj;   so:=b(vn+1)+so;  sso:=sso+so;
end;

sum:=0;   ssum:=0;
for ii := 1 to 3 do
for vs := 1 to vn do begin
sum:=sum+n(ii).b(vs);    ssum:=ssum+sum;
end;
if (sum<>sn) or (ssum<>ssn) then error;

sum:=0;  ssum:=0;
for ii := 1 to 3 do
for vs := 1 to vn do begin
sum:=sum+o(ii).b(vs);   ssum:=ssum+sum;
end;
for ii := 1 to 3 do begin
sum := sum + o(ii).b(vn+1); ssum := ssum + sum;
end;
if (sum<>so) or (ssum<>sso) then error;

sum:=0;   ssum:=0;
for ii := 1 to 3 do
for vs := 1 to vn do begin
sum:=sum+p(ii,vs);   ssum:=ssum+sum;
end;
if (sum<>sp) or (ssum<>ssp) then error;

jj:=1;
sr:=0;   ssr:=0;
st:=0;   sst:=0;
st1:=0;  sst1:=0;
for ii:=1 to vn do
for vs:=1 to vn do begin
 r(ii).b(vs):=jj mod 11;   sr:=sr+r(ii).b(vs);   ssr:=ssr+sr;
 t(ii,vs):=jj;   st:=st+t(ii,vs);      sst:=sst+st;
 t1(ii,vs):=jj;  st1:=st1+t1(ii,vs);   sst1:=sst1+st1;
 jj:=jj+1;
end;

ss:=0;   sss:=0;
for ii:=1 to vn do
with s(ii) do
for jj:=1 to vn+1 do begin
b(jj):=jj+(ii-1)*(vn+1);   ss:=ss+b(jj);   sss:=sss+ss;
end;

if t1<>t then error;

t1:=t;

sum:=0;  ssum:=0;
for ii := 1 to vn do
for vs := 1 to vn do begin
sum:=sum+r(ii).b(vs);   ssum:=ssum+sum;
end;
if (sum<>sr) or(ssum<>ssr) then error;

sum:=0;   ssum:=0;
for ii := 1 to vn do
for jj := 1 to vn+1 do begin
sum:=sum+s(ii).b(jj);   ssum:=ssum+sum;
end;
if (sum<>ss) or (ssum<>sss) then error;

sum:=0;   ssum:=0;
for ii := 1 to vn do
for vs := 1 to vn do begin
sum:=sum+t(ii,vs);   ssum:=ssum+sum;
end;
if (sum<>st) or (ssum<>sst) then error;

sum:=0;   ssum:=0;
for ii:=1 to vn do
for vs:=1 to vn do begin
sum:=sum+t1(ii,vs);   ssum:=ssum+sum;
end;
if (sum<>st1) or (ssum<>sst1) then error;

end;

var s : semaphore;
step, result : integer;
sh : shadow;

begin
printnl;  printtext('test array');  printnl;
for step := 2 to 7 do begin
printtext('test no   :');  printnumber(step, 4);
if nil( sh ) then else remove( sh );
result := create( 'test a', testa(s, step), sh, 1000);
start ( sh, 0 );
end;
printtext('test end.');
end.




%






\f


(***********************
*   ep test 3          *
*   test record decl   *
***********************)

process test3 ( var sv : system_vector );

process testb(var s:semaphore; vn : integer);

type

ta = packed record
     a : 0..63;
     b : 0..4095;
     c : 0..255;
     d : ^semaphore;
     e : 0..31;
     f : ^semaphore;
     g : -10..10;
     h : 0..10
    end;

dd_type = array ( 1..vn ) of integer;

var
a1, a : ta;
r1, r : reference;
poo : pool 2;
 e : packed record
i, j, k : integer;
l : 1 .. vn;
dd : dd_type;
ddd : array ( 1..vn ) of integer;
rest : ta;
rest1 : ta;
end; 

step : integer;

b : packed record
     i,j,k : integer;
     l : 1..vn;
     dd : dd_type;
     a : 0..63;
     b : 0..4095;
     c : 0..255;
     d : semaphore;
     e : 0..31;
     f : semaphore;
     g : -10..10;
     h : 0..10;
    end;

c, c1 : packed record
     a,b,c : 0..255
    end;

d, d1 : record
     a,b : 0..10;
     c : record
          a,b,c : 0..10;
          d : record
               a,b,c,d : 0..10;
               e : array (1..vn) of 0..10;
              end;
         end;
    end;


procedure printval( name : alfa; val : integer );
var r, r1 : reference;
begin
printtext( name ); printnumber( val, 5 ); printnl;
end;


procedure error(a,b : integer);
var r : reference;
begin
printtext(' error no =');
printnumber( a , 5 ) ; printnumber( b, 5 ); printnl;
end;


procedure test_return_of_refs;
var
l_r : reference;
arr : array ( 1.. vn ) of reference;
type
interm_arr = array ( b.c .. b.c + b.h ) of record
                                             a : integer;
                                             b : reference;
                                           end;

procedure level_2;
var arr_var : interm_arr;
begin  end;

begin
if vn = 1 then l_r :=: r1; (*vn = 1 => exception *)
level_2;
end;


begin
alloc( r1, poo, s );
alloc( r, poo, s );

with a do
begin
  a := 63;  h := 10;
  b := 4095; g := 10;
  c := 255; e := 31;
end; (* with a *)

a1 := a;

with d do
begin
  a := 0; b := 10;
with c do
  begin
    a := 1; b := 2; c := 3;
    d.d := 10; d.c := 0; d.b := 10; d.a := 0;
for step := 1 to vn do d.e(step) := step mod 11;
end; (* with c *)
end; (* with d *)

d1 := d;

with c do
begin
a := 255; b := 254; c := 253;
end;

c1 := c;

with b do
begin
i := maxint; j := 12345; k := -5432;
l:= vn;
for step := vn downto 1 do dd(step) := step;
a := 0; h := 10;
b := 4095; g := -10;
c := 255; e := 0;
end;

with e do
begin
i := maxint; j := 12345; k := -5432;
l := vn;
dd := b.dd;
rest := a;
end;

if d <> d1 then error( 2, vn);
if c <> c1 then error( 3, vn);

if a <> a1 then error( 4, vn );
with c do 
if ( a<> 255) or ( b <> 254) or (c <> 253) then
error( 5, vn );

with d do
begin
printtext(' d = '); printnl;
printval('   a =#', a); printval( '   b =#', b );
printval('   c.a =#', c.a );
printval('   c.b =#', c.b );
printval('   c.c =#', c.c );
with c.d do
begin
printval('   c.d.d =#', d);
printval('   c.d.c =#', c);
printval('   c.d.b =#', b);
printval('   c.d.a =#', a);
printtext('   c.d.e =#');
for step := vn downto 1 do printnumber( e(step), 5 );
end; (* with c.d *)
end; (* with d *)

with b do 
begin
printnl; printnl; printtext(' b = '); printnl;
printval(' i =#', i );
printval(' j =#', j );
printval(' k =#', k);
printval(' l ="#', l );
printtext('  dd = #' );
for step := 1 to vn do printnumber( dd(step), 5 );
printnl;
step := a;
printval(' a =#', step );
step := b;
printval(' b =#', step );
step := c;
printval(' c =#', step );
step := e;
printval(' e =#', step );
step := g;
printval(' g =#', step );
step := h;
printval(' h =#', step );
end; (* with *)

test_return_of_refs;
if nil(r) then error( 1, vn );

printnl; printtext(' end child ' ); printnl;

end; (* process *)
 
var s : semaphore; step, result : integer;
sh : shadow;

begin
for step := 1 to 15 do
begin
trace( step );
if nil(sh) then else remove(sh);
result := create ( 'test b', testb(s,step), sh, 1000);
trace( result );
start ( sh, 0);
end;
end.

%
\f



(*******************
*   ep test 4      *
*   test fejl      *
*******************)

process testd(var s : semaphore; vn : integer);

type

sd = 1..vn;
su = 1..10;
ad = array (sd) of integer;
a  = array (su) of integer;
ax = ! ad;
ay = ! a;
sx = sd;
sy = su;
adx = array (sx) of integer;
ady = array (sy) of integer;
ca = array (sd) of char;
se = set of sd;
po = pool vn;
po1=pool 5 of ad;

procedure pa(x : ad;  var y : ca);
begin end;

procedure pb(x : ad;  var y : ca); external;

function fa(a : integer): sd;
begin
fa:=vn;
end;

function fb(a : integer): ad;
begin
fb(1):=vn;
end;

const

c1 = a(1,2,3,4***0,8,9,10);
c2 = ad(1,2,3,4***0);
c3 = a(1,2,vn,7***0);
c4 = vn;

var

va : a;
vx : ay;
da : ad;
dx : ax;
vv : ca;
sa : sd;
sb : sx;
sc : su;
i : integer;

begin
i:=fa(vn);
i:=fb(1)(vn);
i:=va(vn);
i:=vx(vn);
i:=da(i);
i:=dx(i);
vv:='det er en text';
sa:=i;
sc:=i;
i:=succ(sa);
i:=abs(sa);
i:=pred(sa);
i:=ord(sa);
(*$4 1 0*)
end.

%
\f



(**********************
*   ep test 5         *
*   test dyn array    *
**********************)

process test5(var sv: system_vector);

type

type_ay = packed array (1..5) of 0..31;
type_ax = array (1..4) of type_ay;
type_by = array (1..4) of integer;
type_bx = array (1..5) of type_by;
type_cy = packed array (1..4) of 0..31;
type_cx = array (1..4) of type_cy;

var

a : type_ax := type_ax (
type_ay( 1, 8, 9, 16, 17),
type_ay( 2, 7, 10, 15, 18),
type_ay( 3, 6, 11, 14, 19),
type_ay( 4, 5, 12, 13, 20) );

b : type_bx := type_bx (
type_by( 0, 1, 0, -1),
type_by( 1, 0, -1, 1),
type_by( 0, 1, 0, 0),
type_by( 1, 0, 0, 0),
type_by( 0, 0, 1, 0)  );

c : type_cx;

const  

facit = type_cx(
type_cy( 24, 10,  9,  7),
type_cy( 22, 12, 11,  5),
type_cy( 20, 14, 13,  3),
type_cy( 18, 16, 15,  1)  );

var  ok : boolean := true;
     p, q, s, i : integer;
     s_ok : boolean;

procedure error(n, p, q : integer);
begin
  ok:=false;
  printtext('error #');  printnumber(n, 4);
  printnumber(p, 4);     printnumber(q, 4);
  printnl;
end;

procedure dyn(n : integer);

type

t_ay = packed array (1..n+1) of 0..31;
t_ax = array(1..4) of t_ay;
t_by = array (1..n) of integer;
t_bx = array (1..n+1) of t_by;
t_cy = packed array (1..n) of 0..31;
t_cx = array (1..n) of t_cy;
wrk  = array (1..20) of integer;

var   p, q, i : integer;
      d_a : t_ax;
      d_b : t_bx;
      d_c : t_cx;

function mult(var result : t_cx) : wrk;
var p, q, i, s : integer;
begin
  for p:=1 to 4 do
  for q:=1 to 4 do begin
    s:=0;
    for i:=1 to 5 do s:=s + d_a(p,i) * d_b(i, q);
    result(p,q):=s;
  end;
  for i:=1 to 20 do mult(i):=i;
end;

begin (* dyn *)

for p:=1 to 4 do
for q:=1 to 5 do begin
  d_a(p,q):=a(p,q);
  d_b(q,p):=b(q,p);
end;

for p:=4 downto 1 do
for q:=5 downto 1 do begin
  if d_a(p,q) <> a(p,q) then error(3,p,q);
  if d_b(q,p) <> b(q,p) then error(4,q,p);
end;

for i:=1 to 2 do begin
  if 99 + i + mult(d_c)(20) <> i+119 then error(3,i,i);
  for p:=4 downto 1 do
  for q:=4 downto 1 do
  if facit(p,q) <> d_c(p,q) then error(i,p,q);
end;

end; (* dyn *)


begin

printtext('test 5 ');
printnl;

dyn(4);

for p:=1 to 4 do
for q:=1 to 4 do begin
  s:=0;
  for i:=1 to 5 do s:=s + a(p,i) * b(i, q);
  c(p,q):=s;
end;

s_ok:=ok;  ok:=true;

for p:=4 downto 1 do
for q:=4 downto 1 do
if facit(p,q) <> c(p,q) then error(5,p,q);

if s_ok and ok then
  printtext('test ok')
else
  printtext('test not ok');
end.

%

\f


(********************
*   ep test 6       *
*   test dyn lock   *
********************)

process test6(var sv : system_vector );

var s1, s2, a_sem : semaphore;
    ref1, ref2, ref : reference;
    i, j, p : integer;
    po : pool 3 of array (1..100) of integer;
    sh : shadow;

procedure error(a,b : integer);
begin
  printtext('error');   printnumber(a, 5);
  printnumber(b,5);
  printnl;
end;


(*************************************************)
(*                                               *)
(*           get                                 *)

process get(var s1, s2 : semaphore);

var rec, sen : reference;
    a_sem : semaphore;
    a, n, s, t : integer;
    po : pool 2 of array (1..200) of integer;


procedure move(p, q, r : integer; var ref1, ref2 : reference);
type
ta = array (1..p) of integer;
tb = array (1..q) of integer;
tc = array (1..r) of integer;

buf1 = record
         a : integer;
         b : ta;
         c : tc;
       end;

buf2 = record
         a : integer;
         b : tb;
         c : tc;
       end;

buf3 = record
         a : integer;
         c : tc;
       end;

begin
if (p<>0) and (q<>0) then
(*
lock ref1 as x : record
                   a : integer;
                   b : array ( 1..p ) of integer;
                   c : tc;
                 end
*) lock ref1 as x : buf1 
do
(*
lock ref2 as y : record
                   a : integer;
                   b : array ( 1..q ) of integer;
                   c : tc;
                 end
*) lock ref2 as y : buf2
do y.c := x.c
else
if p=0 then
lock ref1 as x : buf3 do
(*
lock ref2 as y : record
                   a : integer;
                   b : array ( 1..q ) of integer;
                   c : tc;
                 end
*) lock ref2 as y : buf2
do y.c := x.c
else
if q=0 then
(*
lock ref1 as x : record
                   a : integer;
                   b : array ( 1..p ) of integer;
                   c : tc;
end
*) lock ref1 as x : buf1
do
lock ref2 as y : buf3 do y.c:=x.c
end;

begin
while true do begin

wait(rec, s1);
n:=rec^.u1;
lock rec as buf : record
                    a : integer;
                    b : array (1..n) of integer;
                    c : integer;
                    d : integer;
                  end
do begin
a:=buf.a;   s:=buf.c;   t:=buf.d
end;
alloc(sen, po, a_sem);
move(s,0,t,rec,sen);
move(0,t,s,rec,sen);
if s+t < n then move(s+t, s+t, n - s+t, rec, sen);
lock sen as buf : array (1..n+3) of integer do
begin
  buf(1):=a;   buf(n+2):=s;   buf(n+3):=t
end;
signal(sen, s2);
release(rec);
end;
end; (*get*)

(*                                      *)
(*      end get                         *)
(****************************************)



procedure send_buf(length, n1, n2, fill : integer);

type

buf_type = record
             a : integer;
             b : array (1..length) of integer;
             c : integer;
             d : integer;
           end;

var  ref, ref1 : reference;
     i : integer;

begin

alloc(ref1, po, a_sem);
ref1^.u1:=77;
alloc(ref, po, a_sem);
ref^.u1:=length;
lock ref as buf : buf_type do
with buf do begin
  a:=99;
  for i:=1 to n1 do b(i):=fill + n2 + i;
  for i:=n1+1 to n1+n2 do b(i):=fill + i - n1;
  for i:=n1+n2+1 to length do b(i):=fill + i;
  c:=n1;  d:=n2;

  printnl;  printtext('send #');
  printnumber(a,4);   printnumber(c,6);   printnumber(d,6);
  for i:=1 to length do begin
    if (i-1) mod 10 = 0 then printnl;
    printnumber(b(i), 5);
  end;
end;
printnl;

signal(ref, s1);
wait(ref, s2);
lock ref as buf : buf_type do
with buf do begin
  if a<>99 then error(1001, a);
  if c<>n1 then error(1002, c);
  if d<>n2 then error(1003, d);
  for i:=1 to length do
  if b(i)<>fill+i then error(i, b(i));
end;

release(ref);
if ref1^.u1 <> 77 then error(1004, ref1^.u1);
release(ref1);

end; (*send buf*)


begin

printnl;   printtext('test ');
printnl;

alloc(ref1, po, a_sem);
ref1^.u2:=55;

i:=create('getproc', get(s1,s2), sh, 1000);
start(sh, 100);


p:=31;  i:=1;  j:=30;
send_buf(p, i, j, 100);
send_buf(p, j, i, 200);
send_buf(p, 7, 9, 50);
send_buf(10, 5, 2, 20);

if ref1^.u2 <> 55 then error(1005, ref1^.u2);
printtext('test end');
(*$4 1 0*)
end.



%




\f




(***********************
*    ep test 7         *
*    test init pool    *
***********************)

process test7(var sv : system_vector);

process testa(p,q : integer);


type

r1 = record a,b:integer; c:char end;
r2 = array (1..10) of integer;

t1 = pool 1 of alfa;

t2 = array (0..2) of pool 3 of r1;

t3 = array (1..p,1..q) of pool 4 of byte;

ty = record
       a : pool 5;
       b : array (3..q) of pool 6 of integer;
    end;

t4 = array (-1..q) of ty;

t5 = record
       a : pool 7 of r2;
       b : t2;
       c : ty;
     end;

var  p1 : t1;
     p2 : t2;
     p3 : t3;
     p4 : t4;
     p5 : t5;
     no : integer :=0;
     i,j : integer;
     r : reference;
     sem, st : semaphore;

procedure ck(n,s:integer; var pul : pool 1);
var i : integer;  ok : boolean := true;
    p : integer := 1;
begin
printnl;  printtext('pool #');
no:=no+1; printnumber(no,3);
printtext('   #');  printnumber(n,3);  printnumber(s,5);

alloc(r,pul,sem);
printnumber(r^.size,10);   printnumber(s,10);
s:=(s+1) div 2;
if r^.size <> s then ok:=false;
signal(r,st);
while openpool(pul) do begin
  alloc(r, pul, sem);  p:=p+1;
  signal(r,st);
end;
printnumber(p, 10);  printnumber(n, 10);
if p<>n then ok:=false;
for i:=1 to p do begin
  wait(r,st);
  release(r);
end;
if ok then printtext(' ok  ') else printtext(' not ok ');
end;


begin
ck(2,12,p1);
ck(1,10,p1);
ck(1,12,p1);

for i:=0 to 2 do ck(3,5,p2(i));

for i:=1 to p do
for j:=1 to q do ck(4,1,p3(i,j));

for i:=-1 to q do begin
  ck(5,0,p4(i).a);
  for j:=3 to 5 do ck(6,2,p4(i).b(j));
end;

ck(7,20,p5.a);
for i:=0 to 2 do ck(3,5,p5.b(i));
ck(5,0,p5.c.a);
for i:=3 to q do ck(6,2,p5.c.b(i));

end;

var i : integer;  sh : shadow;




begin
printnl;  printtext('test pool ');  printnl;
i:=create('testa', testa(3,5), sh, 3000);
start(sh, 0);
printnl;  printtext('test end.');
end.


%


«eof»