ยปCore Development>Code coverage>Modules/_ctypes/libffi/testsuite/libffi.call/promotion.c

Python code coverage for Modules/_ctypes/libffi/testsuite/libffi.call/promotion.c

#countcontent
1n/a/* Area: ffi_call
2n/a Purpose: Promotion test.
3n/a Limitations: none.
4n/a PR: none.
5n/a Originator: From the original ffitest.c */
6n/a
7n/a/* { dg-do run } */
8n/a#include "ffitest.h"
9n/astatic int promotion(signed char sc, signed short ss,
10n/a unsigned char uc, unsigned short us)
11n/a{
12n/a int r = (int) sc + (int) ss + (int) uc + (int) us;
13n/a
14n/a return r;
15n/a}
16n/a
17n/aint main (void)
18n/a{
19n/a ffi_cif cif;
20n/a ffi_type *args[MAX_ARGS];
21n/a void *values[MAX_ARGS];
22n/a ffi_arg rint;
23n/a signed char sc;
24n/a unsigned char uc;
25n/a signed short ss;
26n/a unsigned short us;
27n/a unsigned long ul;
28n/a
29n/a args[0] = &ffi_type_schar;
30n/a args[1] = &ffi_type_sshort;
31n/a args[2] = &ffi_type_uchar;
32n/a args[3] = &ffi_type_ushort;
33n/a values[0] = ≻
34n/a values[1] = &ss;
35n/a values[2] = &uc;
36n/a values[3] = &us;
37n/a
38n/a /* Initialize the cif */
39n/a CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
40n/a &ffi_type_sint, args) == FFI_OK);
41n/a
42n/a us = 0;
43n/a ul = 0;
44n/a
45n/a for (sc = (signed char) -127;
46n/a sc <= (signed char) 120; sc += 1)
47n/a for (ss = -30000; ss <= 30000; ss += 10000)
48n/a for (uc = (unsigned char) 0;
49n/a uc <= (unsigned char) 200; uc += 20)
50n/a for (us = 0; us <= 60000; us += 10000)
51n/a {
52n/a ul++;
53n/a ffi_call(&cif, FFI_FN(promotion), &rint, values);
54n/a CHECK((int)rint == (signed char) sc + (signed short) ss +
55n/a (unsigned char) uc + (unsigned short) us);
56n/a }
57n/a printf("%lu promotion tests run\n", ul);
58n/a exit(0);
59n/a}