From: <ju...@su...> - 2003-05-07 04:24:05
|
Kristofer, My only comment is that IsValidPointer (or whatever it is called) should be used to avoid AV's during the compare. Neither the IDE nor the runtime recover well from AV's. Juanco > -----Original Message----- > From: dun...@li... > [mailto:dun...@li...] On Behalf > Of Kristofer Skaug > Sent: Friday, May 02, 2003 4:33 AM > To: Dunit-Interest > Subject: [DUnit-interest] Proposal: CheckEqualsMem > > > > Hi, > > here's an idea for an addition to TAbstractTest: New check() > family functions CheckEqualsMem and CheckNotEqualsMem. These > would compare two areas of memory (using CompareMem). In > CheckEqualsMem the inequality failure reports at which > byte-offset the memory areas first differ, and in which way. > > e.g.: CheckEqualsMem(@RefArray[0],@pSrvMsg.Packet,20,'pSrv.Packet'); > -> Could raise a failure message like this: > pSrv.Packet, expected: <05> but was: <FF> at Offset = 000Fh > > Proposed implementation follows, I'd be glad to hear your comments. > > Kristofer > > ------------------------------------------------------------- > // In TestFramework.pas: > > // Local support functions: > // --------------------------- > > function PtrOffset8(p:pointer; const Offset:integer):byte; begin > Result:=pByte(integer(p)+Offset)^; > end; // func PtrOffset8 > > function FindFirstDiffByte(p1,p2:pointer; Length:integer; var > b1,b2:byte):integer; var i:integer; begin > // I'm sure this could be done a lot faster! > Result:=-1; > for i:=0 to Length-1 do > if PtrOffset8(p1,i)<>PtrOffset8(p2,i) then > begin > Result:=i; > b1:=PtrOffset8(p1,i); > b2:=PtrOffset8(p2,i); > break; > end; > end; // func FindFirstDiffByte > > function TAbstractTest.GetMemDiffStr(pExpected,pActual:pointer; > Length:integer; Msg:string):string; > var db1,db2:byte; > Offset:integer; > begin > Offset:=FindFirstDiffByte(pExpected,pActual,Length,db1,db2); > Result:=NotEqualsErrorMessage(IntToHex(db1,2),IntToHex(db2,2),msg); > Result:=Result+' at Offset = '+IntToHex(Offset,4)+'h'; > end; > > procedure TAbstractTest.CheckEqualsMem(pExpected,pActual:pointer; > Length:integer; msg:string=''); > begin > if not CompareMem(pExpected,pActual,Length) then > Fail(GetMemDiffStr(pExpected,pActual,Length,msg),CallerAddr); > end; > > procedure TAbstractTest.CheckNotEqualsMem(pExpected,pActual:pointer; > Length:integer; msg:string=''); > begin > if CompareMem(pExpected,pActual,Length) then > begin > if msg<>'' then msg:=msg+', '; > Fail(msg+'Memory content was identical',CallerAddr); > end; > end; > > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > Dunit-interest mailing list Dun...@li... > https://lists.sourceforge.net/lists/listinfo/dunit-interest > |