Browse Source

* use domem() for heap checking

peter 21 years ago
parent
commit
d30f99c17e

+ 8 - 11
tests/tbs/tb0239.pp

@@ -3,9 +3,14 @@
 
 
 {$H+}
 {$H+}
 Program AnsiTest;
 Program AnsiTest;
+uses
+  erroru;
 
 
 Type
 Type
    PS=^String;
    PS=^String;
+var
+  mem : ptrint;
+
 
 
 procedure test;
 procedure test;
 var
 var
@@ -26,18 +31,10 @@ Begin
   Dispose(P);
   Dispose(P);
 end;
 end;
 
 
-var
-  membefore : longint;
-
 begin
 begin
-  membefore:=memavail;
+  DoMem(mem);
   test;
   test;
-  if membefore<>memavail then
-    begin
-      Writeln('Memory hole using pointers to ansi strings');
-      Halt(1);
-    end
-  else
-    Writeln('No memory hole with pointers to ansi strings');
+  if DoMem(mem)<>0 then
+    halt(1);
 end.
 end.
 
 

+ 6 - 13
tests/tbs/tb0240.pp

@@ -1,10 +1,10 @@
 { Old file: tbs0280.pp }
 { Old file: tbs0280.pp }
 { problem with object finalization.                    OK 0.99.13 (FK) }
 { problem with object finalization.                    OK 0.99.13 (FK) }
-
 {$mode objfpc}
 {$mode objfpc}
 {$H+}
 {$H+}
 
 
-program memhole;
+uses
+  Erroru;
 
 
 type
 type
   TMyClass = class
   TMyClass = class
@@ -29,17 +29,10 @@ begin
 end;
 end;
 
 
 var
 var
-   membefore : sizeint;
+   mem : sizeint;
 begin
 begin
-  membefore:=memavail;
-  writeln(memavail);
+  DoMem(mem);
   dotest;
   dotest;
-  writeln(memavail);
-  if membefore<>memavail then
-    begin
-      Writeln('Memory hole using ansi strings in classes');
-      Halt(1);
-    end
-  else
-    Writeln('No memory hole unsing ansi strings in classes');
+  if DoMem(mem)<>0 then
+    Halt(1);
 end.
 end.

+ 16 - 17
tests/test/tobject1.pp

@@ -5,7 +5,7 @@ program test_fail;
 
 
   uses
   uses
     erroru;
     erroru;
-    
+
   type
   type
      parrayobj = ^tarrayobj;
      parrayobj = ^tarrayobj;
      tarrayobj = object
      tarrayobj = object
@@ -24,7 +24,6 @@ program test_fail;
   var
   var
     pa1, pa2 : parrayobj;
     pa1, pa2 : parrayobj;
     ta1, ta2 : tarrayobj;
     ta1, ta2 : tarrayobj;
-    availmem : longint;
 
 
   constructor tarrayobj.init(do_fail : boolean);
   constructor tarrayobj.init(do_fail : boolean);
     begin
     begin
@@ -40,8 +39,8 @@ program test_fail;
 
 
   procedure  tarrayobj.test;
   procedure  tarrayobj.test;
     begin
     begin
-      Writeln('@self = ',longint(@self));
-      Writeln('typeof = ',longint(typeof(self)));
+      Writeln('@self = ',ptrint(@self));
+      Writeln('typeof = ',ptrint(typeof(self)));
       if ar[1]=1 then
       if ar[1]=1 then
         Writeln('Init called');
         Writeln('Init called');
       if ar[2]=2 then
       if ar[2]=2 then
@@ -66,33 +65,33 @@ program test_fail;
       Inherited test;
       Inherited test;
     end;
     end;
 
 
+  var
+    mem : sizeint;
   begin
   begin
+	 mem:=0;
+	 DoMem(mem);
      new(pa1,init(false));
      new(pa1,init(false));
-     getheapstatus(hstatus);
-     writeln('After successful new(pa1,init), memory used = ',hstatus.CurrHeapUsed);
+     writeln('After successful new(pa1,init)');
      new(pa2,init(true));
      new(pa2,init(true));
-     getheapstatus(hstatus);
-     writeln('After unsuccessful new(pa2,init), memory used = ',hstatus.CurrHeapUsed);
-     writeln('pa1 = ',longint(pa1),' pa2 = ',longint(pa2));
+     writeln('After unsuccessful new(pa2,init)');
+     writeln('pa1 = ',ptrint(pa1),' pa2 = ',ptrint(pa2));
      writeln('Call to pa1^.test after successful init');
      writeln('Call to pa1^.test after successful init');
      pa1^.test;
      pa1^.test;
      dispose(pa1,done);
      dispose(pa1,done);
