| This package contains a test suite for libffi. |
| |
| This test suite can be compiled with a C compiler. No need for 'expect' |
| or some other package that is often not installed. |
| |
| The test suite consists of 81 C functions, each with a different signature. |
| * test-call verifies that calling each function directly produces the same |
| results as calling the function indirectly through 'ffi_call'. |
| * test-callback verifies that calling each function directly produces the same |
| results as calling a function that is a callback (object build by |
| 'ffi_prep_closure_loc') and simulates the original function. |
| |
| Each direct or indirect invocation should produce one line of output to |
| stdout. A correct output consists of paired lines, such as |
| |
| void f(void): |
| void f(void): |
| int f(void):->99 |
| int f(void):->99 |
| int f(int):(1)->2 |
| int f(int):(1)->2 |
| int f(2*int):(1,2)->3 |
| int f(2*int):(1,2)->3 |
| ... |
| |
| The Makefile then creates two files: |
| * failed-call, which consists of the non-paired lines of output of |
| 'test-call', |
| * failed-callback, which consists of the non-paired lines of output of |
| 'test-callback'. |
| |
| The test suite passes if both failed-call and failed-callback come out |
| as empty. |
| |
| |
| How to use the test suite |
| ------------------------- |
| |
| 1. Modify the Makefile's variables |
| prefix = the directory in which libffi was installed |
| CC = the C compiler, often with options such as "-m32" or "-m64" |
| that enforce a certain ABI, |
| CFLAGS = optimization options (need to change them only for non-GCC |
| compilers) |
| 2. Run "make". If it fails already in "test-call", run also |
| "make check-callback". |
| 3. If this failed, inspect the output files. |
| |
| |
| How to interpret the results |
| ---------------------------- |
| |
| The failed-call and failed-callback files consist of paired lines: |
| The first line is the result of the direct invocation. |
| The second line is the result of invocation through libffi. |
| |
| For example, this output |
| |
| uchar f(uchar,ushort,uint,ulong):(97,2,3,4)->255 |
| uchar f(uchar,ushort,uint,ulong):(97,2,3,4)->0 |
| |
| indicates that the arguments were passed correctly, but the return |
| value came out wrong. |
| |
| And this output |
| |
| float f(17*float,3*int,L):(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,6,7,8,561,1105,1729,2465,2821,6601)->15319.1 |
| float f(17*float,3*int,L):(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,-140443648,10,268042216,-72537980,-140443648,-140443648,-140443648,-140443648,-140443648)->-6.47158e+08 |
| |
| indicates that integer arguments that come after 17 floating-point arguments |
| were not passed correctly. |
| |
| |
| Credits |
| ------- |
| |
| The test suite is based on the one of GNU libffcall-2.0. |
| Authors: Bill Triggs, Bruno Haible |