123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411 |
- /*
- Program to test linking between C and pascal units.
- Copyright (c) 2002, Carl Eric Codere
- */
- /*
- Note : Arrays seem to always be passed by reference
- in the C language. Therefore, no testing is required
- to use them.
- */
- unsigned char global_u8bit;
- unsigned short global_u16bit;
- unsigned int global_u32bit;
- short global_s16bit;
- int global_s32bit;
- long long global_s64bit;
- unsigned long long global_u64bit;
- float global_float;
- double global_double;
- long double global_long_double;
- #define RESULT_U8BIT 0x55
- #define RESULT_U16BIT 0x500F
- #define RESULT_U32BIT 0x500F0000
- #define RESULT_S16BIT -12
- #define RESULT_S32BIT -120
- #define RESULT_S64BIT -12000
- #define RESULT_U64BIT 0x1BCDABCD
- #define RESULT_PCHAR "Hello world"
- #define RESULT_FLOAT 14.54
- #define RESULT_DOUBLE 15.54
- #define RESULT_LONGDOUBLE 16.54
- struct _1BYTE_
- {
- unsigned char u8;
- };
- struct _3BYTE_
- {
- unsigned char u8;
- unsigned short u16;
- };
- struct _3BYTE_S
- {
- unsigned short u16;
- unsigned char w8;
- };
- struct _5BYTE_
- {
- unsigned char u8;
- unsigned int u32;
- };
- struct _7BYTE_
- {
- unsigned char u8;
- long long s64;
- unsigned short u16;
- };
- struct _7BYTE_ test_struct;
- /* simple parameter testing */
- void test_param_u8(unsigned char v)
- {
- global_u8bit = v;
- }
- void test_param_u16(unsigned short v)
- {
- global_u16bit = v;
- }
- void test_param_u32(unsigned int v)
- {
- global_u32bit = v;
- }
- void test_param_s16(short v)
- {
- global_s16bit = v;
- }
- void test_param_s32(int v)
- {
- global_s32bit = v;
- }
- void test_param_s64(long long v)
- {
- global_s64bit = v;
- }
- void test_param_u64(unsigned long long v)
- {
- global_u64bit = v;
- }
- void test_param_float(float v)
- {
- global_float = v;
- }
- void test_param_double(double v)
- {
- global_double = v;
- }
- void test_param_longdouble(long double v)
- {
- global_long_double = v;
- }
- /* simple array parameter testing */
- void test_array_param_u8(unsigned char v[2])
- {
- global_u8bit = v[1];
- }
- void test_array_param_u16(unsigned short v[2])
- {
- global_u16bit = v[1];
- }
- void test_array_param_u32(unsigned int v[2])
- {
- global_u32bit = v[1];
- }
- void test_array_param_s16(short v[2])
- {
- global_s16bit = v[1];
- }
- void test_array_param_s32(int v[2])
- {
- global_s32bit = v[1];
- }
- void test_array_param_s64(long long v[2])
- {
- global_s64bit = v[1];
- }
- void test_array_param_u64(unsigned long long v[2])
- {
- global_u64bit = v[1];
- }
- void test_array_param_float(float v[2])
- {
- global_float = v[1];
- }
- void test_array_param_double(double v[2])
- {
- global_double = v[1];
- }
- void test_array_param_longdouble(long double v[2])
- {
- global_long_double = v[1];
- }
- /* if this one works, others should also automatically */
- void test_param_var_u8(unsigned char *x)
- {
- *x = RESULT_U8BIT;
- }
- /* mixed parameter testing */
- void test_param_mixed_u16(unsigned char z, unsigned short x, unsigned char y)
- {
- global_u16bit = x;
- global_u8bit = y;
- }
- void test_param_mixed_u32(unsigned char z, unsigned int x, unsigned char y)
- {
- global_u32bit = x;
- global_u8bit = y;
- }
- void test_param_mixed_s64(unsigned char z, long long x, unsigned char y)
- {
- global_s64bit = x;
- global_u8bit = y;
- }
- void test_param_mixed_var_u8(unsigned char *x, unsigned char y)
- {
- global_u8bit = y;
- *x = RESULT_U8BIT;
- }
- /* mixed parameter testing with floating point args */
- void test_param_mixed_float(float x, unsigned char y)
- {
- global_float = x;
- global_u8bit = y;
- }
- void test_param_mixed_double(double x, unsigned char y)
- {
- global_double = x;
- global_u8bit = y;
- }
- void test_param_mixed_long_double(long double x, unsigned char y)
- {
- global_long_double = x;
- global_u8bit = y;
- }
- /* simple record testing */
- void test_param_struct_tiny(struct _1BYTE_ buffer)
- {
- global_u8bit = buffer.u8;
- }
- void test_param_struct_small(struct _3BYTE_ buffer)
- {
- global_u8bit = buffer.u8;
- global_u16bit = buffer.u16;
- }
- void test_param_struct_small_s(struct _3BYTE_S buffer)
- {
- global_u8bit = buffer.w8;
- global_u16bit = buffer.u16;
- }
- void test_param_struct_medium(struct _5BYTE_ buffer)
- {
- global_u8bit = buffer.u8;
- global_u32bit = buffer.u32;
- }
- void test_param_struct_large(struct _7BYTE_ buffer)
- {
- global_u8bit = buffer.u8;
- global_u16bit = buffer.u16;
- global_s64bit = buffer.s64;
- }
- /* record+char testing */
- void test_param_mixed_struct_tiny(struct _1BYTE_ buffer, unsigned char y)
- {
- global_u8bit = y;
- }
- void test_param_mixed_struct_small(struct _3BYTE_ buffer, unsigned char y)
- {
- global_u8bit = y;
- global_u16bit = buffer.u16;
- }
- void test_param_mixed_struct_small_s(struct _3BYTE_S buffer, unsigned char y)
- {
- global_u8bit = y;
- global_u16bit = buffer.u16;
- }
- void test_param_mixed_struct_medium(struct _5BYTE_ buffer, unsigned char y)
- {
- global_u8bit = y;
- global_u32bit = buffer.u32;
- }
- void test_param_mixed_struct_large(struct _7BYTE_ buffer, unsigned char y)
- {
- global_u8bit = y;
- global_u16bit = buffer.u16;
- global_s64bit = buffer.s64;
- }
- /* function result testing */
- unsigned char test_function_u8()
- {
- return RESULT_U8BIT;
- }
- unsigned short test_function_u16()
- {
- return RESULT_U16BIT;
- }
- unsigned int test_function_u32()
- {
- return RESULT_U32BIT;
- }
- unsigned long long test_function_u64()
- {
- return RESULT_U64BIT;
- }
- unsigned short test_function_s16()
- {
- return RESULT_S16BIT;
- }
- unsigned int test_function_s32()
- {
- return RESULT_S32BIT;
- }
- unsigned long long test_function_s64()
- {
- return RESULT_S64BIT;
- }
- char* test_function_pchar()
- {
- return RESULT_PCHAR;
- }
- float test_function_float()
- {
- return RESULT_FLOAT;
- }
- double test_function_double()
- {
- return RESULT_DOUBLE;
- }
- long double test_function_longdouble()
- {
- return RESULT_LONGDOUBLE;
- }
- struct _1BYTE_ test_function_tiny_struct()
- {
- struct _1BYTE_ test_struct;
- test_struct.u8 = RESULT_U8BIT;
- return test_struct;
- }
- struct _3BYTE_ test_function_small_struct()
- {
- struct _3BYTE_ test_struct;
- test_struct.u8 = RESULT_U8BIT;
- test_struct.u16 = RESULT_U16BIT;
- return test_struct;
- }
- struct _3BYTE_S test_function_small_struct_s()
- {
- struct _3BYTE_S test_struct;
- test_struct.u16 = RESULT_U16BIT;
- test_struct.w8 = RESULT_U8BIT;
- return test_struct;
- }
- struct _5BYTE_ test_function_medium_struct()
- {
- struct _5BYTE_ test_struct;
- test_struct.u8 = RESULT_U8BIT;
- test_struct.u32 = RESULT_U32BIT;
- return test_struct;
- }
- struct _7BYTE_ test_function_struct()
- {
- test_struct.u8 = RESULT_U8BIT;
- test_struct.s64 = RESULT_S64BIT;
- test_struct.u16 = RESULT_U16BIT;
- return test_struct;
- }
- /*
- Revision 1.7 2005/02/06 20:00:41 peter
- * use int for 32bit types
- Revision 1.6 2002/11/18 00:42:16 pierre
- + records with really 3 byte size tests added
- Revision 1.5 2002/11/04 15:17:45 pierre
- * compatibility with C checks improved
- Revision 1.4 2002/09/07 15:40:56 peter
- * old logs removed and tabs fixed
- Revision 1.3 2002/05/04 16:57:23 carl
- + var parameter testing
- + function result testing
- + floating point testing
- Revision 1.2 2002/04/22 19:09:12 carl
- + added structure testing
- Revision 1.1 2002/04/13 21:06:39 carl
- + c module testing
- */
|