1 /*
2 STRCOLL: int strcoll (const char *s1, const char *s2)
3 */
4
5 #define TST_FUNCTION strcoll
6
7 #include "tsp_common.c"
8 #include "dat_strcoll.c"
9
10 int
tst_strcoll(FILE * fp,int debug_flg)11 tst_strcoll (FILE * fp, int debug_flg)
12 {
13 TST_DECL_VARS (int);
14 const char *s1, *s2;
15
16 TST_DO_TEST (strcoll)
17 {
18 TST_HEAD_LOCALE (strcoll, S_STRCOLL);
19 TST_DO_REC (strcoll)
20 {
21 TST_GET_ERRET (strcoll);
22 s1 = TST_INPUT (strcoll).s1;
23 s2 = TST_INPUT (strcoll).s2;
24
25 TST_CLEAR_ERRNO;
26 ret = strcoll (s1, s2);
27 TST_SAVE_ERRNO;
28
29 if (debug_flg)
30 {
31 fprintf (stdout, "strcoll() [ %s : %d ] ret = %d\n", locale,
32 rec + 1, ret);
33 fprintf (stdout, " errno = %d\n",
34 errno_save);
35 fprintf (stdout, " LC_COLLATE = %s\n",
36 (setlocale (LC_COLLATE, NULL)) ? setlocale (LC_COLLATE,
37 NULL) : "");
38 }
39
40 TST_IF_RETURN (S_STRCOLL)
41 {
42 if (ret_exp == +1)
43 {
44 if (ret > 0)
45 {
46 Result (C_SUCCESS, S_STRCOLL, CASE_3, MS_PASSED);
47 }
48 else
49 {
50 err_count++;
51 Result (C_FAILURE, S_STRCOLL, CASE_3,
52 "the return value should be greater than 0,"
53 " but is not ...");
54 }
55 }
56 else if (ret_exp == -1)
57 {
58 if (ret < 0)
59 {
60 Result (C_SUCCESS, S_STRCOLL, CASE_3, MS_PASSED);
61 }
62 else
63 {
64 err_count++;
65 Result (C_FAILURE, S_STRCOLL, CASE_3,
66 "the return value should less than 0, but not ...");
67 }
68 }
69 else if (ret_exp != 0)
70 {
71 if (debug_flg)
72 {
73 fprintf (stderr, "*** Warning *** : tst_strcoll : "
74 "(check the test data); should set ret_flg=1"
75 " to check a return value");
76 }
77
78 Result (C_INVALID, S_WCSCHR, CASE_3, "(check the test data); "
79 "should set ret_flg=1 to check a return value");
80 }
81 }
82 }
83 }
84
85 return err_count;
86 }
87