tarray2.pp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. {$mode objfpc}
  2. Program TestAOC;
  3. { Program to test array of const }
  4. { All elements of the following record must be tested :
  5. Elements not yet tested are commented out.
  6. Type
  7. PVarRec = ^TVarRec;
  8. TVarRec = record
  9. case vType: Byte of
  10. vtInteger : (VInteger: Integer; VType:Longint);
  11. vtBoolean : (VBoolean: Boolean);
  12. vtChar : (VChar: Char);
  13. vtExtended : (VExtended: PExtended);
  14. vtString : (VString: PShortString);
  15. vtPointer : (VPointer: Pointer);
  16. vtPChar : (VPChar: PChar);
  17. vtObject : (VObject: TObject);
  18. vtClass : (VClass: TClass);
  19. // vtWideChar : (VWideChar: WideChar);
  20. // vtPWideChar : (VPWideChar: PWideChar);
  21. vtAnsiString : (VAnsiString: Pointer);
  22. // vtCurrency : (VCurrency: PCurrency);
  23. // vtVariant : (VVariant: PVariant);
  24. // vtInterface : (VInterface: Pointer);
  25. // vtWideString : (VWideString: Pointer);
  26. vtInt64 : (VInt64: PInt64);
  27. vtQWord : (VQWord: PQWord);
  28. end;
  29. }
  30. procedure testit2 (args: array of byte);
  31. begin
  32. end;
  33. Procedure Testit (Args: Array of const);
  34. Var I : longint;
  35. begin
  36. If High(Args)<0 then
  37. begin
  38. Writeln ('No aguments');
  39. exit;
  40. end;
  41. Writeln ('Got ',High(Args)+1,' arguments :');
  42. For i:=0 to High(Args) do
  43. begin
  44. write ('Argument ',i,' has type ');
  45. case Args[i].vtype of
  46. vtinteger : Writeln ('Integer, Value :',args[i].vinteger);
  47. vtboolean : Writeln ('Boolean, Value :',args[i].vboolean);
  48. vtchar : Writeln ('Char, value : ',args[i].vchar);
  49. vtextended : Writeln ('Extended, value : ',args[i].VExtended^);
  50. vtString : Writeln ('ShortString, value :',args[i].VString^);
  51. vtPointer : Writeln ('Pointer, value : ',Longint(Args[i].VPointer));
  52. vtPChar : Writeln ('PCHar, value : ',Args[i].VPChar);
  53. vtObject : Writeln ('Object, name : ',Args[i].VObject.Classname);
  54. vtClass : Writeln ('Class reference, name : ',Args[i].VClass.Classname);
  55. vtAnsiString : Writeln ('AnsiString, value :',AnsiString(Args[I].VAnsiString));
  56. {
  57. vtWideChar : (VWideChar: WideChar);
  58. vtPWideChar : (VPWideChar: PWideChar);
  59. vtCurrency : (VCurrency: PCurrency);
  60. vtVariant : (VVariant: PVariant);
  61. vtInterface : (VInterface: Pointer);
  62. vtWideString : (VWideString: Pointer);
  63. }
  64. vtInt64 : Writeln ('Int64, value : ',args[i].VInt64^);
  65. vtQWord : Writeln ('QWord, value : ',args[i].VQWord^);
  66. else
  67. Writeln ('(Unknown) : ',args[i].vtype);
  68. end;
  69. end;
  70. end;
  71. Const P1 : Pchar = 'Eerste Pchar';
  72. p2 : Pchar = 'Tweede pchar';
  73. Var ObjA,ObjB : TObject;
  74. ACLass,BClass : TClass;
  75. S,T : AnsiString;
  76. begin
  77. ObjA:=TObject.Create;
  78. ObjB:=TObject.Create;
  79. AClass:=TObject;
  80. S:='Ansistring 1';
  81. T:='AnsiString 2';
  82. writeln ('Size of VarRec : ',Sizeof(TVarRec));
  83. Testit ([]);
  84. Testit ([1,2]);
  85. Testit (['A','B']);
  86. Testit ([TRUE,FALSE,TRUE]);
  87. Testit (['String','Another string']);
  88. Testit ([S,T]) ;
  89. Testit ([P1,P2]);
  90. Testit ([@testit,Nil]);
  91. Testit ([ObjA,ObjB]);
  92. Testit ([1.234,1.234]);
  93. TestIt ([AClass]);
  94. TestIt ([QWord(1234)]);
  95. TestIt ([Int64(1234)]);
  96. TestIt ([Int64(12341234)*1000000000+Int64(12341234)]);
  97. TestIt2 ([]);
  98. TestIt2 ([1,2]);
  99. end.