Test suite results for test file webtbs/tw3899.pp

Test run data :

Free Pascal Compiler Test Suite Results

View Test suite results

Please specify search criteria:
File:
Operating system:
Processor:
Version
Date
Submitter
Machine
Comment
Limit
Cond
Category
Only failed tests
Hide skipped tests
List all tests

Test file "webtbs/tw3899.pp" information:

t_id 1560
t_adddate 2005/04/29
t_result 0
t_knownrunerror 0

Detailed test run results:

Record count: 50

Total = 50

OK=50 Percentage= 100.00

Result type Cat. Count Percentage First date Last Date
Successfully run 50 100.0 2024/05/21 01:22:00 34 2024/05/21 02:58:00 15
i386 12 24.0 2024/05/21 01:22:00 34 2024/05/21 02:56:00 32
x86_64 33 66.0 2024/05/21 01:33:00 15 2024/05/21 02:58:00 15
aarch64 5 10.0 2024/05/21 01:42:00 32 2024/05/21 02:52:00 39
linux 50 100.0 2024/05/21 01:22:00 34 2024/05/21 02:58:00 15
3.3.1 27 54.0 2024/05/21 01:33:00 15 2024/05/21 02:58:00 15
3.2.3 23 46.0 2024/05/21 01:22:00 34 2024/05/21 02:57:00 35

Source:

{ Source provided for Free Pascal Bug Report 3899 }
{ Submitted by "Stefan Glienke" on  2005-04-19 }
{ e-mail: glienke@cpa.de }
program project2;

{$mode objfpc}{$H+}

uses
  Classes;
  
type
  TZVariant = packed record
    VInteger: Int64;
  end;

  IZInterface = IUnknown;

  IZObject = interface(IZInterface)
    ['{EF46E5F7-00CF-4DDA-BED0-057D6686AEE0}']
    function Equals(const Value: IZInterface): Boolean;
  end;

  IZClonnable = interface(IZObject)
    ['{ECB7F3A4-7B2E-4130-BA66-54A2D43C0149}']
  end;

  IZAnyValue = interface (IZClonnable)
    ['{E81988B3-FD0E-4524-B658-B309B02F0B6A}']
  end;
  
  TZAbstractObject = class(TInterfacedObject, IZObject)
  public
    function Equals(const Value: IZInterface): Boolean; virtual;
  end;

  TZAnyValue = class(TZAbstractObject, IZAnyValue)
  private
    FValue: TZVariant;
  public
    constructor Create(Value: TZVariant);
    function Equals(const Value: IZInterface): Boolean; override;
  end;

constructor TZAnyValue.Create(Value: TZVariant);
begin
  FValue := Value;
end;

function TZAnyValue.Equals(const Value: IZInterface): Boolean;
var
  Temp: IZAnyValue;
begin
  if Value <> nil then
  begin
    if Value.QueryInterface(IZAnyValue, Temp) = 0 then
    begin
      Result := False;
      Temp := nil;
    end
    else
      Result := inherited Equals(Value);
  end
  else
    Result := False;
end;

function TZAbstractObject.Equals(const Value: IZInterface): Boolean;
begin
  if Value <> nil then
  begin
    Result := (IZInterface(Self) = Value)
      or ((Self as IZInterface) = (Value as IZInterface));
  end
  else
    Result := False;
end;


var
  ARecord: TZVariant;
  AValue: IZAnyValue;

begin
  ARecord.VInteger := 42;
  AValue := TZAnyValue.Create(ARecord);

  AValue.Equals(AValue);
  AValue.Equals(AValue); // <-- this call produces av

end.

Link to SVN view of webtbs/tw3899.pp source.