tarray15.pp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. program tarray15;
  2. {$mode objfpc}
  3. { needed for "except" to work }
  4. uses
  5. SysUtils;
  6. {$ifdef InLazIDE}
  7. function CheckArray(aArr, aExpected: array of LongInt): Boolean;
  8. {$else}
  9. generic function CheckArray<T>(aArr, aExpected: array of T): Boolean;
  10. {$endif}
  11. var
  12. i: LongInt;
  13. begin
  14. if Length(aArr) <> Length(aExpected) then
  15. Exit(False);
  16. for i := Low(aArr) to High(aArr) do
  17. if aArr[i] <> aExpected[i] then
  18. Exit(False);
  19. Result := True;
  20. end;
  21. var
  22. v1: array of LongInt = Nil;
  23. v2: array of LongInt = ();
  24. v3: array of LongInt = (1, 2, 3);
  25. v4: array of String = ('Alpha', 'Beta', 'Gamma', 'Delta');
  26. v5: array[0..2] of array of LongInt = (Nil, (), (1, 2, 3));
  27. v6: array of array[0..2] of LongInt = ((1, 2, 3), (4, 5, 6));
  28. v7: array[0..2] of array of array[0..2] of LongInt = (((1, 2, 3), (4, 5, 6)), (), ((7, 8, 9)));
  29. {$push}
  30. {$J-}
  31. const
  32. rc1: array of LongInt = (1, 2, 3);
  33. {$J+}
  34. const
  35. wc1: array of LongInt = (1, 2, 3);
  36. {$pop}
  37. begin
  38. if Length(v1) <> 0 then
  39. Halt(1);
  40. if Length(v2) <> 0 then
  41. Halt(2);
  42. {$ifndef InLazIDE}
  43. if not specialize CheckArray<LongInt>(v3, [1, 2, 3]) then
  44. Halt(3);
  45. if not specialize CheckArray<String>(v4, ['Alpha', 'Beta', 'Gamma', 'Delta']) then
  46. Halt(4);
  47. if Length(v5[0]) <> 0 then
  48. Halt(5);
  49. if Length(v5[1]) <> 0 then
  50. Halt(6);
  51. if not specialize CheckArray<LongInt>(v5[2], [1, 2, 3]) then
  52. Halt(7);
  53. if Length(v6) <> 2 then
  54. Halt(8);
  55. if not specialize CheckArray<LongInt>(v6[0], [1, 2, 3]) then
  56. Halt(9);
  57. if not specialize CheckArray<LongInt>(v6[1], [4, 5, 6]) then
  58. Halt(10);
  59. if Length(v7[0]) <> 2 then
  60. Halt(11);
  61. if Length(v7[1]) <> 0 then
  62. Halt(12);
  63. if Length(v7[2]) <> 1 then
  64. Halt(13);
  65. if not specialize CheckArray<LongInt>(v7[0, 0], [1, 2, 3]) then
  66. Halt(14);
  67. if not specialize CheckArray<LongInt>(v7[0, 1], [4, 5, 6]) then
  68. Halt(15);
  69. if not specialize CheckArray<LongInt>(v7[2, 0], [7, 8, 9]) then
  70. Halt(16);
  71. v3[1] := 42;
  72. if not specialize CheckArray<LongInt>(v3, [1, 42, 3]) then
  73. Halt(17);
  74. if not specialize CheckArray<LongInt>(rc1, [1, 2, 3]) then
  75. Halt(18);
  76. if not specialize CheckArray<LongInt>(wc1, [1, 2, 3]) then
  77. Halt(20);
  78. wc1[1] := 42;
  79. if not specialize CheckArray<LongInt>(wc1, [1, 42, 3]) then
  80. Halt(21);
  81. {$endif}
  82. Writeln('ok');
  83. end.