const REC_SIZE=3; type tinst = packed record x : word; b : byte; rec : array[1..REC_SIZE] of int64; end; tunaligned = packed record x, y : byte; a, b : int64; c,d : qword; end; const x_val = 45634; b_val = 56; rec1_val = $123456; rec2_val = $DCBA87654321; rec3_val = $ADEFCB4567; t : tinst = ( x : x_val; b : b_val; rec : (rec1_val,rec2_val,rec3_val) ); const has_errors : boolean = false; var i : longint; tu : tunaligned; ia,ib : int64; uc,ud : qword; {$R-} {$Q-} begin writeln('t.x=',t.x); writeln('t.b=',t.b); for i:=1 to REC_SIZE do writeln('t.rec[',i,']=',t.rec[i]); if (t.x <> x_val) then begin writeln('t.x field is wrong'); has_errors:=true; end; if (t.b <> b_val) then begin writeln('t.b field is wrong'); has_errors:=true; end; if (t.rec[1] <> rec1_val) then begin writeln('t.rec[1] field is wrong'); has_errors:=true; end; if (t.rec[2] <> rec2_val) then begin writeln('t.rec2 field is wrong'); has_errors:=true; end; if (t.rec[3] <> rec3_val) then begin writeln('t.rec[3] field is wrong'); has_errors:=true; end; with tu do begin a:=$0123456789ABCDEF; ia:=a; b:=swapendian(a); ib:=swapendian(ia); writeln('a=',hexstr(a,2*sizeof(a))); writeln('b=',hexstr(b,2*sizeof(b))); writeln('ib=',hexstr(ib,2*sizeof(ib))); if (b<>ib) then begin writeln('b<>ib!!'); has_errors:=true; end; c:=$F123456789ABCDEF; uc:=c; d:=swapendian(c); ud:=swapendian(uc); writeln('c=',hexstr(c,2*sizeof(c))); writeln('d=',hexstr(d,2*sizeof(d))); writeln('ud=',hexstr(ud,2*sizeof(ud))); if (d<>ud) then begin writeln('d<>ud!!'); has_errors:=true; end; end; if (tu.a<>ia) then begin writeln('tu.a is different from ia'); has_errors:=true; end; if (tu.c<>uc) then begin writeln('tu.c is different from uc'); has_errors:=true; end; if has_errors then begin writeln('Wrong code is generated'); halt(1); end; end.