Line data Source code
1 : // Copyright (c) 2006-2023 Made to Order Software Corp. All Rights Reserved 2 : // 3 : // https://snapwebsites.org/project/snaplogger 4 : // contact@m2osw.com 5 : // 6 : // This program is free software; you can redistribute it and/or modify 7 : // it under the terms of the GNU General Public License as published by 8 : // the Free Software Foundation; either version 2 of the License, or 9 : // (at your option) any later version. 10 : // 11 : // This program is distributed in the hope that it will be useful, 12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 : // GNU General Public License for more details. 15 : // 16 : // You should have received a copy of the GNU General Public License along 17 : // with this program; if not, write to the Free Software Foundation, Inc., 18 : // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 : 20 : // self 21 : // 22 : #include "catch_main.h" 23 : 24 : 25 : // snaplogger lib 26 : // 27 : #include <snaplogger/ordinal_indicator.h> 28 : 29 : 30 : // C lib 31 : // 32 : #include <unistd.h> 33 : 34 : 35 : 36 2 : CATCH_TEST_CASE("ordinal_indicator_common", "[ordinal_indicator]") 37 : { 38 2 : CATCH_START_SECTION("ordinal_indicator: default settings") 39 : { 40 1 : snaplogger::ordinal_indicator ind; 41 : 42 1 : CATCH_REQUIRE(ind.language() == snaplogger::language_t::LANGUAGE_DEFAULT); 43 1 : CATCH_REQUIRE(ind.gender() == snaplogger::gender_t::GENDER_MASCULINE); 44 1 : CATCH_REQUIRE(ind.number() == snaplogger::number_t::NUMBER_SINGULAR); 45 1 : CATCH_REQUIRE(ind.secondary_form() == snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 46 : } 47 2 : CATCH_END_SECTION() 48 : 49 2 : CATCH_START_SECTION("ordinal_indicator: test all possible parameters") 50 : { 51 1 : snaplogger::ordinal_indicator ind; 52 : 53 1 : for(snaplogger::language_t language(snaplogger::language_t::LANGUAGE_FIRST); 54 30 : language <= snaplogger::language_t::LANGUAGE_LAST; 55 29 : language = static_cast<snaplogger::language_t>(static_cast<int>(language) + 1)) 56 : { 57 29 : for(snaplogger::gender_t gender(snaplogger::gender_t::GENDER_MASCULINE); 58 116 : gender <= snaplogger::gender_t::GENDER_NEUTRAL; 59 87 : gender = static_cast<snaplogger::gender_t>(static_cast<int>(gender) + 1)) 60 : { 61 87 : for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR); 62 261 : number <= snaplogger::number_t::NUMBER_PLURAL; 63 174 : number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1)) 64 : { 65 174 : for(snaplogger::secondary_form_t form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 66 696 : form <= snaplogger::secondary_form_t::SECONDARY_FORM_THREE; 67 522 : form = static_cast<snaplogger::secondary_form_t>(static_cast<int>(form) + 1)) 68 : { 69 522 : ind.language(language); 70 522 : ind.gender(gender); 71 522 : ind.number(number); 72 522 : ind.secondary_form(form); 73 : 74 522 : CATCH_REQUIRE(ind.language() == language); 75 522 : CATCH_REQUIRE(ind.gender() == gender); 76 522 : CATCH_REQUIRE(ind.number() == number); 77 522 : CATCH_REQUIRE(ind.secondary_form() == form); 78 : } 79 : } 80 : } 81 : } 82 : } 83 2 : CATCH_END_SECTION() 84 2 : } 85 : 86 : 87 4 : CATCH_TEST_CASE("ordinal_indicator_english", "[ordinal_indicator]") 88 : { 89 4 : CATCH_START_SECTION("ordinal_indicator: 1st 2nd 3rd 4th ... 20th") 90 : { 91 1 : snaplogger::ordinal_indicator ind; 92 : 93 1 : ind.language(snaplogger::language_t::LANGUAGE_ENGLISH); 94 : 95 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("st")); 96 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nd")); 97 1 : CATCH_REQUIRE(ind.indicator(3) == std::string("rd")); 98 18 : for(int n(4); n <= 20; ++n) 99 : { 100 17 : CATCH_REQUIRE(ind.indicator(n) == std::string("th")); 101 : } 102 : } 103 4 : CATCH_END_SECTION() 104 : 105 4 : CATCH_START_SECTION("ordinal_indicator: larger numbers") 106 : { 107 1 : snaplogger::ordinal_indicator ind; 108 : 109 1 : ind.language(snaplogger::language_t::LANGUAGE_ENGLISH); 110 : 111 1 : CATCH_REQUIRE(ind.indicator(11) == std::string("th")); 112 1 : CATCH_REQUIRE(ind.indicator(111) == std::string("th")); 113 1 : CATCH_REQUIRE(ind.indicator(37'511) == std::string("th")); 114 : 115 1 : CATCH_REQUIRE(ind.indicator(12) == std::string("th")); 116 1 : CATCH_REQUIRE(ind.indicator(112) == std::string("th")); 117 : 118 1 : CATCH_REQUIRE(ind.indicator(13) == std::string("th")); 119 1 : CATCH_REQUIRE(ind.indicator(513) == std::string("th")); 120 1 : CATCH_REQUIRE(ind.indicator(915'113) == std::string("th")); 121 : } 122 4 : CATCH_END_SECTION() 123 : 124 4 : CATCH_START_SECTION("ordinal_indicator: 1st 2nd 3rd 4th with any gender & number") 125 : { 126 1 : for(snaplogger::gender_t gender(snaplogger::gender_t::GENDER_MASCULINE); 127 4 : gender <= snaplogger::gender_t::GENDER_NEUTRAL; 128 3 : gender = static_cast<snaplogger::gender_t>(static_cast<int>(gender) + 1)) 129 : { 130 3 : for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR); 131 9 : number <= snaplogger::number_t::NUMBER_PLURAL; 132 6 : number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1)) 133 : { 134 : //std::cerr << "test with " << static_cast<int>(gender) << " & " << static_cast<int>(number) << "\n"; 135 6 : snaplogger::ordinal_indicator ind; 136 6 : ind.language(snaplogger::language_t::LANGUAGE_ENGLISH); 137 6 : ind.gender(gender); 138 6 : ind.number(number); 139 : 140 6 : CATCH_REQUIRE(ind.indicator(1) == std::string("st")); 141 6 : CATCH_REQUIRE(ind.indicator(2) == std::string("nd")); 142 6 : CATCH_REQUIRE(ind.indicator(3) == std::string("rd")); 143 108 : for(int n(4); n <= 20; ++n) 144 : { 145 102 : CATCH_REQUIRE(ind.indicator(n) == std::string("th")); 146 : } 147 : 148 : // and a few of the special cases 149 : // 150 6 : CATCH_REQUIRE(ind.indicator(11) == std::string("th")); 151 6 : CATCH_REQUIRE(ind.indicator(112) == std::string("th")); 152 6 : CATCH_REQUIRE(ind.indicator(915'113) == std::string("th")); 153 : } 154 : } 155 : } 156 4 : CATCH_END_SECTION() 157 : 158 4 : CATCH_START_SECTION("ordinal_indicator: no other forms") 159 : { 160 1 : snaplogger::ordinal_indicator ind; 161 : 162 1 : ind.language(snaplogger::language_t::LANGUAGE_ENGLISH); 163 : 164 1 : for(snaplogger::gender_t gender(snaplogger::gender_t::GENDER_MASCULINE); 165 4 : gender <= snaplogger::gender_t::GENDER_NEUTRAL; 166 3 : gender = static_cast<snaplogger::gender_t>(static_cast<int>(gender) + 1)) 167 : { 168 3 : for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR); 169 9 : number <= snaplogger::number_t::NUMBER_PLURAL; 170 6 : number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1)) 171 : { 172 6 : for(snaplogger::secondary_form_t form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 173 24 : form <= snaplogger::secondary_form_t::SECONDARY_FORM_THREE; 174 18 : form = static_cast<snaplogger::secondary_form_t>(static_cast<int>(form) + 1)) 175 : { 176 : //std::cerr << "test with " << static_cast<int>(gender) << " & " << static_cast<int>(number) << "\n"; 177 18 : ind.gender(gender); 178 18 : ind.number(number); 179 18 : ind.secondary_form(form); 180 : 181 18 : CATCH_REQUIRE(ind.indicator(1) == std::string()); 182 18 : if(form == snaplogger::secondary_form_t::SECONDARY_FORM_ONE) 183 : { 184 6 : CATCH_REQUIRE(ind.indicator(2) == std::string("d")); 185 6 : CATCH_REQUIRE(ind.indicator(3) == std::string("d")); 186 : } 187 : else 188 : { 189 12 : CATCH_REQUIRE(ind.indicator(2) == std::string()); 190 12 : CATCH_REQUIRE(ind.indicator(3) == std::string()); 191 : } 192 324 : for(int n(4); n <= 20; ++n) 193 : { 194 306 : CATCH_REQUIRE(ind.indicator(n) == std::string()); 195 : } 196 : 197 : // and a few of the special cases 198 : // 199 18 : CATCH_REQUIRE(ind.indicator(11) == std::string()); 200 18 : CATCH_REQUIRE(ind.indicator(112) == std::string()); 201 18 : CATCH_REQUIRE(ind.indicator(915'113) == std::string()); 202 : } 203 : } 204 : } 205 : } 206 4 : CATCH_END_SECTION() 207 4 : } 208 : 209 : 210 : 211 3 : CATCH_TEST_CASE("ordinal_indicator_french", "[ordinal_indicator]") 212 : { 213 3 : CATCH_START_SECTION("ordinal_indicator: 1re 1res 1er 1ers (first)") 214 : { 215 1 : snaplogger::ordinal_indicator ind; 216 : 217 1 : ind.language(snaplogger::language_t::LANGUAGE_FRENCH); 218 : 219 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 220 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 221 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 222 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("er")); 223 : 224 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 225 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 226 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 227 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("ers")); 228 : 229 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 230 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 231 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 232 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("re")); 233 : 234 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 235 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 236 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 237 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("res")); 238 : } 239 3 : CATCH_END_SECTION() 240 : 241 3 : CATCH_START_SECTION("ordinal_indicator: 2e 2es 2d 2ds 2de 2des 2nd 2nds 2nde 2ndes 2eme 2emes (second)") 242 : { 243 1 : snaplogger::ordinal_indicator ind; 244 : 245 1 : ind.language(snaplogger::language_t::LANGUAGE_FRENCH); 246 : 247 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 248 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 249 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 250 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("e")); 251 : 252 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 253 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 254 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 255 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("es")); 256 : 257 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 258 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 259 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 260 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("e")); 261 : 262 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 263 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 264 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 265 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("es")); 266 : 267 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 268 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 269 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 270 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA8me")); 271 : 272 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 273 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 274 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 275 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA8mes")); 276 : 277 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 278 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 279 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 280 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA8me")); 281 : 282 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 283 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 284 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 285 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA8mes")); 286 : 287 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 288 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 289 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO); 290 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("i\xC3\xA8me")); 291 : 292 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 293 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 294 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO); 295 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("i\xC3\xA8mes")); 296 : 297 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 298 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 299 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO); 300 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("i\xC3\xA8me")); 301 : 302 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 303 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 304 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO); 305 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("i\xC3\xA8mes")); 306 : 307 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 308 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 309 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_THREE); 310 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("d")); 311 : 312 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 313 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 314 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_THREE); 315 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("ds")); 316 : 317 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 318 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 319 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_THREE); 320 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("de")); 321 : 322 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 323 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 324 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_THREE); 325 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("des")); 326 : 327 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 328 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 329 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FOUR); 330 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nd")); 331 : 332 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 333 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 334 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FOUR); 335 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nds")); 336 : 337 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 338 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 339 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FOUR); 340 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nde")); 341 : 342 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 343 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 344 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FOUR); 345 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("ndes")); 346 : } 347 3 : CATCH_END_SECTION() 348 : 349 3 : CATCH_START_SECTION("ordinal_indicator: Ne Nes Neme Nemes Nieme Niemes (second)") 350 : { 351 1 : snaplogger::ordinal_indicator ind; 352 : 353 1 : ind.language(snaplogger::language_t::LANGUAGE_FRENCH); 354 : 355 998 : for(int n(3); n < 1'000; ++n) 356 : { 357 997 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 358 997 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 359 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 360 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("e")); 361 : 362 997 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 363 997 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 364 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 365 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("es")); 366 : 367 997 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 368 997 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 369 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 370 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("e")); 371 : 372 997 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 373 997 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 374 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 375 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("es")); 376 : 377 997 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 378 997 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 379 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 380 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA8me")); 381 : 382 997 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 383 997 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 384 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 385 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA8mes")); 386 : 387 997 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 388 997 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 389 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 390 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA8me")); 391 : 392 997 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 393 997 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 394 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 395 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA8mes")); 396 : 397 997 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 398 997 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 399 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO); 400 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("i\xC3\xA8me")); 401 : 402 997 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 403 997 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 404 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO); 405 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("i\xC3\xA8mes")); 406 : 407 997 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 408 997 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 409 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO); 410 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("i\xC3\xA8me")); 411 : 412 997 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 413 997 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 414 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO); 415 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("i\xC3\xA8mes")); 416 : } 417 : } 418 3 : CATCH_END_SECTION() 419 3 : } 420 : 421 : 422 : 423 3 : CATCH_TEST_CASE("ordinal_indicator_provincial", "[ordinal_indicator]") 424 : { 425 3 : CATCH_START_SECTION("ordinal_indicator: 1r 1re") 426 : { 427 1 : snaplogger::ordinal_indicator ind; 428 : 429 1 : ind.language(snaplogger::language_t::LANGUAGE_FRANCOPROVENCAL); 430 : 431 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 432 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 433 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 434 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA9r")); 435 : 436 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 437 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 438 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 439 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA9r")); 440 : 441 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 442 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 443 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 444 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA9re")); 445 : 446 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 447 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 448 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 449 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA9re")); 450 : } 451 3 : CATCH_END_SECTION() 452 : 453 3 : CATCH_START_SECTION("ordinal_indicator: 2nd 2nda 2emo 2ema (second)") 454 : { 455 1 : snaplogger::ordinal_indicator ind; 456 : 457 1 : ind.language(snaplogger::language_t::LANGUAGE_FRANCOPROVENCAL); 458 : 459 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 460 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 461 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 462 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA9mo")); 463 : 464 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 465 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 466 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 467 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA9mo")); 468 : 469 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 470 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 471 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 472 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA9ma")); 473 : 474 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 475 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 476 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 477 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA9ma")); 478 : 479 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 480 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 481 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 482 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nd")); 483 : 484 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 485 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 486 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 487 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nd")); 488 : 489 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 490 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 491 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 492 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nda")); 493 : 494 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 495 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 496 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 497 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nda")); 498 : } 499 3 : CATCH_END_SECTION() 500 : 501 3 : CATCH_START_SECTION("ordinal_indicator: Nemo Nema") 502 : { 503 1 : snaplogger::ordinal_indicator ind; 504 : 505 1 : ind.language(snaplogger::language_t::LANGUAGE_FRANCOPROVENCAL); 506 : 507 998 : for(int n(3); n < 1'000; ++n) 508 : { 509 997 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 510 997 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 511 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 512 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA9mo")); 513 : 514 997 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 515 997 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 516 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 517 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA9mo")); 518 : 519 997 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 520 997 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 521 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 522 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA9ma")); 523 : 524 997 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 525 997 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 526 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 527 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA9ma")); 528 : } 529 : } 530 3 : CATCH_END_SECTION() 531 3 : } 532 : 533 : 534 : 535 1 : CATCH_TEST_CASE("ordinal_indicator_breton", "[ordinal_indicator]") 536 : { 537 1 : CATCH_START_SECTION("ordinal_indicator: 1an 2l 3de 4re 5vet") 538 : { 539 1 : snaplogger::ordinal_indicator ind; 540 : 541 1 : ind.language(snaplogger::language_t::LANGUAGE_BRETON); 542 : 543 1 : for(snaplogger::gender_t gender(snaplogger::gender_t::GENDER_MASCULINE); 544 4 : gender <= snaplogger::gender_t::GENDER_NEUTRAL; 545 3 : gender = static_cast<snaplogger::gender_t>(static_cast<int>(gender) + 1)) 546 : { 547 3 : for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR); 548 9 : number <= snaplogger::number_t::NUMBER_PLURAL; 549 6 : number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1)) 550 : { 551 6 : ind.gender(gender); 552 6 : ind.number(number); 553 : 554 6 : CATCH_REQUIRE(ind.indicator(1) == std::string("a\xC3\xB1")); 555 6 : CATCH_REQUIRE(ind.indicator(2) == std::string("l")); 556 6 : CATCH_REQUIRE(ind.indicator(3) == std::string("de")); 557 6 : CATCH_REQUIRE(ind.indicator(4) == std::string("re")); 558 : 559 5976 : for(int n(5); n < 1'000; ++n) 560 : { 561 5970 : CATCH_REQUIRE(ind.indicator(n) == std::string("vet")); 562 : } 563 : } 564 : } 565 : } 566 1 : CATCH_END_SECTION() 567 1 : } 568 : 569 : 570 3 : CATCH_TEST_CASE("ordinal_indicator_occitan", "[ordinal_indicator]") 571 : { 572 3 : CATCH_START_SECTION("ordinal_indicator: occitan: 1er 1era (first)") 573 : { 574 1 : snaplogger::ordinal_indicator ind; 575 : 576 1 : ind.language(snaplogger::language_t::LANGUAGE_OCCITAN); 577 : 578 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 579 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 580 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 581 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA8r")); 582 : 583 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 584 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 585 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 586 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA8r")); 587 : 588 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 589 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 590 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 591 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA8ra")); 592 : 593 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 594 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 595 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 596 1 : CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA8ra")); 597 : } 598 3 : CATCH_END_SECTION() 599 : 600 3 : CATCH_START_SECTION("ordinal_indicator: occitan: 2nd 2nda (second)") 601 : { 602 1 : snaplogger::ordinal_indicator ind; 603 : 604 1 : ind.language(snaplogger::language_t::LANGUAGE_OCCITAN); 605 : 606 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 607 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 608 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 609 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nd")); 610 : 611 1 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 612 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 613 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 614 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nd")); 615 : 616 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 617 1 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 618 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 619 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nda")); 620 : 621 1 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 622 1 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 623 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 624 1 : CATCH_REQUIRE(ind.indicator(2) == std::string("nda")); 625 : } 626 3 : CATCH_END_SECTION() 627 : 628 3 : CATCH_START_SECTION("ordinal_indicator: Nen Nena") 629 : { 630 1 : snaplogger::ordinal_indicator ind; 631 : 632 1 : ind.language(snaplogger::language_t::LANGUAGE_OCCITAN); 633 : 634 998 : for(int n(3); n < 1'000; ++n) 635 : { 636 997 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 637 997 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 638 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 639 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("en")); 640 : 641 997 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 642 997 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 643 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 644 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("en")); 645 : 646 997 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 647 997 : ind.number(snaplogger::number_t::NUMBER_SINGULAR); 648 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 649 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("ena")); 650 : 651 997 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 652 997 : ind.number(snaplogger::number_t::NUMBER_PLURAL); 653 997 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL); 654 997 : CATCH_REQUIRE(ind.indicator(n) == std::string("ena")); 655 : } 656 : } 657 3 : CATCH_END_SECTION() 658 3 : } 659 : 660 : 661 : 662 1 : CATCH_TEST_CASE("ordinal_indicator_russian", "[ordinal_indicator]") 663 : { 664 1 : CATCH_START_SECTION("ordinal_indicator: singular plural neutral in russian") 665 : { 666 1 : snaplogger::ordinal_indicator ind; 667 : 668 1 : ind.language(snaplogger::language_t::LANGUAGE_RUSSIAN); 669 : 670 1 : for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR); 671 3 : number <= snaplogger::number_t::NUMBER_PLURAL; 672 2 : number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1)) 673 : { 674 2 : ind.number(number); 675 : 676 2 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 677 22 : for(int n(1); n <= 10; ++n) 678 : { 679 20 : CATCH_REQUIRE(ind.indicator(n) == std::string("-\xD0\xB9")); 680 : } 681 : 682 2 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 683 22 : for(int n(1); n <= 10; ++n) 684 : { 685 20 : CATCH_REQUIRE(ind.indicator(n) == std::string("-\xD1\x8F")); 686 : } 687 : 688 2 : ind.gender(snaplogger::gender_t::GENDER_NEUTRAL); 689 22 : for(int n(1); n <= 10; ++n) 690 : { 691 20 : CATCH_REQUIRE(ind.indicator(n) == std::string("-\xD0\xB5")); 692 : } 693 : } 694 : } 695 1 : CATCH_END_SECTION() 696 1 : } 697 : 698 : 699 1 : CATCH_TEST_CASE("ordinal_indicator_period", "[ordinal_indicator]") 700 : { 701 1 : CATCH_START_SECTION("ordinal_indicator: languages using a period") 702 : { 703 1 : snaplogger::ordinal_indicator ind; 704 : 705 1 : snaplogger::language_t lang[] = { 706 : snaplogger::language_t::LANGUAGE_BASQUE, 707 : snaplogger::language_t::LANGUAGE_BOSNIAN, 708 : snaplogger::language_t::LANGUAGE_CROATIAN, 709 : snaplogger::language_t::LANGUAGE_CZECH, 710 : snaplogger::language_t::LANGUAGE_FAROESE, 711 : snaplogger::language_t::LANGUAGE_FINNISH, 712 : snaplogger::language_t::LANGUAGE_GERMAN, 713 : snaplogger::language_t::LANGUAGE_ICELANDIC, 714 : snaplogger::language_t::LANGUAGE_LATVIAN, 715 : snaplogger::language_t::LANGUAGE_MONTENEGRIN, 716 : snaplogger::language_t::LANGUAGE_NORWEGIAN, 717 : snaplogger::language_t::LANGUAGE_SERBIAN, 718 : snaplogger::language_t::LANGUAGE_SLOVAK, 719 : snaplogger::language_t::LANGUAGE_SLOVENE, 720 : snaplogger::language_t::LANGUAGE_TURKISH, 721 : }; 722 : 723 16 : for(auto l : lang) 724 : { 725 15 : ind.language(l); 726 : 727 15 : for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR); 728 45 : number <= snaplogger::number_t::NUMBER_PLURAL; 729 30 : number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1)) 730 : { 731 30 : for(snaplogger::gender_t gender(snaplogger::gender_t::GENDER_MASCULINE); 732 120 : gender <= snaplogger::gender_t::GENDER_NEUTRAL; 733 90 : gender = static_cast<snaplogger::gender_t>(static_cast<int>(gender) + 1)) 734 : { 735 90 : ind.number(number); 736 90 : ind.gender(gender); 737 : 738 90090 : for(int n(1); n <= 1'000; ++n) 739 : { 740 90000 : CATCH_REQUIRE(ind.indicator(n) == std::string(".")); 741 : } 742 : } 743 : } 744 : } 745 : } 746 1 : CATCH_END_SECTION() 747 1 : } 748 : 749 : 750 2 : CATCH_TEST_CASE("ordinal_indicator_other_latin", "[ordinal_indicator]") 751 : { 752 2 : CATCH_START_SECTION("ordinal_indicator: other latin languages") 753 : { 754 1 : snaplogger::ordinal_indicator ind; 755 : 756 1 : snaplogger::language_t lang[] = { 757 : snaplogger::language_t::LANGUAGE_SPANISH, 758 : snaplogger::language_t::LANGUAGE_PORTUGUESE, 759 : snaplogger::language_t::LANGUAGE_ITALIAN, 760 : snaplogger::language_t::LANGUAGE_GALICIAN, 761 : }; 762 : 763 5 : for(auto l : lang) 764 : { 765 4 : ind.language(l); 766 : 767 4 : for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR); 768 12 : number <= snaplogger::number_t::NUMBER_PLURAL; 769 8 : number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1)) 770 : { 771 8 : ind.number(number); 772 : 773 8 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 774 88 : for(int n(1); n <= 10; ++n) 775 : { 776 80 : CATCH_REQUIRE(ind.indicator(n) == std::string("\xC2\xBA")); 777 : } 778 : 779 8 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 780 88 : for(int n(1); n <= 10; ++n) 781 : { 782 80 : CATCH_REQUIRE(ind.indicator(n) == std::string("\xC2\xAA")); 783 : } 784 : 785 8 : ind.gender(snaplogger::gender_t::GENDER_NEUTRAL); 786 88 : for(int n(1); n <= 10; ++n) 787 : { 788 80 : CATCH_REQUIRE(ind.indicator(n) == std::string()); 789 : } 790 : } 791 : } 792 : } 793 2 : CATCH_END_SECTION() 794 : 795 2 : CATCH_START_SECTION("ordinal_indicator: spanish/portuguese secondary") 796 : { 797 1 : snaplogger::ordinal_indicator ind; 798 : 799 1 : ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE); 800 : 801 1 : snaplogger::language_t lang[] = { 802 : snaplogger::language_t::LANGUAGE_SPANISH, 803 : snaplogger::language_t::LANGUAGE_PORTUGUESE, 804 : }; 805 : 806 3 : for(auto l : lang) 807 : { 808 2 : ind.language(l); 809 : 810 2 : for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR); 811 6 : number <= snaplogger::number_t::NUMBER_PLURAL; 812 4 : number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1)) 813 : { 814 4 : ind.number(number); 815 : 816 4 : ind.gender(snaplogger::gender_t::GENDER_MASCULINE); 817 44 : for(int n(1); n <= 10; ++n) 818 : { 819 40 : CATCH_REQUIRE(ind.indicator(n) == std::string(".\xC2\xBA")); 820 : } 821 : 822 4 : ind.gender(snaplogger::gender_t::GENDER_FEMININE); 823 44 : for(int n(1); n <= 10; ++n) 824 : { 825 40 : CATCH_REQUIRE(ind.indicator(n) == std::string(".\xC2\xAA")); 826 : } 827 : 828 4 : ind.gender(snaplogger::gender_t::GENDER_NEUTRAL); 829 44 : for(int n(1); n <= 10; ++n) 830 : { 831 40 : CATCH_REQUIRE(ind.indicator(n) == std::string()); 832 : } 833 : } 834 : } 835 : } 836 2 : CATCH_END_SECTION() 837 2 : } 838 : 839 : 840 1 : CATCH_TEST_CASE("ordinal_indicator_error", "[ordinal_indicator][error]") 841 : { 842 1 : CATCH_START_SECTION("ordinal_indicator: negative and zero return an empty string") 843 : { 844 1 : snaplogger::ordinal_indicator ind; 845 : 846 1002 : for(int n(-1'000); n <= 0; ++n) 847 : { 848 1001 : CATCH_REQUIRE(ind.indicator(n) == std::string()); 849 : } 850 : } 851 1 : CATCH_END_SECTION() 852 1 : } 853 : 854 : 855 : 856 : 857 : // vim: ts=4 sw=4 et