summaryrefslogtreecommitdiff
path: root/tests/test/toperator91.pp
blob: d7d0496abba5166189f547cb27eb68c3b67d67a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
program toperator91;

{$mode delphi}

type
  TString80 = String[80];
  TString90 = String[90];
  TString40 = String[40];
  TString100 = String[100];

  TTest = record
    class operator Explicit(const aArg: TTest): TString80;
    class operator Explicit(const aArg: TTest): TString90;
    class operator Explicit(const aArg: TTest): ShortString;
    class operator Implicit(const aArg: TTest): TString80;
    class operator Implicit(const aArg: TTest): TString90;
    class operator Implicit(const aArg: TTest): ShortString;
  end;

var
  ExplicitString80: LongInt;
  ExplicitString90: LongInt;
  ExplicitShortString: LongInt;
  ImplicitString80: LongInt;
  ImplicitString90: LongInt;
  ImplicitShortString: LongInt;

class operator TTest.Explicit(const aArg: TTest): TString80;
begin
  Writeln('TString80 Explicit');
  Inc(ExplicitString80);
  Result := '';
end;

class operator TTest.Explicit(const aArg: TTest): TString90;
begin
  Writeln('TString90 Explicit');
  Inc(ExplicitString90);
  Result := '';
end;

class operator TTest.Explicit(const aArg: TTest): ShortString;
begin
  Writeln('ShortString Explicit');
  Inc(ExplicitShortString);
  Result := '';
end;

class operator TTest.Implicit(const aArg: TTest): TString80;
begin
  Writeln('TString80 Implicit');
  Inc(ImplicitString80);
  Result := '';
end;

class operator TTest.Implicit(const aArg: TTest): TString90;
begin
  Writeln('TString90 Implicit');
  Inc(ImplicitString90);
  Result := '';
end;

class operator TTest.Implicit(const aArg: TTest): ShortString;
begin
  Writeln('ShortString Implicit');
  Inc(ImplicitShortString);
  Result := '';
end;

var
  s80: TString80;
  s90: TString90;
  s40: TString40;
  s100: TString100;
  t: TTest;
begin
  // Explicit
  s80 := TString80(t);
  if ExplicitString80 <> 1 then
    Halt(1);
  s90 := TString90(t);
  if ExplicitString90 <> 1 then
    Halt(2);
  s40 := TString40(t);
  if ImplicitShortString <> 1 then
    Halt(3);
  s100 := TString100(t);
  if ImplicitShortString <> 2 then
    Halt(4);
  // Implicit
  s80 := t;
  if ImplicitShortString <> 3 then
    Halt(5);
  s90 := t;
  if ImplicitShortString <> 4 then
    Halt(6);
  s40 := t;
  if ImplicitShortString <> 5 then
    Halt(7);
  s100 := t;
  if ImplicitShortString <> 6 then
    Halt(8);
  Writeln('ok');
end.