changeset 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 4e9d3cb9870f
children 5fe52b7c6e02
files test/plain/test_structs.c
diffstat 1 files changed, 70 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- 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;
-}
+}*/