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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
{ Tests passing of byte arrays by value of different sizes to C methods }
program passvaluestest;
{$MODE DELPHI}
type
int8_t = shortint;
pint8_t = ^int8_t;
var
success : boolean;
{$packrecords c}
type
arr1 = array[1..1] of int8_t;
arr2 = array[1..2] of int8_t;
arr3 = array[1..3] of int8_t;
arr4 = array[1..4] of int8_t;
arr5 = array[1..5] of int8_t;
arr7 = array[1..7] of int8_t;
arr8 = array[1..8] of int8_t;
arr9 = array[1..9] of int8_t;
arr15 = array[1..15] of int8_t;
arr16 = array[1..16] of int8_t;
arr17 = array[1..17] of int8_t;
arr24 = array[1..24] of int8_t;
arr31 = array[1..31] of int8_t;
arr32 = array[1..32] of int8_t;
arr33 = array[1..33] of int8_t;
procedure fill(var mem; size : integer);
var
i : Integer;
p : pint8_t;
begin
p := @mem;
for i := 0 to size-1 do begin
p^ := random(255)+1;
inc(p);
end;
end;
procedure verify(val1, val2 : int64; nr : Integer);
begin
success := success and (val1 = val2);
Write('Testing test ', nr , ', was ', val1, ', should be ', val2, '...');
if (val1 = val2) then
WriteLn('Success.')
else
WriteLn('Failed');
end;
function check(const s : array of int8_t) : int64;
var
i : Integer;
begin
result := 0;
for i := low(s) to high(s) do
inc(result, s[i]);
end;
{$L tcext4.o}
function pass1(s : arr1) : int64; cdecl; external;
function pass2(s : arr2) : int64; cdecl; external;
function pass3(s : arr3) : int64; cdecl; external;
function pass4(s : arr4) : int64; cdecl; external;
function pass5(s : arr5) : int64; cdecl; external;
function pass7(s : arr7) : int64; cdecl; external;
function pass8(s : arr8) : int64; cdecl; external;
function pass9(s : arr9) : int64; cdecl; external;
function pass15(s : arr15) : int64; cdecl; external;
function pass16(s : arr16) : int64; cdecl; external;
function pass17(s : arr17) : int64; cdecl; external;
function pass24(s : arr24) : int64; cdecl; external;
function pass31(s : arr31) : int64; cdecl; external;
function pass32(s : arr32) : int64; cdecl; external;
function pass33(s : arr33) : int64; cdecl; external;
procedure dotest;
var
s1 : arr1;
s2 : arr2;
s3 : arr3;
s4 : arr4;
s5 : arr5;
s7 : arr7;
s8 : arr8;
s9 : arr9;
s15 : arr15;
s16 : arr16;
s17 : arr17;
s24 : arr24;
s31 : arr31;
s32 : arr32;
s33 : arr33;
begin
randseed := 20;
success := true;
fill(s1, sizeof(s1));
fill(s2, sizeof(s2));
fill(s3, sizeof(s3));
fill(s4, sizeof(s4));
fill(s5, sizeof(s5));
fill(s7, sizeof(s7));
fill(s8, sizeof(s8));
fill(s9, sizeof(s9));
fill(s15, sizeof(s15));
fill(s16, sizeof(s16));
fill(s17, sizeof(s17));
fill(s24, sizeof(s24));
fill(s31, sizeof(s31));
fill(s32, sizeof(s32));
fill(s33, sizeof(s33));
verify(pass1(s1), check(s1), 1);
verify(pass2(s2), check(s2), 2);
verify(pass3(s3), check(s3), 3);
verify(pass4(s4), check(s4), 4);
verify(pass5(s5), check(s5), 5);
verify(pass7(s7), check(s7), 7);
verify(pass8(s8), check(s8), 8);
verify(pass9(s9), check(s9), 9);
verify(pass15(s15), check(s15), 15);
verify(pass16(s16), check(s16), 16);
verify(pass17(s17), check(s17), 17);
verify(pass24(s24), check(s24), 24);
verify(pass31(s31), check(s31), 31);
verify(pass32(s32), check(s32), 32);
verify(pass33(s33), check(s33), 33);
if (not success) then
halt(1);
end;
begin
dotest;
end.
|