Mercurial > pub > dyncall > dyncall
diff test/callf/main.c @ 0:3e629dc19168
initial from svn dyncall-1745
author | Daniel Adler |
---|---|
date | Thu, 19 Mar 2015 22:24:28 +0100 |
parents | |
children | f5577f6bf97a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/callf/main.c Thu Mar 19 22:24:28 2015 +0100 @@ -0,0 +1,108 @@ +/* + + Package: dyncall + Library: test + File: test/callf/main.c + Description: + License: + + Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, + Tassilo Philipp <tphilipp@potion-studios.com> + + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +*/ + + + +/* test dcCallF API */ + +#include "../../dyncall/dyncall_callf.h" +#include "../common/platformInit.h" +#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */ + + +/* sample void function */ + +int vf_iii(int x,int y,int z) +{ + int r = (x == 1 && y == 2 && z == 3); + printf("%d %d %d: %d", x, y, z, r); + return r; +} + +int vf_ffiffiffi(float a, float b, int c, float d, float e, int f, float g, float h, int i) +{ + int r = (a == 1.f && b == 2.f && c == 3 && d == 4.f && e == 5.f && f == 6 && g == 7.f && h == 8.f && i == 9); + printf("%f %f %d %f %f %d %f %f %d: %d", a, b, c, d, e, f, g, h, i, r); + return r; +} + +/* main */ + +int main(int argc, char* argv[]) +{ + DCCallVM* vm; + DCValue ret; + int r = 1; + + dcTest_initPlatform(); + + /* allocate call vm */ + vm = dcNewCallVM(4096); + + + /* calls using 'formatted' API */ + dcReset(vm); + printf("callf iii)i: "); + dcCallF(vm, &ret, (void*)&vf_iii, "iii)i", 1, 2, 3); + r = ret.i && r; + + dcReset(vm); + printf("\ncallf ffiffiffi)i: "); + dcCallF(vm, &ret, (void*)&vf_ffiffiffi, "ffiffiffi)i", 1.f, 2.f, 3, 4.f, 5.f, 6, 7.f, 8.f, 9); + r = ret.i && r; + + + /* arg binding then call using 'formatted' API */ + dcReset(vm); + printf("\nargf iii)i then call: "); + dcArgF(vm, "iii)i", 1, 2, 3); + r = r && dcCallInt(vm, (void*)&vf_iii); + + dcReset(vm); + printf("\nargf iii then call: "); + dcArgF(vm, "iii", 1, 2, 3); + r = r && dcCallInt(vm, (void*)&vf_iii); + + dcReset(vm); + printf("\nargf ffiffiffi)i then call: "); + dcArgF(vm, "ffiffiffi)i", 1.f, 2.f, 3, 4.f, 5.f, 6, 7.f, 8.f, 9); + r = r && dcCallInt(vm, (void*)&vf_ffiffiffi); + + dcReset(vm); + printf("\nargf ffiffiffi then call: "); + dcArgF(vm, "ffiffiffi", 1.f, 2.f, 3, 4.f, 5.f, 6, 7.f, 8.f, 9); + r = r && dcCallInt(vm, (void*)&vf_ffiffiffi); + + + /* free vm */ + dcFree(vm); + + printf("\nresult: callf: %d\n", r); + + dcTest_deInitPlatform(); + + return 0; +} +