tb0511.pp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. { original: peter5a.pas from the GNU Pascal testsuite }
  2. { Mac Pascal objects }
  3. {$mode macpas}
  4. program peter5a;
  5. type
  6. Str = String[100];
  7. BaseObject = object
  8. v1: Str;
  9. function m1: Str;
  10. function m2: Str;
  11. end;
  12. SuperObject = object(BaseObject)
  13. v2: Str;
  14. v3: Str;
  15. function m1: Str; override;
  16. function m2: Str; override;
  17. function m3: Str;
  18. end;
  19. var
  20. good: Boolean;
  21. function BaseObject.m1: Str;
  22. begin
  23. return 'BaseObject.' + v1;
  24. end;
  25. function BaseObject.m2: Str;
  26. begin
  27. return 'BaseObject.nov2';
  28. end;
  29. function SuperObject.m1: Str;
  30. begin
  31. return 'SuperObject.' + (inherited m1) + '.' + v1;
  32. end;
  33. function SuperObject.m2: Str;
  34. begin
  35. return 'SuperObject.' + (inherited m2) + '.' + v2;
  36. end;
  37. function SuperObject.m3: Str;
  38. begin
  39. return 'SuperObject.' + v3;
  40. end;
  41. procedure CheckEqual( const param, s1, s2: Str );
  42. begin
  43. if s1 <> s2 then begin
  44. good := false;
  45. WriteLn( 'Failed: ', param, ' = ', s1, ' is not equal to ', s2 );
  46. end;
  47. end;
  48. var
  49. base: BaseObject;
  50. super: SuperObject;
  51. reallysuper: BaseObject;
  52. begin
  53. New(base);
  54. base.v1 := 'basev1';
  55. New(super);
  56. super.v1 := 'superv1';
  57. super.v2 := 'superv2';
  58. super.v3 := 'superv3';
  59. reallysuper := super; { reference copy only! }
  60. good := true;
  61. CheckEqual( 'base.m1', base.m1, 'BaseObject.basev1' );
  62. CheckEqual( 'base.m2', base.m2, 'BaseObject.nov2' );
  63. CheckEqual( 'super.m1', super.m1, 'SuperObject.BaseObject.superv1.superv1' );
  64. CheckEqual( 'super.m2', super.m2, 'SuperObject.BaseObject.nov2.superv2' );
  65. CheckEqual( 'super.m3', super.m3, 'SuperObject.superv3' );
  66. CheckEqual( 'reallysuper.m1', reallysuper.m1, 'SuperObject.BaseObject.superv1.superv1' );
  67. CheckEqual( 'reallysuper.m2', reallysuper.m2, 'SuperObject.BaseObject.nov2.superv2' );
  68. if good then begin
  69. WriteLn( 'OK' );
  70. end
  71. else begin
  72. halt(1);
  73. end;
  74. Dispose( base );
  75. Dispose( super );
  76. end.