This has been added to avoid the situation where some host ctype.h functions
[openssl.git] / test / ctype_internal_test.c
1 /*
2  * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the OpenSSL license (the "License").  You may not use
5  * this file except in compliance with the License.  You can obtain a copy
6  * in the file LICENSE in the source distribution or at
7  * https://www.openssl.org/source/license.html
8  */
9
10 #include "testutil.h"
11 #include "internal/ctype.h"
12 #include "../e_os.h"
13 #include <ctype.h>
14 #include <stdio.h>
15
16 static int test_ctype_chars(int n)
17 {
18     return TEST_int_eq(isalnum(n) != 0, ossl_isalnum(n) != 0)
19            && TEST_int_eq(isalpha(n) != 0, ossl_isalpha(n) != 0)
20            && TEST_int_eq(isascii(n) != 0, ossl_isascii(n) != 0)
21            && TEST_int_eq(isblank(n) != 0, ossl_isblank(n) != 0)
22            && TEST_int_eq(iscntrl(n) != 0, ossl_iscntrl(n) != 0)
23            && TEST_int_eq(isdigit(n) != 0, ossl_isdigit(n) != 0)
24            && TEST_int_eq(isgraph(n) != 0, ossl_isgraph(n) != 0)
25            && TEST_int_eq(islower(n) != 0, ossl_islower(n) != 0)
26            && TEST_int_eq(isprint(n) != 0, ossl_isprint(n) != 0)
27            && TEST_int_eq(ispunct(n) != 0, ossl_ispunct(n) != 0)
28            && TEST_int_eq(isspace(n) != 0, ossl_isspace(n) != 0)
29            && TEST_int_eq(isupper(n) != 0, ossl_isupper(n) != 0)
30            && TEST_int_eq(isxdigit(n) != 0, ossl_isxdigit(n) != 0);
31 }
32
33 static int test_ctype_negative(int n)
34 {
35     return test_ctype_chars(-n);
36 }
37
38 static struct {
39     int u;
40     int l;
41 } case_change[] = {
42     { 'A', 'a' },
43     { 'X', 'x' },
44     { 'Z', 'z' },
45     { '0', '0' },
46     { '%', '%' },
47     { '~', '~' },
48     {   0,   0 },
49     { EOF, EOF },
50     { 333, 333 },
51     { -333, -333 },
52     { -128, -128 }
53 };
54
55 static int test_ctype_toupper(int n)
56 {
57     return TEST_int_eq(ossl_toupper(case_change[n].l), case_change[n].u)
58            && TEST_int_eq(ossl_toupper(case_change[n].u), case_change[n].u);
59 }
60
61 static int test_ctype_tolower(int n)
62 {
63     return TEST_int_eq(ossl_tolower(case_change[n].u), case_change[n].l)
64            && TEST_int_eq(ossl_tolower(case_change[n].l), case_change[n].l);
65 }
66
67 int setup_tests(void)
68 {
69     ADD_ALL_TESTS(test_ctype_chars, 256);
70     ADD_ALL_TESTS(test_ctype_negative, 128);
71     ADD_ALL_TESTS(test_ctype_toupper, OSSL_NELEM(case_change));
72     ADD_ALL_TESTS(test_ctype_tolower, OSSL_NELEM(case_change));
73     return 1;
74 }