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

Generated by: LCOV version 2.0-1

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