|
@@ -0,0 +1,80 @@
|
|
|
+{%OPT=-glh}
|
|
|
+program tautom;
|
|
|
+
|
|
|
+type wstr_varnt_record=record
|
|
|
+ s:widestring;
|
|
|
+ v:variant;
|
|
|
+ end;
|
|
|
+
|
|
|
+ wstr_varnt_object=object
|
|
|
+ s:wstr_varnt_record;
|
|
|
+ end;
|
|
|
+
|
|
|
+ wstr_array1=array[0..99] of wstr_varnt_record;
|
|
|
+ wstr_array2=array[0..99] of wstr_varnt_object;
|
|
|
+
|
|
|
+
|
|
|
+procedure do_test;
|
|
|
+
|
|
|
+var a,b:wstr_array1;
|
|
|
+ c,d:wstr_array2;
|
|
|
+ i:0..99;
|
|
|
+
|
|
|
+
|
|
|
+begin
|
|
|
+ for i:=low(a) to high(a) do
|
|
|
+ begin
|
|
|
+ a[i].s:='Ninja';
|
|
|
+ a[i].v:='Samurai';
|
|
|
+ end;
|
|
|
+
|
|
|
+ b:=a;
|
|
|
+
|
|
|
+ for i:=low(a) to high(a) do
|
|
|
+ begin
|
|
|
+ if a[i].s<>'Ninja' then
|
|
|
+ halt(255);
|
|
|
+ if b[i].s<>'Ninja' then
|
|
|
+ halt(255);
|
|
|
+ if a[i].v<>'Samurai' then
|
|
|
+ halt(255);
|
|
|
+ if b[i].v<>'Samurai' then
|
|
|
+ halt(255);
|
|
|
+ end;
|
|
|
+
|
|
|
+ for i:=0 to 99 do
|
|
|
+ begin
|
|
|
+ c[i].s.s:=a[i].s;
|
|
|
+ c[i].s.v:=a[i].v;
|
|
|
+ end;
|
|
|
+
|
|
|
+ d:=c;
|
|
|
+ for i:=low(d) to high(d) do
|
|
|
+ begin
|
|
|
+ if c[i].s.s<>'Ninja' then
|
|
|
+ halt(255);
|
|
|
+ if d[i].s.s<>'Ninja' then
|
|
|
+ halt(255);
|
|
|
+ if c[i].s.v<>'Samurai' then
|
|
|
+ halt(255);
|
|
|
+ if d[i].s.v<>'Samurai' then
|
|
|
+ halt(255);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+var before,after:sizeuint;
|
|
|
+
|
|
|
+begin
|
|
|
+ with getfpcheapstatus do
|
|
|
+ before:=currheapused;
|
|
|
+ writeln('Used heap before ',before);
|
|
|
+
|
|
|
+ do_test;
|
|
|
+
|
|
|
+ with getfpcheapstatus do
|
|
|
+ after:=currheapused;
|
|
|
+ writeln('Used heap after ',after);
|
|
|
+ if before<>after then
|
|
|
+ exitcode:=255;
|
|
|
+end.
|