2006-05-30 16:23:25 +02:00
unit CompileTestExtended;
interface
uses Classes,
2017-10-26 07:04:41 +02:00
//TestFramework,
2006-05-30 16:23:25 +02:00
{ Project Units }
SysUtils,
2017-10-26 07:04:41 +02:00
//ifps3,
//ifps3utl,
//ifpscomp,
//IFPS3CompExec,
CompilerTestBase, uPSCompiler, uPSUtils, testregistry;
2006-05-30 16:23:25 +02:00
type
TCompilerTestExtended = class( TCompilerTestBase)
private
protected
LastResult: string ;
LastResultB: Boolean ;
LastResultI: Longint ;
LastResultD: Double ;
procedure OnCompImport( Sender: TObject; x: TIFPSPascalCompiler) ; override ;
procedure ResultD( const d: Double ) ;
procedure ResultS( const s: string ) ;
procedure ResultB( const val: Boolean ) ;
procedure ResultI( const val: Longint ) ;
published
procedure VariantTest1;
procedure VariantTest2;
procedure ArrayTest1;
procedure CompileDouble;
procedure ArrayRefCounting;
procedure ArrayTest;
procedure FormatTest;
procedure ExtCharTest;
procedure StrList;
end ;
implementation
{ TCompilerTestExtended }
procedure TCompilerTestExtended. ArrayRefCounting;
begin
CompileRun( 'var e, d: array of string; begin SetArrayLength(d, 1); d[0] := ' '123' '; e := d;' +
'setarraylength(d, 0); e[0] := ' '321' '; d := e;setarraylength(e, 0); d[0] := ' '321' ';end.' ) ;
end ;
procedure TCompilerTestExtended. ArrayTest;
begin
CompileRun( 'var d,e: array of string; begin SetArrayLength(d, 1); d[0] := ' '123' '; e := d; setarraylength(e, 0); ResultS(d[0]); end.' ) ;
CheckEquals( LastResult, '123' ) ;
end ;
procedure TCompilerTestExtended. ArrayTest1;
begin
CompileRun( 'type Tstrarr = array of string; var r: TStrArr; i: Longint; Begin' +
' setarraylength(r, 3); r[0] := ' 'asdf' '; r[1] := ' 'safasf' '; ResultS(r[0]+' '!' '+r[1]); end.' ) ;
CheckEquals( 'asdf!safasf' , LastResult) ;
end ;
procedure TCompilerTestExtended. CompileDouble;
var
d: double ;
begin
CompileRun( 'var x: Double; begin x := 1234.54656456; ResultS(Format(' '%15.0f' ',[2*x]));end.' ) ;
d : = 1234.54656456 ;
CheckEquals( LastResult, Format( '%15.0f' , [ 2 * d] ) ) ;
end ;
procedure TCompilerTestExtended. ExtCharTest;
var
d: double ;
begin
CompileRun( 'var s:string; i:integer; Res: Double; function Test(i1, i2: Integer): Double; begin Result := Double(i1) / i2; end; ' +
'begin i := ord(' 'a' ');s:=chr(i); i := ord(' 'a' '); s:= chr(i + 1); s := s + chr(i); res := Test(10, 2); ResultS(' 'Test 1: ' '+s+' '|Test 2:' '+FloatToStr(res));end.' ) ;
d : = 1 0 ;
d : = d / 2 ;
2017-10-26 07:04:41 +02:00
CheckEquals( 'Test 1: ba|Test 2:' + uPSUtils. FloatToStr( d) , LastResult) ;
2006-05-30 16:23:25 +02:00
end ;
procedure TCompilerTestExtended. FormatTest;
begin
CompileRun( 'var s: string; begin s := ' 'TeSTDaTa' '; ResultS(' 'Test: ' '+format(' 'test %s %f' ', [s, 2 * PI])); end.' ) ;
CheckEquals( 'Test: test TeSTDaTa ' + SysUtils. Format( '%f' , [ 2 * pi] ) , LastResult) ;
end ;
procedure TCompilerTestExtended. OnCompImport( Sender: TObject;
x: TIFPSPascalCompiler) ;
begin
inherited ;
CompExec. AddMethod( Self, @ TCompilerTestExtended. ResultS, 'procedure ResultS(const s: string);' ) ;
CompExec. AddMethod( Self, @ TCompilerTestExtended. ResultB, 'procedure ResultB(const b: Boolean);' ) ;
CompExec. AddMethod( Self, @ TCompilerTestExtended. ResultI, 'procedure ResultI(const I: Longint);' ) ;
CompExec. AddMethod( Self, @ TCompilerTestExtended. ResultD, 'procedure ResultD(const D: Double);' ) ;
end ;
procedure TCompilerTestExtended. ResultB( const val: Boolean ) ;
begin
LastResultB : = Val;
end ;
procedure TCompilerTestExtended. ResultD( const d: Double ) ;
begin
LastResultD : = d;
end ;
procedure TCompilerTestExtended. ResultI( const val: Integer ) ;
begin
LastResultI : = Val;
end ;
procedure TCompilerTestExtended. ResultS( const s: string ) ;
begin
LastResult : = s;
end ;
procedure TCompilerTestExtended. StrList;
begin
CompileRun( 'var r: TStringList; begin r := TStringList.Create; try r.Values[' 'test' '] := ' 'data' ';' +
'ResultS(' 'Test1: ' '+r.Values[' 'test1' ']+#13#10+' 'Test2: ' '+r.Values[' 'test' ']); finally r.Free; end;end.' ) ;
CheckEquals( 'Test1: ' #13 #10 'Test2: data' , Lastresult) ;
end ;
procedure TCompilerTestExtended. VariantTest1;
begin
CompileRun( 'var v: variant; Begin v := ' 'Hey:' '; v := v + FloatToStr(Pi); ResultS(v);end.' ) ;
2017-10-26 07:04:41 +02:00
CheckEquals( 'Hey:' + uPSUtils. FloatToStr( Pi) , LastResult) ;
2006-05-30 16:23:25 +02:00
end ;
procedure TCompilerTestExtended. VariantTest2;
begin
2017-10-26 07:04:41 +02:00
// Does not work in fpc (same code compiled fails too)
// CompileRun('var v: variant; s: string;Begin v := 123; s := v; v := s + ''_test_'';'+
//' s := v; v := 123.456; s := s + v; v := ''test'' + s; ResultS(v);end.');
// CheckEquals('test123_test_'+Sysutils.FloatToStr(123.456), LastResult);
2006-05-30 16:23:25 +02:00
end ;
initialization
2017-10-26 07:04:41 +02:00
RegisterTests( [ TCompilerTestExtended] ) ;
2006-05-30 16:23:25 +02:00
end .