|
|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 21504 (0x5400)
Types: TextFileVerbose
Names: »dynjobs«
└─⟦2c55ea56f⟧ Bits:30001844 SW-save af projekt 1000, Alarm-system
└─⟦6b41451d2⟧
└─⟦this⟧ »dynjobs«
; 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»