Add Callback Tests
							parent
							
								
									14b8cfeba9
								
							
						
					
					
						commit
						11cd58a5d7
					
				| 
						 | 
				
			
			@ -2,7 +2,7 @@ USING: accessors alien alien.c-types alien.complex alien.data alien.libraries
 | 
			
		|||
alien.syntax arrays byte-arrays classes classes.struct combinators
 | 
			
		||||
combinators.extras compiler compiler.test concurrency.promises continuations
 | 
			
		||||
destructors effects generalizations io io.backend io.pathnames
 | 
			
		||||
io.streams.string kernel kernel.private libc layouts math math.bitwise
 | 
			
		||||
io.streams.string kernel kernel.private libc layouts locals math math.bitwise
 | 
			
		||||
math.private memory namespaces namespaces.private random parser quotations
 | 
			
		||||
sequences slots.private specialized-arrays stack-checker stack-checker.errors
 | 
			
		||||
system threads tools.test words ;
 | 
			
		||||
| 
						 | 
				
			
			@ -963,3 +963,71 @@ FUNCTION: void* bug1021_test_3 ( c-string a )
 | 
			
		|||
{ } [
 | 
			
		||||
    10000 [ 0 doit 33 assert= ] times
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
! Tests for System V AMD64 ABI 
 | 
			
		||||
STRUCT: test_struct_66 { mem1 ulong } { mem2 ulong } ;
 | 
			
		||||
STRUCT: test_struct_68 { mem1 ulong } { mem2 ulong } { mem3 ulong } ;
 | 
			
		||||
FUNCTION: ulong ffi_test_66 ( ulong a, ulong b, ulong c, test_struct_66 d, test_struct_66 e )
 | 
			
		||||
FUNCTION: ulong ffi_test_67 ( ulong a, ulong b, ulong c, test_struct_66 d, test_struct_66 e ulong _f )
 | 
			
		||||
FUNCTION: ulong ffi_test_68 ( ulong a, ulong b, ulong c, test_struct_66 d, test_struct_68 e test_struct_66 _f )
 | 
			
		||||
 | 
			
		||||
{ 28 } [ 1 2 3 S{ test_struct_66 f 4 5 } S{ test_struct_66 f 6 7 } ffi_test_66 ] unit-test
 | 
			
		||||
 | 
			
		||||
: callback-14 ( -- callback )
 | 
			
		||||
    ulong { ulong ulong ulong test_struct_66 test_struct_66 } cdecl
 | 
			
		||||
    [| a b c d e |
 | 
			
		||||
        a b + c +
 | 
			
		||||
        d [ mem1>> + ] [ mem2>> + ] bi
 | 
			
		||||
        e [ mem1>> + ] [ mem2>> + ] bi
 | 
			
		||||
    ] alien-callback ;
 | 
			
		||||
 | 
			
		||||
: callback-14-test ( a b c d e callback -- result )
 | 
			
		||||
    ulong { ulong ulong ulong test_struct_66 test_struct_66 } cdecl alien-indirect ;
 | 
			
		||||
 | 
			
		||||
{ 28 } [
 | 
			
		||||
    1 2 3 S{ test_struct_66 f 4 5 } S{ test_struct_66 f 6 7 } callback-14 [
 | 
			
		||||
        callback-14-test
 | 
			
		||||
    ] with-callback
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
{ 44 } [ 1 2 3 S{ test_struct_66 f 4 5 } S{ test_struct_66 f 6 7 } 8 ffi_test_67 ] unit-test
 | 
			
		||||
 | 
			
		||||
: callback-15 ( -- callback )
 | 
			
		||||
    ulong { ulong ulong ulong test_struct_66 test_struct_66 ulong } cdecl
 | 
			
		||||
    [| a b c d e _f |
 | 
			
		||||
        a b + c +
 | 
			
		||||
        d [ mem1>> + ] [ mem2>> + ] bi
 | 
			
		||||
        e [ mem1>> + ] [ mem2>> + ] bi
 | 
			
		||||
        _f 2 * + 
 | 
			
		||||
    ] alien-callback ;
 | 
			
		||||
 | 
			
		||||
: callback-15-test ( a b c d e _f callback -- result )
 | 
			
		||||
    ulong { ulong ulong ulong test_struct_66 test_struct_66 ulong } cdecl alien-indirect ;
 | 
			
		||||
 | 
			
		||||
{ 44 } [
 | 
			
		||||
    1 2 3 S{ test_struct_66 f 4 5 } S{ test_struct_66 f 6 7 } 8 callback-15 [
 | 
			
		||||
        callback-15-test
 | 
			
		||||
    ] with-callback
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
{ 55 } [
 | 
			
		||||
    1 2 3 S{ test_struct_66 f 4 5 } S{ test_struct_68 f 6 7 8 } S{ test_struct_66 f 9 10 } ffi_test_68
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
: callback-16 ( -- callback )
 | 
			
		||||
    ulong { ulong ulong ulong test_struct_66 test_struct_68 test_struct_66 } cdecl
 | 
			
		||||
    [| a b c d e _f |
 | 
			
		||||
        a b + c +
 | 
			
		||||
        d [ mem1>> + ] [ mem2>> + ] bi
 | 
			
		||||
        e [ mem1>> + ] [ mem2>> + ] [ mem3>> + ] tri
 | 
			
		||||
        _f [ mem1>> + ] [ mem2>> + ] bi
 | 
			
		||||
    ] alien-callback ;
 | 
			
		||||
 | 
			
		||||
: callback-16-test ( a b c d e _f callback -- result )
 | 
			
		||||
    ulong { ulong ulong ulong test_struct_66 test_struct_68 test_struct_66 } cdecl alien-indirect ;
 | 
			
		||||
 | 
			
		||||
{ 55 } [
 | 
			
		||||
    1 2 3 S{ test_struct_66 f 4 5 } S{ test_struct_68 f 6 7 8 } S{ test_struct_66 f 9 10 } callback-16 [
 | 
			
		||||
        callback-16-test
 | 
			
		||||
    ] with-callback
 | 
			
		||||
] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -357,6 +357,27 @@ double ffi_test_65(int n, ...) {
 | 
			
		|||
    return sum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned long ffi_test_66(unsigned long a, unsigned long b, unsigned long c,
 | 
			
		||||
                          struct test_struct_66 d, struct test_struct_66 e) {
 | 
			
		||||
    unsigned long x;
 | 
			
		||||
    x = a + b + c + d.mem1 + d.mem2 + e.mem1 + e.mem2;
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned long ffi_test_67(unsigned long a, unsigned long b, unsigned long c,
 | 
			
		||||
                          struct test_struct_66 d, struct test_struct_66 e,
 | 
			
		||||
                          unsigned long f) {
 | 
			
		||||
    unsigned long x;
 | 
			
		||||
    x = a + b + c + d.mem1 + d.mem2 + e.mem1 + e.mem2 + f*2;
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned long ffi_test_68(unsigned long a, unsigned long b, unsigned long c,
 | 
			
		||||
                          struct test_struct_66 d, struct test_struct_68 e, struct test_struct_66 f) {
 | 
			
		||||
    unsigned long x;
 | 
			
		||||
    x = a + b + c + d.mem1 + d.mem2 + e.mem1 + e.mem2 + e.mem3 + f.mem1 + f.mem2;
 | 
			
		||||
	return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* bug1021_test_1(void* x, int y) {
 | 
			
		||||
  return (void*)(y * y + (size_t)x);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -232,6 +232,27 @@ FACTOR_EXPORT struct ulonglong_pair ffi_test_63(void);
 | 
			
		|||
FACTOR_EXPORT int ffi_test_64(int n, ...);
 | 
			
		||||
FACTOR_EXPORT double ffi_test_65(int n, ...);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct test_struct_66 {
 | 
			
		||||
  unsigned long mem1;
 | 
			
		||||
  unsigned long mem2;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct test_struct_68 {
 | 
			
		||||
  unsigned long mem1;
 | 
			
		||||
  unsigned long mem2;
 | 
			
		||||
  unsigned long mem3;  
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
FACTOR_EXPORT unsigned long ffi_test_66(unsigned long a, unsigned long b, unsigned long c,
 | 
			
		||||
                                        struct test_struct_66 d, struct test_struct_66 e);
 | 
			
		||||
 | 
			
		||||
FACTOR_EXPORT unsigned long ffi_test_67(unsigned long a, unsigned long b, unsigned long c,
 | 
			
		||||
                                        struct test_struct_66 d, struct test_struct_66 e, unsigned long f);
 | 
			
		||||
 | 
			
		||||
FACTOR_EXPORT unsigned long ffi_test_68(unsigned long a, unsigned long b, unsigned long c,
 | 
			
		||||
                                        struct test_struct_66 d, struct test_struct_68 e, struct test_struct_66 f);
 | 
			
		||||
 | 
			
		||||
FACTOR_EXPORT void* bug1021_test_1(void* x, int y);
 | 
			
		||||
FACTOR_EXPORT int bug1021_test_2(int x, char* y, void *z);
 | 
			
		||||
FACTOR_EXPORT void* bug1021_test_3(int x);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue