summaryrefslogtreecommitdiff
path: root/tests/test/twide4.pp
blob: 03c7a3f716f4bd48d0b047aba6a2a155656c6f1d (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
105
106
107
108
109
110
111
112
113
114
115
{%skiptarget=$nothread }
{$ifdef fpc}
{$mode objfpc}
{$endif fpc}

{$ifdef go32v2}
  {$define USE_INTERNAL_UNICODE}
{$endif}

{$ifdef USE_INTERNAL_UNICODE}
  {$define USE_FPWIDESTRING_UNIT}
  {$define USE_UNICODEDUCET_UNIT}
  {$define USE_CPALL_UNIT}
{$endif}
uses
 {$ifdef unix}
  cthreads,
 {$endif}
 {$ifndef USE_INTERNAL_UNICODE}
  {$ifdef unix}
   {$ifdef darwin}iosxwstr{$else}cwstring{$endif},
  {$endif unix}
 {$endif ndef USE_INTERNAL_UNICODE}
 {$ifdef USE_UNICODEDUCET_UNIT}
  unicodeducet,
 {$endif}
 {$ifdef USE_FPWIDESTRING_UNIT}
  fpwidestring,
 {$endif}
 {$ifdef USE_CPALL_UNIT}
  cpall,
 {$endif}
  Classes, SysUtils;

type
  tc = class(tthread)
    orgstr: ansistring;
    cnvstr: widestring;
    constructor create(const s: ansistring; const w: widestring);
    procedure execute; override;
  end;

const
  // string with an invalid utf-8 code sequence
  str1 = #$c1#$34'Życie'#$c1#$34' jest jak papier '#$c1#$34'toaletowy'#$c1#$34' : długie, szare i '#$c1#$34'do'#$c1#$34' dupy';
  str2 = 'Życie '#$c1#$34'jest'#$c1#$34' jak papier toaletowy : '#$c1#$34'długie'#$c1#$34', szare i do '#$c1#$34'dupy'#$c1#$34'222222222222222222222222222222222222222222222222';
  str3 = 'Życie jest '#$c1#$34'jak'#$c1#$34' papier 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 toaletowy : długie, '#$c1#$34'szare'#$c1#$34' i do dupy';
  str4 = 'Życie jest 4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 jak '#$c1#$34'papier'#$c1#$34' toaletowy : długie, szare '#$c1#$34'i'#$c1#$34' do dupy';
  count = 20000;

var
  wstr: widestring;
//  cnvstr: ansistring;
  error: boolean;


constructor tc.create(const s: ansistring; const w: widestring);
begin
  orgstr:=s;
  cnvstr:=w;
  inherited create(true);
end;


procedure tc.execute;
var
  i: longint;
  w: widestring;
begin
  for i := 1 to count do
    begin
      w:=orgstr;
      if (w<>cnvstr) then
        error:=true;
    end;
end;

var
  a: array[1..4] of tc;
  w1,w2,w3,w4: widestring;
  cnvstr: ansistring;
begin
  error:=false;
  cnvstr:=str1;
  w1:=cnvstr;
  cnvstr:=str2;
  w2:=cnvstr;
  cnvstr:=str3;
  w3:=cnvstr;
  cnvstr:=str4;
  w4:=cnvstr;
  writeln(w1);
  writeln(w2);
  writeln(w3);
  writeln(w4);
  a[1]:=tc.create(str1,w1);
  a[2]:=tc.create(str2,w2);
  a[3]:=tc.create(str3,w3);
  a[4]:=tc.create(str4,w4);
  a[1].resume;
  a[2].resume;
  a[3].resume;
  a[4].resume;
  a[1].waitfor;
  a[2].waitfor;
  a[3].waitfor;
  a[4].waitfor;
  a[1].free;
  a[2].free;
  a[3].free;
  a[4].free;
  
  if error then
    halt(1);  
end.