annotate test/plain/test_structs.c @ 335:5fe52b7c6e02

- test/plain additions mainly for preparing future struct support, experimental at best currently
author Tassilo Philipp
date Wed, 27 Nov 2019 21:27:58 +0100
parents 1cf6a4a94aca
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 Package: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 Library: test
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 File: test/plain/test_structs.c
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
6 Description:
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 License:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 Copyright (c) 2010-2015 Olivier Chafik <olivier.chafik@gmail.com>
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
10 2019 Tassilo Philipp <tphilipp@potion-studios.com>
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 #include "../../dyncall/dyncall.h"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 #include "../../dyncall/dyncall_signature.h"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 #include "../../dyncall/dyncall_struct.h"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 #include "../common/platformInit.h"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
34 #define DC_TEST_STRUCT_SIZE(sig, type, s) { \
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
35 DCsize expected = sizeof(type), computed = dcStructSize(s);\
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
36 printf("struct_%s size: expected = %d, computed = %d: %d\n", sig, (int)expected, (int)computed, (expected == computed)); \
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
37 ret = (expected == computed) && ret; \
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
40 /* @@@ incomplete and should be makde generally available in dyncall once struct support will make it in */
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
41 #if defined(DC__OS_Plan9)
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
42 # define DEFAULT_STRUCT_ALIGNMENT 4
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
43 #else
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
44 # define DEFAULT_STRUCT_ALIGNMENT DEFAULT_ALIGNMENT
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
45 #endif
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
46
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
47 int testStructSizes()
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
48 {
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
49 int ret = 1;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 typedef struct {
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
53 char a, b;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
54 } S;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
55
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
56 size_t size;
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
57 DCstruct* s = dcNewStruct(2, DEFAULT_STRUCT_ALIGNMENT);
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
58 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
59 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
60 dcCloseStruct(s);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
61
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
62 DC_TEST_STRUCT_SIZE("cc", S, s);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
63 dcFreeStruct(s);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
64 }
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
65 {
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
66 typedef struct {
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
67 char a, b, c;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
68 } S;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
69
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
70 size_t size;
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
71 DCstruct* s = dcNewStruct(3, DEFAULT_STRUCT_ALIGNMENT);
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
72 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
73 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
74 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
75 dcCloseStruct(s);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
76
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
77 DC_TEST_STRUCT_SIZE("ccc", S, s);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
78 dcFreeStruct(s);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
79 }
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
80 {
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
81 typedef struct {
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
82 char a;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
83 short b;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
84 } S;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
85
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
86 size_t size;
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
87 DCstruct* s = dcNewStruct(2, DEFAULT_STRUCT_ALIGNMENT);
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
88 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
89 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
90 dcCloseStruct(s);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
91
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
92 DC_TEST_STRUCT_SIZE("cs", S, s);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
93 dcFreeStruct(s);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
94 }
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
95 {
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
96 typedef struct {
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 double a, b, c, d;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 } S;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 size_t size;
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
101 DCstruct* s = dcNewStruct(4, DEFAULT_STRUCT_ALIGNMENT);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
108 DC_TEST_STRUCT_SIZE("dddd", S, s);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 dcFreeStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 typedef struct {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 char a, b;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 void* p[3];
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 } S;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 size_t size;
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
118 DCstruct* s = dcNewStruct(3, DEFAULT_STRUCT_ALIGNMENT);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
124 DC_TEST_STRUCT_SIZE("cc[ppp]", S, s);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 dcFreeStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 typedef struct {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 short a;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 struct {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 char a, b;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 void* p[3];
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 } sub;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 short b;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 } S;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 size_t size;
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
138 DCstruct* s = dcNewStruct(3, DEFAULT_STRUCT_ALIGNMENT);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1);
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
140 dcSubStruct(s, 3, DEFAULT_STRUCT_ALIGNMENT, 1);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
148 DC_TEST_STRUCT_SIZE("s{cc[ppp]}s", S, s);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 dcFreeStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
152 #define TEST_MONO_STRUCT(sig, type, sigchar) \
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 { \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 typedef struct { \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155 type v; \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 } S; \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 \
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
158 DCstruct* s = dcNewStruct(1, DEFAULT_STRUCT_ALIGNMENT); \
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
159 dcStructField(s, sigchar, DEFAULT_ALIGNMENT, 1); \
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 dcCloseStruct(s); \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 \
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
162 DC_TEST_STRUCT_SIZE(sig, S, s); \
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163 dcFreeStruct(s); \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
166 TEST_MONO_STRUCT("c", char, DC_SIGCHAR_CHAR); // 4 on plan 9 |
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
167 TEST_MONO_STRUCT("C", unsigned char, DC_SIGCHAR_UCHAR); // 4 on plan 9 |
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
168 TEST_MONO_STRUCT("s", short, DC_SIGCHAR_SHORT); // 4 on plan 9 | minimal size of a struct, period?
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
169 TEST_MONO_STRUCT("S", unsigned short, DC_SIGCHAR_USHORT); // 4 on plan 9 |
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
170 TEST_MONO_STRUCT("i", int, DC_SIGCHAR_INT);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
171 TEST_MONO_STRUCT("I", unsigned int, DC_SIGCHAR_UINT);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
172 TEST_MONO_STRUCT("j", long, DC_SIGCHAR_LONG);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
173 TEST_MONO_STRUCT("J", unsigned long, DC_SIGCHAR_ULONG);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
174 TEST_MONO_STRUCT("l", long long, DC_SIGCHAR_LONGLONG);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
175 TEST_MONO_STRUCT("L", unsigned long long, DC_SIGCHAR_ULONGLONG);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
176 TEST_MONO_STRUCT("p", void*, DC_SIGCHAR_POINTER);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
177 TEST_MONO_STRUCT("f", float, DC_SIGCHAR_FLOAT);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
178 TEST_MONO_STRUCT("d", double, DC_SIGCHAR_DOUBLE);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
180 return ret;
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
181 }
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
182
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
184
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
185 typedef struct
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
186 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 char a, b, c;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
188 } FewValues;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
189
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
190 double sum_FewValues(FewValues values)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
191 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
192 printf("sum_FewValues(a = %d, b = %d, c = %d)\n", (int)values.a, (int)values.b, (int)values.c);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
193 return ((double)values.a) + ((double)values.b) + ((double)values.c);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
194 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
195
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
196
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
197 typedef struct
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
198 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
199 char a, b;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
200 double p[10];
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
201 } SomeValues;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
202
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
203 double sum_SomeValues(SomeValues values)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
204 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
205 return ((double)values.a) + ((double)values.b) + values.p[0] + values.p[1] + values.p[2];
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
206 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
207
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
208
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
209 /*int testCallStructs()
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
210 {
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
211 int ret = 1;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
212
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
213 DCCallVM* pc = dcNewCallVM(4096);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
214 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
215 FewValues values;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
216 double calledSum, expectedSum;
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
217 DCstruct* s = dcNewStruct(3, DEFAULT_STRUCT_ALIGNMENT);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
218 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
219 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
220 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
221 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
222
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
223 DC_TEST_STRUCT_SIZE("ccc", FewValues, s);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
224
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
225 values.a = 1;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
226 values.b = 2;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
227 values.c = 3;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
228
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
229 dcMode(pc, DC_CALL_C_DEFAULT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
230 dcReset(pc);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
231 printf("BEFORE dcArgStruct\n");
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
232 dcArgStruct(pc, s, &values);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
233 printf("AFTER dcArgStruct\n");
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
234 calledSum = dcCallDouble(pc, (DCpointer)&sum_FewValues);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
235 expectedSum = sum_FewValues(values);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
236
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
237 DC_TEST_INT_EQUAL(expectedSum, calledSum);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
238 dcFreeStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
239 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
240 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
241 SomeValues values;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
242 double calledSum, expectedSum;
335
5fe52b7c6e02 - test/plain additions mainly for preparing future struct support, experimental at best currently
Tassilo Philipp
parents: 334
diff changeset
243 DCstruct* s = dcNewStruct(3, DEFAULT_STRUCT_ALIGNMENT);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
244 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
245 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
246 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 10);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
247 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
248
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
249 DC_TEST_STRUCT_SIZE("ccd", SomeValues, s);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
250
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
251 values.a = 1;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
252 values.b = 2;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
253 values.p[0] = 10;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
254 values.p[1] = 11;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
255 values.p[2] = 12;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
256
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
257 dcMode(pc, DC_CALL_C_DEFAULT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
258 dcReset(pc);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
259 dcArgStruct(pc, s, &values);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
260 calledSum = dcCallDouble(pc, (DCpointer) &sum_SomeValues);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
261 expectedSum = sum_SomeValues(values);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
262
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
263 DC_TEST_INT_EQUAL(expectedSum, calledSum);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
264 dcFreeStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
265 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
266
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
267 dcFree(pc);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
268
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
269 return ret;
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
270 }*/
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
271