1/**
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *   http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include <limits.h>
17#include <locale.h>
18#include <stdlib.h>
19#include "functionalext.h"
20
21/**
22 * @tc.name      : localeconv_0100
23 * @tc.desc      : Asserts whether the localeconv function returns a value that is expected by default
24 * @tc.level     : Level 0
25 */
26void localeconv_0100(void)
27{
28    struct lconv *pconv = localeconv();
29    if (pconv == NULL) {
30        EXPECT_PTRNE("localeconv_0100", pconv, NULL);
31        return;
32    }
33    EXPECT_STREQ("localeconv_0100", ".", pconv->decimal_point);
34    EXPECT_STREQ("localeconv_0100", "", pconv->thousands_sep);
35    EXPECT_STREQ("localeconv_0100", "", pconv->grouping);
36    EXPECT_STREQ("localeconv_0100", "", pconv->int_curr_symbol);
37    EXPECT_STREQ("localeconv_0100", "", pconv->currency_symbol);
38    EXPECT_STREQ("localeconv_0100", "", pconv->mon_decimal_point);
39    EXPECT_STREQ("localeconv_0100", "", pconv->mon_thousands_sep);
40    EXPECT_STREQ("localeconv_0100", "", pconv->mon_grouping);
41    EXPECT_STREQ("localeconv_0100", "", pconv->positive_sign);
42    EXPECT_STREQ("localeconv_0100", "", pconv->negative_sign);
43    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->int_frac_digits);
44    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->frac_digits);
45    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->p_cs_precedes);
46    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->p_sep_by_space);
47    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->n_cs_precedes);
48    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->n_sep_by_space);
49    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->p_sign_posn);
50    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->n_sign_posn);
51#ifdef __USE_ISOC99
52    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->int_p_cs_precedes);
53    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->int_p_sep_by_space);
54    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->int_n_cs_precedes);
55    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->int_n_sep_by_space);
56    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->int_p_sign_posn);
57    EXPECT_EQ("localeconv_0100", CHAR_MAX, pconv->int_n_sign_posn);
58#endif
59}
60
61/**
62 * @tc.name      : localeconv_0200
63 * @tc.desc      : set locale as zh_CN.UTF-8, check whether the localeconv function returns a value that is expected
64 * @tc.level     : Level 0
65 */
66void localeconv_0200(void)
67{
68    setlocale(LC_ALL, "zh_CN");
69    struct lconv *pconv = localeconv();
70    if (pconv == NULL) {
71        EXPECT_PTRNE("localeconv_0200", pconv, NULL);
72        return;
73    }
74    EXPECT_STREQ("localeconv_0200", ".", pconv->decimal_point);
75    EXPECT_STREQ("localeconv_0200", ",", pconv->thousands_sep);
76    EXPECT_STREQ("localeconv_0200", "", pconv->grouping);
77    EXPECT_STREQ("localeconv_0200", "CNY", pconv->int_curr_symbol);
78    EXPECT_STREQ("localeconv_0200", "¥", pconv->currency_symbol);
79    EXPECT_STREQ("localeconv_0200", ".", pconv->mon_decimal_point);
80    EXPECT_STREQ("localeconv_0200", ",", pconv->mon_thousands_sep);
81    EXPECT_STREQ("localeconv_0200", "", pconv->mon_grouping);
82    EXPECT_STREQ("localeconv_0200", "+", pconv->positive_sign);
83    EXPECT_STREQ("localeconv_0200", "-", pconv->negative_sign);
84    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->int_frac_digits);
85    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->frac_digits);
86    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->p_cs_precedes);
87    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->p_sep_by_space);
88    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->n_cs_precedes);
89    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->n_sep_by_space);
90    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->p_sign_posn);
91    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->n_sign_posn);
92#ifdef __USE_ISOC99
93    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->int_p_cs_precedes);
94    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->int_p_sep_by_space);
95    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->int_n_cs_precedes);
96    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->int_n_sep_by_space);
97    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->int_p_sign_posn);
98    EXPECT_EQ("localeconv_0200", CHAR_MAX, pconv->int_n_sign_posn);
99#endif
100}
101
102/**
103 * @tc.name      : localeconv_0300
104 * @tc.desc      : set LC_NUMERIC locale as zh_CN.UTF-8, check whether the localeconv function
105 returns a value that is expected
106 * @tc.level     : Level 0
107 */
108void localeconv_0300(void)
109{
110    setlocale(LC_ALL, "C");
111    setlocale(LC_NUMERIC, "zh_CN.UTF-8");
112    struct lconv *pconv = localeconv();
113    if (pconv == NULL) {
114        EXPECT_PTRNE("localeconv_0300", pconv, NULL);
115        return;
116    }
117    EXPECT_STREQ("localeconv_0300", ".", pconv->decimal_point);
118    EXPECT_STREQ("localeconv_0300", ",", pconv->thousands_sep);
119    EXPECT_STREQ("localeconv_0300", "", pconv->grouping);
120    EXPECT_STREQ("localeconv_0300", "", pconv->int_curr_symbol);
121    EXPECT_STREQ("localeconv_0300", "", pconv->currency_symbol);
122    EXPECT_STREQ("localeconv_0300", "", pconv->mon_decimal_point);
123    EXPECT_STREQ("localeconv_0300", "", pconv->mon_thousands_sep);
124    EXPECT_STREQ("localeconv_0300", "", pconv->mon_grouping);
125    EXPECT_STREQ("localeconv_0300", "", pconv->positive_sign);
126    EXPECT_STREQ("localeconv_0300", "", pconv->negative_sign);
127    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->int_frac_digits);
128    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->frac_digits);
129    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->p_cs_precedes);
130    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->p_sep_by_space);
131    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->n_cs_precedes);
132    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->n_sep_by_space);
133    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->p_sign_posn);
134    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->n_sign_posn);
135#ifdef __USE_ISOC99
136    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->int_p_cs_precedes);
137    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->int_p_sep_by_space);
138    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->int_n_cs_precedes);
139    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->int_n_sep_by_space);
140    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->int_p_sign_posn);
141    EXPECT_EQ("localeconv_0300", CHAR_MAX, pconv->int_n_sign_posn);
142#endif
143}
144
145/**
146 * @tc.name      : localeconv_0400
147 * @tc.desc      : set LC_NUMELC_MONETARYRIC locale as zh_CN.UTF-8, check whether the localeconv function
148 returns a value that is expected
149 * @tc.level     : Level 0
150 */
151void localeconv_0400(void)
152{
153    setlocale(LC_ALL, "C");
154    setlocale(LC_MONETARY, "zh_CN.UTF-8");
155    struct lconv *pconv = localeconv();
156    if (pconv == NULL) {
157        EXPECT_PTRNE("localeconv_0400", pconv, NULL);
158        return;
159    }
160    EXPECT_STREQ("localeconv_0400", ".", pconv->decimal_point);
161    EXPECT_STREQ("localeconv_0400", "", pconv->thousands_sep);
162    EXPECT_STREQ("localeconv_0400", "", pconv->grouping);
163    EXPECT_STREQ("localeconv_0400", "CNY", pconv->int_curr_symbol);
164    EXPECT_STREQ("localeconv_0400", "¥", pconv->currency_symbol);
165    EXPECT_STREQ("localeconv_0400", ".", pconv->mon_decimal_point);
166    EXPECT_STREQ("localeconv_0400", ",", pconv->mon_thousands_sep);
167    EXPECT_STREQ("localeconv_0400", "", pconv->mon_grouping);
168    EXPECT_STREQ("localeconv_0400", "+", pconv->positive_sign);
169    EXPECT_STREQ("localeconv_0400", "-", pconv->negative_sign);
170    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->int_frac_digits);
171    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->frac_digits);
172    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->p_cs_precedes);
173    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->p_sep_by_space);
174    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->n_cs_precedes);
175    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->n_sep_by_space);
176    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->p_sign_posn);
177    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->n_sign_posn);
178#ifdef __USE_ISOC99
179    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->int_p_cs_precedes);
180    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->int_p_sep_by_space);
181    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->int_n_cs_precedes);
182    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->int_n_sep_by_space);
183    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->int_p_sign_posn);
184    EXPECT_EQ("localeconv_0400", CHAR_MAX, pconv->int_n_sign_posn);
185#endif
186}
187
188int main(void)
189{
190    localeconv_0100();
191    localeconv_0200();
192    localeconv_0300();
193    localeconv_0400();
194    return t_status;
195}