1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright (c) 2019, Joyent, Inc.
14 */
15
16 /*
17 * Check for basic float types.
18 */
19
20 #include <stdlib.h>
21 #include <unistd.h>
22
23 #include "check-common.h"
24
25 static check_number_t check_floats[] = {
26 { "float", CTF_K_FLOAT, CTF_FP_SINGLE, 0, 32 },
27 { "double", CTF_K_FLOAT, CTF_FP_DOUBLE, 0, 64 },
28 #ifdef TARGET_LP64
29 { "long double", CTF_K_FLOAT, CTF_FP_LDOUBLE, 0, 128 },
30 #else
31 { "long double", CTF_K_FLOAT, CTF_FP_LDOUBLE, 0, 96 },
32 #endif
33 { "complex float", CTF_K_FLOAT, CTF_FP_CPLX, 0, 64 },
34 { "complex double", CTF_K_FLOAT, CTF_FP_DCPLX, 0, 128 },
35 #ifdef TARGET_LP64
36 { "complex long double", CTF_K_FLOAT, CTF_FP_LDCPLX, 0, 256 },
37 #else
38 { "complex long double", CTF_K_FLOAT, CTF_FP_LDCPLX, 0, 192 },
39 #endif
40 { NULL }
41 };
42
43 static check_symbol_t check_syms[] = {
44 { "a", "float" },
45 { "b", "double" },
46 { "c", "long double" },
47 { "d", "complex float" },
48 { "e", "complex double" },
49 { "f", "complex long double" },
50 { NULL }
51 };
52
53 int
main(int argc,char * argv[])54 main(int argc, char *argv[])
55 {
56 int i, ret = 0;
57
58 if (argc < 2) {
59 errx(EXIT_FAILURE, "missing test files");
60 }
61
62 for (i = 1; i < argc; i++) {
63 ctf_file_t *fp;
64
65 if ((fp = ctf_open(argv[i], &ret)) == NULL) {
66 warnx("failed to open %s: %s", argv[i],
67 ctf_errmsg(ret));
68 ret = EXIT_FAILURE;
69 continue;
70 }
71
72 if (!ctftest_check_numbers(fp, check_floats))
73 ret = EXIT_FAILURE;
74 if (!ctftest_check_symbols(fp, check_syms))
75 ret = EXIT_FAILURE;
76 ctf_close(fp);
77 }
78
79 return (ret);
80 }
81