-     getheapstatus(hstatus);
-     writeln('After release of pa1, memory used = ',hstatus.CurrHeapUsed);
+     writeln('After release of pa1');
+     DoMem(mem);
      pa1:=new(pbigarrayobj,good_init);
      pa1:=new(pbigarrayobj,good_init);
-     getheapstatus(hstatus);
-     writeln('After successful pa1:=new(pbigarrayobj,good_init), memory used = ',hstatus.CurrHeapUsed);
+     writeln('After successful pa1:=new(pbigarrayobj,good_init)');
      pa2:=new(pbigarrayobj,wrong_init);
      pa2:=new(pbigarrayobj,wrong_init);
-     getheapstatus(hstatus);
-     writeln('After unsuccessful pa2:=new(pbigarrayobj,wrong_init), memory used = ',hstatus.CurrHeapUsed);
-     writeln('pa1 = ',longint(pa1),' pa2 = ',longint(pa2));
+     writeln('After unsuccessful pa2:=new(pbigarrayobj,wrong_init)');
+     writeln('pa1 = ',ptrint(pa1),' pa2 = ',ptrint(pa2));
      writeln('Call to pa1^.test after successful init');
      writeln('Call to pa1^.test after successful init');
      pa1^.test;
      pa1^.test;
      ta1.init(false);
      ta1.init(false);
      writeln('Call to ta1.test after successful init');
      writeln('Call to ta1.test after successful init');
      ta1.test;
      ta1.test;
      ta2.init(true);
      ta2.init(true);
-     writeln('typeof(ta2) = ',longint(typeof(ta2)),' after unsuccessful init');
+     writeln('typeof(ta2) = ',ptrint(typeof(ta2)),' after unsuccessful init');
      Writeln('Trying to call ta2.test (should generate a Run Time Error)');
      Writeln('Trying to call ta2.test (should generate a Run Time Error)');
      ta2.test;
      ta2.test;
   end.
   end.

+ 28 - 4
tests/units/erroru.pp

@@ -30,7 +30,7 @@ type
   procedure getheapstatus(var status:THeapStatus);
   procedure getheapstatus(var status:THeapStatus);
 {$endif HASGETHEAPSTATUS}
 {$endif HASGETHEAPSTATUS}
 
 
-Procedure DoMem (Var StartMem : sizeint);
+function DoMem (Var StartMem : sizeint): sizeint;
 
 
 
 
 implementation
 implementation
@@ -115,13 +115,37 @@ end;
 {$endif HASGETHEAPSTATUS}
 {$endif HASGETHEAPSTATUS}
 
 
 
 
-Procedure DoMem (Var StartMem : sizeint);
+function DoMem (Var StartMem : sizeint): sizeint;
+
+  function getsize(l:sizeint):string;
+  begin
+    if l<16*1024 then
+      begin
+        str(l,getsize);
+        getsize:=getsize+' bytes';
+      end
+    else
+      begin
+        str(l shr 10,getsize);
+        getsize:=getsize+' Kb';
+      end;
+  end;
+
 var
 var
   hstatus : THeapstatus;
   hstatus : THeapstatus;
 begin
 begin
   GetHeapStatus(hstatus);
   GetHeapStatus(hstatus);
-  if StartMem<>0 then
-    Writeln ('Used: ',hstatus.CUrrHeapUsed shr 10,'Kb, Lost ',hstatus.CurrHeapUsed-StartMem,' Bytes.');
+  if StartMem=0 then
+    begin
+      Writeln ('[HEAP] Size: ',getsize(hstatus.CurrHeapSize),',   Used: ',getsize(hstatus.CurrHeapUsed));
+      DoMem:=0;
+    end
+  else
+    begin
+      Writeln ('[HEAP] Size: ',getsize(hstatus.CurrHeapSize),',   Used: ',getsize(hstatus.CurrHeapUsed),
+               ',  Lost: ',getsize(hstatus.CurrHeapUsed-StartMem));
+      DoMem:=hstatus.CurrHeapUsed-StartMem;
+    end;
   StartMem:=hstatus.CurrHeapUsed;
   StartMem:=hstatus.CurrHeapUsed;
 end;
 end;
 
 

