Add Callback Tests

flac
kusumotonorio 2020-01-19 21:57:05 +09:00 committed by Steve Ayerhart
parent 14b8cfeba9
commit 11cd58a5d7
No known key found for this signature in database
GPG Key ID: 5BFD39C5359E967D
3 changed files with 111 additions and 1 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);