annotate test/plain/test_structs.c @ 334:1cf6a4a94aca

- better output for plain test's struct size testing (maybe in prep for full struct support)
author Tassilo Philipp
date Wed, 27 Nov 2019 20:43:51 +0100
parents dd78bd0152af
children 5fe52b7c6e02
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
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
40 int testStructSizes()
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
41 {
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
42 int ret = 1;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 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
46 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
47 } S;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
48
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
49 size_t size;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
50 DCstruct* s = dcNewStruct(2, DEFAULT_ALIGNMENT);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
51 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
52 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
53 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
54
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
55 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
56 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
57 }
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
58 {
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
59 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
60 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
61 } S;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
62
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
63 size_t size;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
64 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
65 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
66 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
67 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
68 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
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 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
71 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
72 }
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
73 {
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
74 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
75 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
76 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
77 } 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
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
79 size_t size;
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
80 DCstruct* s = dcNewStruct(2, DEFAULT_ALIGNMENT);
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
81 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
82 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
83 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
84
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
85 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
86 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
87 }
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
88 {
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
89 typedef struct {
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 double a, b, c, d;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 } S;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 size_t size;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 DCstruct* s = dcNewStruct(4, DEFAULT_ALIGNMENT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
101 DC_TEST_STRUCT_SIZE("dddd", S, s);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 dcFreeStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 typedef struct {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 char a, b;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 void* p[3];
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 } S;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 size_t size;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
117 DC_TEST_STRUCT_SIZE("cc[ppp]", S, s);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 dcFreeStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 typedef struct {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 short a;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 struct {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 char a, b;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 void* p[3];
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 } sub;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 short b;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 } S;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 size_t size;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 dcSubStruct(s, 3, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
141 DC_TEST_STRUCT_SIZE("s{cc[ppp]}s", S, s);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 dcFreeStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
145 #define TEST_MONO_STRUCT(sig, type, sigchar) \
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 { \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147 typedef struct { \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 type v; \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 } 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 DCstruct* s = dcNewStruct(1, DEFAULT_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
152 dcStructField(s, sigchar, DEFAULT_ALIGNMENT, 1); \
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 dcCloseStruct(s); \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 \
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
155 DC_TEST_STRUCT_SIZE(sig, S, s); \
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 dcFreeStruct(s); \
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158
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 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
160 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
161 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
162 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
163 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
164 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
165 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
166 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
167 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
168 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
169 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
170 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
171 TEST_MONO_STRUCT("d", double, DC_SIGCHAR_DOUBLE);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
173 return ret;
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
174 }
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
175
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
176
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178 typedef struct
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180 char a, b, c;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
181 } FewValues;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
182
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183 double sum_FewValues(FewValues values)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
184 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
185 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
186 return ((double)values.a) + ((double)values.b) + ((double)values.c);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
188
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
189
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
190 typedef struct
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
191 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
192 char a, b;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
193 double p[10];
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
194 } SomeValues;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
195
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
196 double sum_SomeValues(SomeValues values)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
197 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
198 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
199 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
200
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
201
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
202 /*int testCallStructs()
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
203 {
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
204 int ret = 1;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
205
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
206 DCCallVM* pc = dcNewCallVM(4096);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
207 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
208 FewValues values;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
209 double calledSum, expectedSum;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
210 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
211 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
212 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
213 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
214 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
215
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
216 DC_TEST_STRUCT_SIZE("ccc", FewValues, s);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
217
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
218 values.a = 1;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
219 values.b = 2;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
220 values.c = 3;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
221
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
222 dcMode(pc, DC_CALL_C_DEFAULT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
223 dcReset(pc);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
224 printf("BEFORE dcArgStruct\n");
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
225 dcArgStruct(pc, s, &values);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
226 printf("AFTER dcArgStruct\n");
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
227 calledSum = dcCallDouble(pc, (DCpointer)&sum_FewValues);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
228 expectedSum = sum_FewValues(values);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
229
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
230 DC_TEST_INT_EQUAL(expectedSum, calledSum);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
231 dcFreeStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
232 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
233 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
234 SomeValues values;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
235 double calledSum, expectedSum;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
236 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
237 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
238 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
239 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 10);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
240 dcCloseStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
241
334
1cf6a4a94aca - better output for plain test's struct size testing (maybe in prep for full struct support)
Tassilo Philipp
parents: 324
diff changeset
242 DC_TEST_STRUCT_SIZE("ccd", SomeValues, s);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
243
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
244 values.a = 1;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
245 values.b = 2;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
246 values.p[0] = 10;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
247 values.p[1] = 11;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
248 values.p[2] = 12;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
249
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
250 dcMode(pc, DC_CALL_C_DEFAULT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
251 dcReset(pc);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
252 dcArgStruct(pc, s, &values);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
253 calledSum = dcCallDouble(pc, (DCpointer) &sum_SomeValues);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
254 expectedSum = sum_SomeValues(values);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
255
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
256 DC_TEST_INT_EQUAL(expectedSum, calledSum);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
257 dcFreeStruct(s);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
258 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
259
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
260 dcFree(pc);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
261
324
dd78bd0152af - removal of never-adopted mini-test framework stub
Tassilo Philipp
parents: 141
diff changeset
262 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
263 }*/
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
264