LCOV - code coverage report
Current view: top level - tests - catch_ordinal_indicator.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 508 508
Test Date: 2025-07-04 17:06:38 Functions: 100.0 % 10 10
Legend: Lines: hit not hit

            Line data    Source code
       1              : // Copyright (c) 2006-2025  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
      26              : //
      27              : #include    <snaplogger/ordinal_indicator.h>
      28              : 
      29              : 
      30              : // C
      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            3 :         CATCH_REQUIRE(ind.indicator(1) == std::string("st"));
      96            3 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nd"));
      97            3 :         CATCH_REQUIRE(ind.indicator(3) == std::string("rd"));
      98           18 :         for(int n(4); n <= 20; ++n)
      99              :         {
     100           51 :             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            3 :         CATCH_REQUIRE(ind.indicator(11) == std::string("th"));
     112            3 :         CATCH_REQUIRE(ind.indicator(111) == std::string("th"));
     113            3 :         CATCH_REQUIRE(ind.indicator(37'511) == std::string("th"));
     114              : 
     115            3 :         CATCH_REQUIRE(ind.indicator(12) == std::string("th"));
     116            3 :         CATCH_REQUIRE(ind.indicator(112) == std::string("th"));
     117              : 
     118            3 :         CATCH_REQUIRE(ind.indicator(13) == std::string("th"));
     119            3 :         CATCH_REQUIRE(ind.indicator(513) == std::string("th"));
     120            3 :         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           18 :                 CATCH_REQUIRE(ind.indicator(1) == std::string("st"));
     141           18 :                 CATCH_REQUIRE(ind.indicator(2) == std::string("nd"));
     142           18 :                 CATCH_REQUIRE(ind.indicator(3) == std::string("rd"));
     143          108 :                 for(int n(4); n <= 20; ++n)
     144              :                 {
     145          306 :                     CATCH_REQUIRE(ind.indicator(n) == std::string("th"));
     146              :                 }
     147              : 
     148              :                 // and a few of the special cases
     149              :                 //
     150           18 :                 CATCH_REQUIRE(ind.indicator(11) == std::string("th"));
     151           18 :                 CATCH_REQUIRE(ind.indicator(112) == std::string("th"));
     152           18 :                 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           18 :                         CATCH_REQUIRE(ind.indicator(2) == std::string("d"));
     185           18 :                         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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         2991 :             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         2991 :             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         2991 :             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         2991 :             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         2991 :             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         2991 :             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         2991 :             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         2991 :             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         2991 :             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         2991 :             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         2991 :             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         2991 :             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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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         2991 :             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         2991 :             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         2991 :             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         2991 :             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           18 :                 CATCH_REQUIRE(ind.indicator(1) == std::string("a\xC3\xB1"));
     555           18 :                 CATCH_REQUIRE(ind.indicator(2) == std::string("l"));
     556           18 :                 CATCH_REQUIRE(ind.indicator(3) == std::string("de"));
     557           18 :                 CATCH_REQUIRE(ind.indicator(4) == std::string("re"));
     558              : 
     559         5976 :                 for(int n(5); n < 1'000; ++n)
     560              :                 {
     561        17910 :                     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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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            3 :         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         2991 :             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         2991 :             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         2991 :             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         2991 :             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           60 :                 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           60 :                 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           60 :                 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       270000 :                         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          240 :                     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          240 :                     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          120 :                     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          120 :                     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
        

Generated by: LCOV version 2.0-1

Snap C++ | List of projects | List of versions