+ 7 - 19
tests/webtbs/tw0630.pp

@@ -1,34 +1,22 @@
 { Program 1 : memory waste
 { Program 1 : memory waste
  dummy test }
  dummy test }
 
 
-USES SysUtils;
+USES SysUtils,erroru;
 
 
 procedure test_it;
 procedure test_it;
 var
 var
         sRec : TSearchRec;
         sRec : TSearchRec;
 begin
 begin
-        writeln(memAvail);
         findFirst('c:\*.*',faVolumeId,sRec);
         findFirst('c:\*.*',faVolumeId,sRec);
         findClose(sRec);
         findClose(sRec);
         writeln(sRec.name);
         writeln(sRec.name);
-        writeln(memAvail);      { 288 bytes waste ! }
 end;
 end;
 
 
-begin
-  Writeln('Before call ',MemAvail);
-  test_it;
-  Writeln('After call : ',MemAvail);
-end.
-(*{ Program 2 : correct }
-
-USES Dos;
-
 var
 var
-        sRec : searchRec;
+  mem : sizeint;
 begin
 begin
-        writeln(memAvail);
-        findFirst('c:\*.*',volumeid,sRec);
-        findClose(sRec);
-        writeln(sRec.name);
-        writeln(memAvail);      { no memory waste ! }
-end. *)
+  mem:=0;
+  DoMem(mem);
+  test_it;
+  DoMem(mem);
+end.

+ 6 - 7
tests/webtbs/tw0812.pp

@@ -1,5 +1,6 @@
-program TestVm2;
-
+uses
+  erroru;
+  
 procedure Test;
 procedure Test;
 var
 var
   P: Pointer;
   P: Pointer;
@@ -9,13 +10,11 @@ begin
   ReAllocMem(P, 0);
   ReAllocMem(P, 0);
 end;
 end;
 
 
-var MemBefore : longint;
+var Mem : sizeint;
 begin
 begin
-  writeln(MemAvail);
-  MemBefore:=MemAvail;
+  domem(mem);
   Test;
   Test;
-  writeln(MemAvail);
-  if MemBefore<>MemAvail then
+  if domem(mem)<>0 then
     begin
     begin
       Writeln('ReAllocMem creates emory leaks');
       Writeln('ReAllocMem creates emory leaks');
       Writeln('Bug 812 is not yet fixed');
       Writeln('Bug 812 is not yet fixed');

+ 4 - 6
tests/webtbs/tw0813.pp

@@ -1,4 +1,4 @@
-program TestVm2;
+uses erroru;
 
 
 procedure Test;
 procedure Test;
 var
 var
@@ -15,13 +15,11 @@ begin
     end;
     end;
 end;
 end;
 
 
-var MemBefore : longint;
+var Mem : sizeint;
 begin
 begin
-  writeln(heapsize-MemAvail);
-  MemBefore:=heapsize-MemAvail;
+  domem(mem);
   Test;
   Test;
-  writeln(heapsize-MemAvail);
-  if MemBefore<>heapsize-MemAvail then
+  if domem(mem)<>0 then
     begin
     begin
       Writeln('ReAllocMem creates emory leaks');
       Writeln('ReAllocMem creates emory leaks');
       Writeln('Bug 812 is not yet fixed');
       Writeln('Bug 812 is not yet fixed');

+ 4 - 6
tests/webtbs/tw1658.pp

@@ -4,7 +4,7 @@
 program Buggy;
 program Buggy;
 
 
 uses
 uses
-
+  erroru,
   Objects, Strings;
   Objects, Strings;
 
 
 type
 type
@@ -31,10 +31,9 @@ end;
 // Global vars
 // Global vars
 var
 var
   pTempStream: PMyStream;
   pTempStream: PMyStream;
-  EntryMem,ExitMem : Cardinal;
-// Main routine
+  mem : sizeint;
 begin
 begin
-  EntryMem:=heapsize-MemAvail;
+  DoMem(mem);
   pTempStream := nil;
   pTempStream := nil;
   pTempStream := New(PMyStream, Init('tw1658.tmp', stCreate));
   pTempStream := New(PMyStream, Init('tw1658.tmp', stCreate));
   if not Assigned(pTempStream) then
   if not Assigned(pTempStream) then
@@ -42,8 +41,7 @@ begin
   pTempStream^.m_fAutoDelete := False;
   pTempStream^.m_fAutoDelete := False;
   Dispose(pTempStream, Done);
   Dispose(pTempStream, Done);
   pTempStream := nil;
   pTempStream := nil;
