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}