annotate test/callback_plain/callback_plain.c @ 410:7608e34098b0

- cleanups, simplifications, some api clarification, ... - test cases consistency: * return status code depending on test results (for actual conformance tests, not stuff that is not an example or hack to check something, ..) * platform init helper added for some
author Tassilo Philipp
date Tue, 05 Oct 2021 21:53:04 +0200
parents 9269d17a8f99
children 71c884e610f0
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/callback_plain/callback_plain.c
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 Description:
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
410
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 293
diff changeset
9 Copyright (c) 2011-2021 Daniel Adler <dadler@uni-goettingen.de>,
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 Tassilo Philipp <tphilipp@potion-studios.com>
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 #include "../../dyncallback/dyncall_callback.h"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 #include "../common/platformInit.h"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 #include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 char cbHandler(DCCallback* cb, DCArgs* args, DCValue* result, void* userdata)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 int* ud = (int*)userdata;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 int arg1 = dcbArgInt (args);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 float arg2 = dcbArgFloat (args);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 short arg3 = dcbArgShort (args);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 double arg4 = dcbArgDouble (args);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 long long arg5 = dcbArgLongLong(args);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 printf("reached callback\n");
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 printf("userdata (should be 1337): %d\n", *ud);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 printf("1st argument (should be 123): %d\n", arg1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 printf("2nd argument (should be 23.f): %f\n", arg2);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 printf("3rd argument (should be 3): %d\n", arg3);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 printf("4th argument (should be 1.82): %f\n", arg4);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 printf("5th argument (should be 9909): %lld\n", arg5);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 if(*ud == 1337) *ud = 1;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 if(arg1 == 123) ++*ud;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 if(arg2 == 23.f) ++*ud;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 if(arg3 == 3) ++*ud;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 if(arg4 == 1.82) ++*ud;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 if(arg5 == 9909) ++*ud;
7
7ca57dbefed4 - ppc64 update from Masanori
cslag
parents: 0
diff changeset
54
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 result->s = 1234;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 return 's';
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 int main()
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 DCCallback* cb;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 short result = 0;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 int userdata = 1337;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 dcTest_initPlatform();
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 cb = dcbNewCallback("ifsdl)s", &cbHandler, &userdata);
139
5675d34f0a06 - mips64 doc about impl status
cslag
parents: 7
diff changeset
69 printf("about to callback (trampoline for 0x%tx at 0x%tx)...\n", &cbHandler, cb);
5675d34f0a06 - mips64 doc about impl status
cslag
parents: 7
diff changeset
70
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 result = ((short(*)(int, float, short, double, long long))cb)(123, 23.f, 3, 1.82, 9909ull);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 dcbFreeCallback(cb);
139
5675d34f0a06 - mips64 doc about impl status
cslag
parents: 7
diff changeset
73
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 printf("successfully returned from callback\n");
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 printf("return value (should be 1234): %d\n", result);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76
410
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 293
diff changeset
77 result = (userdata == 6) && (result == 1234);
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 293
diff changeset
78 printf("result: callback_plain: %d\n", result);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 dcTest_deInitPlatform();
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81
410
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 293
diff changeset
82 return !result;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84