# HG changeset patch # User Tassilo Philipp # Date 1574883831 -3600 # Node ID 1cf6a4a94aca5c1973d8c742e450049d6d2ccdba # Parent 4e9d3cb9870ff3401f590cba627205ebec71bd4b - better output for plain test's struct size testing (maybe in prep for full struct support) diff -r 4e9d3cb9870f -r 1cf6a4a94aca test/plain/test_structs.c --- a/test/plain/test_structs.c Wed Nov 27 19:55:18 2019 +0100 +++ b/test/plain/test_structs.c Wed Nov 27 20:43:51 2019 +0100 @@ -31,15 +31,11 @@ #include "../../dyncall/dyncall_struct.h" #include "../common/platformInit.h" -#define DC_TEST_INT_EQUAL(expected, computed) { \ - if (expected != computed) \ - printf("expected = %d, computed = %d\n\n", (int)expected, (int)computed); \ +#define DC_TEST_STRUCT_SIZE(sig, type, s) { \ + DCsize expected = sizeof(type), computed = dcStructSize(s);\ + printf("struct_%s size: expected = %d, computed = %d: %d\n", sig, (int)expected, (int)computed, (expected == computed)); \ ret = (expected == computed) && ret; \ } -#define DC_TEST_STRUCT_SIZE(type, s) { \ - DCsize expected = sizeof(type), computed = dcStructSize(s);\ - DC_TEST_INT_EQUAL(expected, computed); \ -} int testStructSizes() { @@ -47,6 +43,50 @@ { typedef struct { + char a, b; + } S; + + size_t size; + DCstruct* s = dcNewStruct(2, DEFAULT_ALIGNMENT); + dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); + dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); + dcCloseStruct(s); + + DC_TEST_STRUCT_SIZE("cc", S, s); + dcFreeStruct(s); + } + { + typedef struct { + char a, b, c; + } S; + + size_t size; + DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT); + dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); + dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); + dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); + dcCloseStruct(s); + + DC_TEST_STRUCT_SIZE("ccc", S, s); + dcFreeStruct(s); + } + { + typedef struct { + char a; + short b; + } S; + + size_t size; + DCstruct* s = dcNewStruct(2, DEFAULT_ALIGNMENT); + dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); + dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1); + dcCloseStruct(s); + + DC_TEST_STRUCT_SIZE("cs", S, s); + dcFreeStruct(s); + } + { + typedef struct { double a, b, c, d; } S; @@ -58,7 +98,7 @@ dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); dcCloseStruct(s); - DC_TEST_STRUCT_SIZE(S, s); + DC_TEST_STRUCT_SIZE("dddd", S, s); dcFreeStruct(s); } { @@ -74,7 +114,7 @@ dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3); dcCloseStruct(s); - DC_TEST_STRUCT_SIZE(S, s); + DC_TEST_STRUCT_SIZE("cc[ppp]", S, s); dcFreeStruct(s); } { @@ -98,37 +138,37 @@ dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1); dcCloseStruct(s); - DC_TEST_STRUCT_SIZE(S, s); + DC_TEST_STRUCT_SIZE("s{cc[ppp]}s", S, s); dcFreeStruct(s); } -#define TEST_MONO_STRUCT(type, sig) \ +#define TEST_MONO_STRUCT(sig, type, sigchar) \ { \ typedef struct { \ type v; \ } S; \ \ DCstruct* s = dcNewStruct(1, DEFAULT_ALIGNMENT); \ - dcStructField(s, sig, DEFAULT_ALIGNMENT, 1); \ + dcStructField(s, sigchar, DEFAULT_ALIGNMENT, 1); \ dcCloseStruct(s); \ \ - DC_TEST_STRUCT_SIZE(S, s); \ + DC_TEST_STRUCT_SIZE(sig, S, s); \ dcFreeStruct(s); \ } - TEST_MONO_STRUCT(char, DC_SIGCHAR_CHAR); - TEST_MONO_STRUCT(unsigned char, DC_SIGCHAR_UCHAR); - TEST_MONO_STRUCT(short, DC_SIGCHAR_SHORT); - TEST_MONO_STRUCT(unsigned short, DC_SIGCHAR_USHORT); - TEST_MONO_STRUCT(int, DC_SIGCHAR_INT); - TEST_MONO_STRUCT(unsigned int, DC_SIGCHAR_UINT); - TEST_MONO_STRUCT(long, DC_SIGCHAR_LONG); - TEST_MONO_STRUCT(unsigned long, DC_SIGCHAR_ULONG); - TEST_MONO_STRUCT(long long, DC_SIGCHAR_LONGLONG); - TEST_MONO_STRUCT(unsigned long long, DC_SIGCHAR_ULONGLONG); - TEST_MONO_STRUCT(void*, DC_SIGCHAR_POINTER); - TEST_MONO_STRUCT(float, DC_SIGCHAR_FLOAT); - TEST_MONO_STRUCT(double, DC_SIGCHAR_DOUBLE); + TEST_MONO_STRUCT("c", char, DC_SIGCHAR_CHAR); // 4 on plan 9 | + TEST_MONO_STRUCT("C", unsigned char, DC_SIGCHAR_UCHAR); // 4 on plan 9 | + TEST_MONO_STRUCT("s", short, DC_SIGCHAR_SHORT); // 4 on plan 9 | minimal size of a struct, period? + TEST_MONO_STRUCT("S", unsigned short, DC_SIGCHAR_USHORT); // 4 on plan 9 | + TEST_MONO_STRUCT("i", int, DC_SIGCHAR_INT); + TEST_MONO_STRUCT("I", unsigned int, DC_SIGCHAR_UINT); + TEST_MONO_STRUCT("j", long, DC_SIGCHAR_LONG); + TEST_MONO_STRUCT("J", unsigned long, DC_SIGCHAR_ULONG); + TEST_MONO_STRUCT("l", long long, DC_SIGCHAR_LONGLONG); + TEST_MONO_STRUCT("L", unsigned long long, DC_SIGCHAR_ULONGLONG); + TEST_MONO_STRUCT("p", void*, DC_SIGCHAR_POINTER); + TEST_MONO_STRUCT("f", float, DC_SIGCHAR_FLOAT); + TEST_MONO_STRUCT("d", double, DC_SIGCHAR_DOUBLE); return ret; } @@ -159,7 +199,7 @@ } -int testCallStructs() +/*int testCallStructs() { int ret = 1; @@ -173,7 +213,7 @@ dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); dcCloseStruct(s); - DC_TEST_STRUCT_SIZE(FewValues, s); + DC_TEST_STRUCT_SIZE("ccc", FewValues, s); values.a = 1; values.b = 2; @@ -199,7 +239,7 @@ dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 10); dcCloseStruct(s); - DC_TEST_STRUCT_SIZE(SomeValues, s); + DC_TEST_STRUCT_SIZE("ccd", SomeValues, s); values.a = 1; values.b = 2; @@ -220,5 +260,5 @@ dcFree(pc); return ret; -} +}*/