-  ExitMem:=heapsize-MemAvail;
-  If ExitMem<EntryMem then
+  if DoMem(mem)<>0 then
     begin
     begin
       Writeln('Memory lost');
       Writeln('Memory lost');
       Halt(1);
       Halt(1);

+ 5 - 4
tests/webtbs/tw2494.pp

@@ -1,7 +1,8 @@
 { Source provided for Free Pascal Bug Report 2494 }
 { Source provided for Free Pascal Bug Report 2494 }
 { Submitted by "Alan Mead" on  2003-05-17 }
 { Submitted by "Alan Mead" on  2003-05-17 }
 { e-mail: [email protected] }
 { e-mail: [email protected] }
-program dummy;
+uses 
+  erroru;
 
 
 type
 type
   matrix_element = array[1..1] of byte;
   matrix_element = array[1..1] of byte;
@@ -17,11 +18,10 @@ var p:pointer;
   size, storage : longint;
   size, storage : longint;
   i,j:longint;
   i,j:longint;
   done:boolean;
   done:boolean;
-
+  mem : sizeint;
 begin
 begin
   ReturnNilIfGrowHeapFails:=true;
   ReturnNilIfGrowHeapFails:=true;
-  writeln('Total heap available is ',MemAvail,' bytes');
-  writeln('Largest block available is ',MaxAvail,' bytes');
+  domem(mem);
   done := false;
   done := false;
   size := 40000000;
   size := 40000000;
   repeat
   repeat
@@ -40,5 +40,6 @@ begin
         freemem(l,storage);
         freemem(l,storage);
       end;
       end;
   until (done);
   until (done);
+  domem(mem);
 end.
 end.
 
 

+ 4 - 3
tests/webtbs/tw3004.pp

@@ -5,7 +5,7 @@
 {$H+}
 {$H+}
 { $mode DELPHI}
 { $mode DELPHI}
 
 
-uses SysUtils;
+uses erroru,SysUtils;
 
 
   procedure P;
   procedure P;
   var s:string;
   var s:string;
@@ -18,12 +18,13 @@ procedure p1;
 var
 var
   i : sizeint;
   i : sizeint;
 begin
 begin
- i:=heapsize-memavail; 
+ i:=0;
+ domem(i);
  try
  try
   P;
   P;
  except
  except
  end;
  end;
- if i<>heapsize-memavail then
+ if domem(i)<>0 then
    begin
    begin
      writeln('Memleak');
      writeln('Memleak');
      halt(1);
      halt(1);

+ 1 - 0
tests/webtbs/tw3131.pp

@@ -5,6 +5,7 @@
 { e-mail: [email protected] }
 { e-mail: [email protected] }
 program tmp;
 program tmp;
 
 
+{$goto on}
 {$asmmode intel}
 {$asmmode intel}
 
 
 procedure l;
 procedure l;

+ 5 - 6
tests/webtbs/tw3334.pp

@@ -5,7 +5,8 @@ program project1;
 
 
 {$mode objfpc}{$H+}
 {$mode objfpc}{$H+}
 
 
-uses
+uses 
+  erroru,
   Classes;
   Classes;
 
 
 procedure p1;  
 procedure p1;  
@@ -19,13 +20,11 @@ begin
 end;
 end;
 
 
 var
 var
- mem1,mem2 : longint;
+ mem : sizeint;
 begin
 begin
-  mem1:=heapsize-memavail;
+  domem(mem);
   p1;
   p1;
-  mem2:=heapsize-memavail;
-  writeln(mem1,' - ',mem2);
-  if mem1<>mem2 then
+  if domem(mem)<>0 then
     halt(1);
     halt(1);
 end.
 end.
 
 

+ 6 - 3
tests/webtbs/uw0701d.pp

@@ -4,13 +4,16 @@ unit uw0701d;
 
 
   implementation
   implementation
 
 
+uses erroru;
+
 var
 var
-   startmem : longint;
+   startmem : sizeint;
 
 
 initialization
 initialization
-   startmem:=heapsize-memavail;
+   startmem:=0;
+   DoMem(startmem);
 finalization
 finalization
-   if startmem<>heapsize-memavail then
+   if DoMem(startmem)<>0 then
      begin
      begin
        writeln('Problem with ansistrings in units');
        writeln('Problem with ansistrings in units');
        halt(1);
        halt(1);