t_id
1515
t_adddate
2005/03/11
t_result
0
t_knownrunerror
0
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/09/26 18:42:00 90 | 2024/09/26 23:02:00 44 | |
i386 | 4 | 8.0 | 2024/09/26 19:54:00 70 | 2024/09/26 22:38:00 79 | |
powerpc | 14 | 28.0 | 2024/09/26 19:41:00 35 | 2024/09/26 23:02:00 44 | |
powerpc64 | 17 | 34.0 | 2024/09/26 18:42:00 90 | 2024/09/26 22:29:00 103 | |
wasm32 | 7 | 14.0 | 2024/09/26 19:31:00 339 | 2024/09/26 22:50:00 299 | |
riscv64 | 8 | 16.0 | 2024/09/26 19:14:00 123 | 2024/09/26 19:59:00 123 | |
linux | 39 | 78.0 | 2024/09/26 18:42:00 90 | 2024/09/26 23:02:00 44 | |
go32v2 | 4 | 8.0 | 2024/09/26 19:54:00 70 | 2024/09/26 22:38:00 79 | |
wasi | 7 | 14.0 | 2024/09/26 19:31:00 339 | 2024/09/26 22:50:00 299 | |
3.3.1 | 34 | 68.0 | 2024/09/26 18:42:00 90 | 2024/09/26 22:50:00 299 | |
3.2.3 | 16 | 32.0 | 2024/09/26 21:17:00 71 | 2024/09/26 23:02:00 44 |
{$mode delphi} uses variants, sysutils; (*$ASSERTIONS ON*) var fRefCount: Integer = 0; type IA = interface ['{81E19F6A-90C2-11D9-8448-00055DDDEA00}'] end; TA = class(TObject, IA, IInterface) destructor Destroy; override; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; function QueryInterface(const iid: TGuid; out obj): HResult; stdcall; procedure AfterConstruction; override; class function NewInstance: TObject; override; end; class function TA.NewInstance: TObject; begin Result := inherited NewInstance; fRefCount := 1; end; procedure TA.AfterConstruction; begin InterlockedDecrement(fRefCount); inherited AfterConstruction; end; function TA._AddRef: Integer; stdcall; begin InterlockedIncrement(fRefCount); Result := 0; end; function TA._Release: Integer; stdcall; begin InterlockedDecrement(fRefCount); if fRefCount = 0 then begin Writeln('Destroy'); Self.Destroy; end; Result := 0; end; function TA.QueryInterface(const iid: TGuid; out obj): HResult; stdcall; begin Result := E_NOINTERFACE; end; var gone: Boolean = False; destructor TA.Destroy; begin gone := True; Writeln('gone'); inherited Destroy; end; procedure X; var v: Variant; i: IInterface; begin Writeln('start of test'); (* simple test with nil interface *) i := nil; v := i; i := v; v := 3; (* complex test with refcounting *) Writeln('complex test'); i := TA.Create; assert(fRefCount = 1); Writeln('part 1'); v := i; Writeln('part 2'); //assert(fRefCount = 2); i := nil; //assert(fRefCount = 1); Writeln('part 3'); i := v; //assert(fRefCount = 2); Writeln('gone false'); assert(gone = False); i := nil; //assert(fRefCount = 1); assert(gone = False); v := 7; (* TA refcount 0; gone ... note that v := Null doesnt work for some reason *) //assert(fRefCount = 0); Writeln('goo'); //assert(gone = True); (* "gone" *) Writeln('okay'); //Halt(0); end; begin X; end.