LLVMFuzzerTestOneInput:
   14|    493|extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   15|    493|    FuzzedDataProvider fdp(data, size);
   16|    493|    constexpr int kMaxString = 100;
   17|    493|    try {
   18|    493|        (void)QuantLib::DateParser::parseFormatted(fdp.ConsumeRandomLengthString(kMaxString), "%Y-%m-%d");
   19|    493|        (void)QuantLib::DateParser::parseISO(fdp.ConsumeRandomLengthString(kMaxString));
   20|    493|    } catch (const std::exception& e) {
   21|       |        // Handle or ignore exceptions
   22|    481|    }
   23|    493|    return 0;
   24|    493|}

_ZN8QuantLib5ErrorC2ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEElS9_S9_:
   95|    478|                 const std::string& message) {
   96|    478|        message_ = ext::make_shared<std::string>(
   97|    478|            format_error(file, line, function, message));
   98|    478|    }
errors.cpp:_ZN12_GLOBAL__N_112format_errorERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEElS8_S8_:
   54|    478|                             const std::string& message) {
   55|    478|        std::ostringstream msg;
   56|       |        #ifdef QL_ERROR_LINES
   57|       |        msg << "\n" << file << ":" << line << ": ";
   58|       |        #endif
   59|       |        #ifdef QL_ERROR_FUNCTIONS
   60|       |        if (function != "(unknown)")
   61|       |            msg << "In function `" << function << "': \n";
   62|       |        #endif
   63|    478|        msg << message;
   64|    478|        return msg.str();
   65|    478|    }

_ZN8QuantLib28CumulativeNormalDistributionC2Edd:
  289|      8|    : average_(average), sigma_(sigma) {
  290|       |
  291|      8|        QL_REQUIRE(sigma_>0.0,
  ------------------
  |  |  117|      8|#define QL_REQUIRE(condition,message) \
  |  |  ------------------
  |  |  |  |   73|      8|#define QL_MULTILINE_ASSERTION_BEGIN do {
  |  |  ------------------
  |  |  118|      8|QL_MULTILINE_ASSERTION_BEGIN \
  |  |  119|      8|if (!(condition)) { \
  |  |  ------------------
  |  |  |  Branch (119:5): [True: 0, False: 8]
  |  |  ------------------
  |  |  120|      0|    std::ostringstream _ql_msg_stream; \
  |  |  121|      0|    _ql_msg_stream << message; \
  |  |  122|      0|    throw QuantLib::Error(__FILE__,__LINE__, \
  |  |  123|      0|                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
  |  |  124|      8|} \
  |  |  ------------------
  |  |  |  |   85|      8|    #define QL_MULTILINE_ASSERTION_END } while(false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|      8|QL_MULTILINE_ASSERTION_END
  ------------------
  292|      8|                   "sigma must be greater than 0.0 ("
  293|      8|                   << sigma_ << " not allowed)");
  294|      8|    }
_ZN8QuantLib18NormalDistributionC2Edd:
  264|     10|    : average_(average), sigma_(sigma) {
  265|       |
  266|     10|        QL_REQUIRE(sigma_>0.0,
  ------------------
  |  |  117|     10|#define QL_REQUIRE(condition,message) \
  |  |  ------------------
  |  |  |  |   73|     10|#define QL_MULTILINE_ASSERTION_BEGIN do {
  |  |  ------------------
  |  |  118|     10|QL_MULTILINE_ASSERTION_BEGIN \
  |  |  119|     10|if (!(condition)) { \
  |  |  ------------------
  |  |  |  Branch (119:5): [True: 0, False: 10]
  |  |  ------------------
  |  |  120|      0|    std::ostringstream _ql_msg_stream; \
  |  |  121|      0|    _ql_msg_stream << message; \
  |  |  122|      0|    throw QuantLib::Error(__FILE__,__LINE__, \
  |  |  123|      0|                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
  |  |  124|     10|} \
  |  |  ------------------
  |  |  |  |   85|     10|    #define QL_MULTILINE_ASSERTION_END } while(false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|     10|QL_MULTILINE_ASSERTION_END
  ------------------
  267|     10|                   "sigma must be greater than 0.0 ("
  268|     10|                   << sigma_ << " not allowed)");
  269|       |
  270|     10|        normalizationFactor_ = M_SQRT_2*M_1_SQRTPI/sigma_;
  ------------------
  |  |   98|     10|    #define M_SQRT_2    0.7071067811865475244008443621048490392848359376887
  ------------------
                      normalizationFactor_ = M_SQRT_2*M_1_SQRTPI/sigma_;
  ------------------
  |  |   86|     10|    #define M_1_SQRTPI  0.564189583547756286948
  ------------------
  271|     10|        derNormalizationFactor_ = sigma_*sigma_;
  272|     10|        denominator_ = 2.0*derNormalizationFactor_;
  273|     10|    }

_ZN8QuantLib4DateC2Ev:
   59|    672|    : serialNumber_(Date::serial_type(0)) {}
_ZN8QuantLib4DateC2El:
   62|    895|    : serialNumber_(serialNumber) {
   63|    895|        checkSerialNumber(serialNumber);
   64|    895|    }
_ZN8QuantLib4DateC2EiNS_5MonthEi:
   66|    558|    Date::Date(Day d, Month m, Year y) {
   67|    558|        QL_REQUIRE(y > 1900 && y < 2200,
  ------------------
  |  |  117|    558|#define QL_REQUIRE(condition,message) \
  |  |  ------------------
  |  |  |  |   73|    558|#define QL_MULTILINE_ASSERTION_BEGIN do {
  |  |  ------------------
  |  |  118|    558|QL_MULTILINE_ASSERTION_BEGIN \
  |  |  119|  1.09k|if (!(condition)) { \
  |  |  ------------------
  |  |  |  Branch (119:7): [True: 537, False: 21]
  |  |  |  Branch (119:7): [True: 533, False: 4]
  |  |  ------------------
  |  |  120|     25|    std::ostringstream _ql_msg_stream; \
  |  |  121|     25|    _ql_msg_stream << message; \
  |  |  122|     25|    throw QuantLib::Error(__FILE__,__LINE__, \
  |  |  123|     25|                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
  |  |  124|    558|} \
  |  |  ------------------
  |  |  |  |   85|    558|    #define QL_MULTILINE_ASSERTION_END } while(false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|    558|QL_MULTILINE_ASSERTION_END
  ------------------
   68|    533|                   "year " << y << " out of bound. It must be in [1901,2199]");
   69|    558|        QL_REQUIRE(Integer(m) > 0 && Integer(m) < 13,
  ------------------
  |  |  117|    533|#define QL_REQUIRE(condition,message) \
  |  |  ------------------
  |  |  |  |   73|    533|#define QL_MULTILINE_ASSERTION_BEGIN do {
  |  |  ------------------
  |  |  118|  1.06k|QL_MULTILINE_ASSERTION_BEGIN \
  |  |  119|  1.06k|if (!(condition)) { \
  |  |  ------------------
  |  |  |  Branch (119:7): [True: 527, False: 6]
  |  |  |  Branch (119:7): [True: 521, False: 6]
  |  |  ------------------
  |  |  120|     12|    std::ostringstream _ql_msg_stream; \
  |  |  121|     12|    _ql_msg_stream << message; \
  |  |  122|     12|    throw QuantLib::Error(__FILE__,__LINE__, \
  |  |  123|     12|                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
  |  |  124|    533|} \
  |  |  ------------------
  |  |  |  |   85|    533|    #define QL_MULTILINE_ASSERTION_END } while(false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|    533|QL_MULTILINE_ASSERTION_END
  ------------------
   70|    521|                   "month " << Integer(m)
   71|    521|                   << " outside January-December range [1,12]");
   72|       |
   73|    521|        bool leap = isLeap(y);
   74|    521|        Day len = monthLength(m,leap), offset = monthOffset(m,leap);
   75|    521|        QL_REQUIRE(d <= len && d > 0,
  ------------------
  |  |  117|    521|#define QL_REQUIRE(condition,message) \
  |  |  ------------------
  |  |  |  |   73|    521|#define QL_MULTILINE_ASSERTION_BEGIN do {
  |  |  ------------------
  |  |  118|    521|QL_MULTILINE_ASSERTION_BEGIN \
  |  |  119|  1.03k|if (!(condition)) { \
  |  |  ------------------
  |  |  |  Branch (119:7): [True: 515, False: 6]
  |  |  |  Branch (119:7): [True: 505, False: 10]
  |  |  ------------------
  |  |  120|     16|    std::ostringstream _ql_msg_stream; \
  |  |  121|     16|    _ql_msg_stream << message; \
  |  |  122|     16|    throw QuantLib::Error(__FILE__,__LINE__, \
  |  |  123|     16|                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
  |  |  124|    521|} \
  |  |  ------------------
  |  |  |  |   85|    521|    #define QL_MULTILINE_ASSERTION_END } while(false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|    521|QL_MULTILINE_ASSERTION_END
  ------------------
   76|    505|                   "day outside month (" << Integer(m) << ") day-range "
   77|    505|                   << "[1," << len << "]");
   78|       |
   79|    505|        serialNumber_ = d + offset + yearOffset(y);
   80|    505|    }
_ZNK8QuantLib4Date5monthEv:
   82|  1.34k|    Month Date::month() const {
   83|  1.34k|        Day d = dayOfYear(); // dayOfYear is 1 based
   84|  1.34k|        Integer m = d/30 + 1;
   85|  1.34k|        bool leap = isLeap(year());
   86|  2.01k|        while (d <= monthOffset(Month(m),leap))
  ------------------
  |  Branch (86:16): [True: 670, False: 1.34k]
  ------------------
   87|    670|            --m;
   88|  1.34k|        while (d > monthOffset(Month(m+1),leap)) // NOLINT(misc-misplaced-widening-cast)
  ------------------
  |  Branch (88:16): [True: 0, False: 1.34k]
  ------------------
   89|      0|            ++m;
   90|  1.34k|        return Month(m);
   91|  1.34k|    }
_ZNK8QuantLib4Date4yearEv:
   93|  4.69k|    Year Date::year() const {
   94|  4.69k|        Year y = (serialNumber_ / 365)+1900;
   95|       |        // yearOffset(y) is December 31st of the preceding year
   96|  4.69k|        if (serialNumber_ <= yearOffset(y))
  ------------------
  |  Branch (96:13): [True: 2.34k, False: 2.34k]
  ------------------
   97|  2.34k|            --y;
   98|  4.69k|        return y;
   99|  4.69k|    }
_ZN8QuantLib4Date6isLeapEi:
  187|  2.53k|    bool Date::isLeap(Year y) {
  188|  2.53k|        static const bool YearIsLeap[] = {
  189|       |            // 1900 is leap in agreement with Excel's bug
  190|       |            // 1900 is out of valid date range anyway
  191|       |            // 1900-1909
  192|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  193|       |            // 1910-1919
  194|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  195|       |            // 1920-1929
  196|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  197|       |            // 1930-1939
  198|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  199|       |            // 1940-1949
  200|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  201|       |            // 1950-1959
  202|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  203|       |            // 1960-1969
  204|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  205|       |            // 1970-1979
  206|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  207|       |            // 1980-1989
  208|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  209|       |            // 1990-1999
  210|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  211|       |            // 2000-2009
  212|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  213|       |            // 2010-2019
  214|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  215|       |            // 2020-2029
  216|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  217|       |            // 2030-2039
  218|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  219|       |            // 2040-2049
  220|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  221|       |            // 2050-2059
  222|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  223|       |            // 2060-2069
  224|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  225|       |            // 2070-2079
  226|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  227|       |            // 2080-2089
  228|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  229|       |            // 2090-2099
  230|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  231|       |            // 2100-2109
  232|  2.53k|            false,false,false,false, true,false,false,false, true,false,
  233|       |            // 2110-2119
  234|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  235|       |            // 2120-2129
  236|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  237|       |            // 2130-2139
  238|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  239|       |            // 2140-2149
  240|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  241|       |            // 2150-2159
  242|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  243|       |            // 2160-2169
  244|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  245|       |            // 2170-2179
  246|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  247|       |            // 2180-2189
  248|  2.53k|             true,false,false,false, true,false,false,false, true,false,
  249|       |            // 2190-2199
  250|  2.53k|            false,false, true,false,false,false, true,false,false,false,
  251|       |            // 2200
  252|  2.53k|            false
  253|  2.53k|        };
  254|  2.53k|        QL_REQUIRE(y>=1900 && y<=2200, "year outside valid range");
  ------------------
  |  |  117|  2.53k|#define QL_REQUIRE(condition,message) \
  |  |  ------------------
  |  |  |  |   73|  2.53k|#define QL_MULTILINE_ASSERTION_BEGIN do {
  |  |  ------------------
  |  |  118|  2.53k|QL_MULTILINE_ASSERTION_BEGIN \
  |  |  119|  5.06k|if (!(condition)) { \
  |  |  ------------------
  |  |  |  Branch (119:7): [True: 2.53k, False: 0]
  |  |  |  Branch (119:7): [True: 2.53k, False: 0]
  |  |  ------------------
  |  |  120|      0|    std::ostringstream _ql_msg_stream; \
  |  |  121|      0|    _ql_msg_stream << message; \
  |  |  122|      0|    throw QuantLib::Error(__FILE__,__LINE__, \
  |  |  123|      0|                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
  |  |  124|  2.53k|} \
  |  |  ------------------
  |  |  |  |   85|  2.53k|    #define QL_MULTILINE_ASSERTION_END } while(false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|  2.53k|QL_MULTILINE_ASSERTION_END
  ------------------
  255|  2.53k|        return YearIsLeap[y-1900];
  256|  2.53k|    }
_ZN8QuantLib4Date11monthLengthENS_5MonthEb:
  259|    521|    Integer Date::monthLength(Month m, bool leapYear) {
  260|    521|        static const Integer MonthLength[] = {
  261|    521|            31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  262|    521|        };
  263|    521|        static const Integer MonthLeapLength[] = {
  264|    521|            31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  265|    521|        };
  266|    521|        return (leapYear? MonthLeapLength[m-1] : MonthLength[m-1]);
  ------------------
  |  Branch (266:17): [True: 6, False: 515]
  ------------------
  267|    521|    }
_ZN8QuantLib4Date11monthOffsetENS_5MonthEb:
  269|  4.54k|    Integer Date::monthOffset(Month m, bool leapYear) {
  270|  4.54k|        static const Integer MonthOffset[] = {
  271|  4.54k|              0,  31,  59,  90, 120, 151,   // Jan - Jun
  272|  4.54k|            181, 212, 243, 273, 304, 334,   // Jun - Dec
  273|  4.54k|            365     // used in dayOfMonth to bracket day
  274|  4.54k|        };
  275|  4.54k|        static const Integer MonthLeapOffset[] = {
  276|  4.54k|              0,  31,  60,  91, 121, 152,   // Jan - Jun
  277|  4.54k|            182, 213, 244, 274, 305, 335,   // Jun - Dec
  278|  4.54k|            366     // used in dayOfMonth to bracket day
  279|  4.54k|        };
  280|  4.54k|        return (leapYear? MonthLeapOffset[m-1] : MonthOffset[m-1]);
  ------------------
  |  Branch (280:17): [True: 6, False: 4.53k]
  ------------------
  281|  4.54k|    }
_ZN8QuantLib4Date10yearOffsetEi:
  283|  7.20k|    Date::serial_type Date::yearOffset(Year y) {
  284|       |        // the list of all December 31st in the preceding year
  285|       |        // e.g. for 1901 yearOffset[1] is 366, that is, December 31 1900
  286|  7.20k|        static const Date::serial_type YearOffset[] = {
  287|       |            // 1900-1909
  288|  7.20k|                0,  366,  731, 1096, 1461, 1827, 2192, 2557, 2922, 3288,
  289|       |            // 1910-1919
  290|  7.20k|             3653, 4018, 4383, 4749, 5114, 5479, 5844, 6210, 6575, 6940,
  291|       |            // 1920-1929
  292|  7.20k|             7305, 7671, 8036, 8401, 8766, 9132, 9497, 9862,10227,10593,
  293|       |            // 1930-1939
  294|  7.20k|            10958,11323,11688,12054,12419,12784,13149,13515,13880,14245,
  295|       |            // 1940-1949
  296|  7.20k|            14610,14976,15341,15706,16071,16437,16802,17167,17532,17898,
  297|       |            // 1950-1959
  298|  7.20k|            18263,18628,18993,19359,19724,20089,20454,20820,21185,21550,
  299|       |            // 1960-1969
  300|  7.20k|            21915,22281,22646,23011,23376,23742,24107,24472,24837,25203,
  301|       |            // 1970-1979
  302|  7.20k|            25568,25933,26298,26664,27029,27394,27759,28125,28490,28855,
  303|       |            // 1980-1989
  304|  7.20k|            29220,29586,29951,30316,30681,31047,31412,31777,32142,32508,
  305|       |            // 1990-1999
  306|  7.20k|            32873,33238,33603,33969,34334,34699,35064,35430,35795,36160,
  307|       |            // 2000-2009
  308|  7.20k|            36525,36891,37256,37621,37986,38352,38717,39082,39447,39813,
  309|       |            // 2010-2019
  310|  7.20k|            40178,40543,40908,41274,41639,42004,42369,42735,43100,43465,
  311|       |            // 2020-2029
  312|  7.20k|            43830,44196,44561,44926,45291,45657,46022,46387,46752,47118,
  313|       |            // 2030-2039
  314|  7.20k|            47483,47848,48213,48579,48944,49309,49674,50040,50405,50770,
  315|       |            // 2040-2049
  316|  7.20k|            51135,51501,51866,52231,52596,52962,53327,53692,54057,54423,
  317|       |            // 2050-2059
  318|  7.20k|            54788,55153,55518,55884,56249,56614,56979,57345,57710,58075,
  319|       |            // 2060-2069
  320|  7.20k|            58440,58806,59171,59536,59901,60267,60632,60997,61362,61728,
  321|       |            // 2070-2079
  322|  7.20k|            62093,62458,62823,63189,63554,63919,64284,64650,65015,65380,
  323|       |            // 2080-2089
  324|  7.20k|            65745,66111,66476,66841,67206,67572,67937,68302,68667,69033,
  325|       |            // 2090-2099
  326|  7.20k|            69398,69763,70128,70494,70859,71224,71589,71955,72320,72685,
  327|       |            // 2100-2109
  328|  7.20k|            73050,73415,73780,74145,74510,74876,75241,75606,75971,76337,
  329|       |            // 2110-2119
  330|  7.20k|            76702,77067,77432,77798,78163,78528,78893,79259,79624,79989,
  331|       |            // 2120-2129
  332|  7.20k|            80354,80720,81085,81450,81815,82181,82546,82911,83276,83642,
  333|       |            // 2130-2139
  334|  7.20k|            84007,84372,84737,85103,85468,85833,86198,86564,86929,87294,
  335|       |            // 2140-2149
  336|  7.20k|            87659,88025,88390,88755,89120,89486,89851,90216,90581,90947,
  337|       |            // 2150-2159
  338|  7.20k|            91312,91677,92042,92408,92773,93138,93503,93869,94234,94599,
  339|       |            // 2160-2169
  340|  7.20k|            94964,95330,95695,96060,96425,96791,97156,97521,97886,98252,
  341|       |            // 2170-2179
  342|  7.20k|            98617,98982,99347,99713,100078,100443,100808,101174,101539,101904,
  343|       |            // 2180-2189
  344|  7.20k|            102269,102635,103000,103365,103730,104096,104461,104826,105191,105557,
  345|       |            // 2190-2199
  346|  7.20k|            105922,106287,106652,107018,107383,107748,108113,108479,108844,109209,
  347|       |            // 2200
  348|  7.20k|            109574
  349|  7.20k|        };
  350|  7.20k|        return YearOffset[y-1900];
  351|  7.20k|    }
_ZN8QuantLib4Date19minimumSerialNumberEv:
  749|  1.23k|    Date::serial_type Date::minimumSerialNumber() {
  750|  1.23k|        return 367;       // Jan 1st, 1901
  751|  1.23k|    }
_ZN8QuantLib4Date19maximumSerialNumberEv:
  753|    968|    Date::serial_type Date::maximumSerialNumber() {
  754|    968|        return 109574;    // Dec 31st, 2199
  755|    968|    }
_ZN8QuantLib4Date17checkSerialNumberEl:
  757|    895|    void Date::checkSerialNumber(Date::serial_type serialNumber) {
  758|    895|        QL_REQUIRE(serialNumber >= minimumSerialNumber() &&
  ------------------
  |  |  117|    895|#define QL_REQUIRE(condition,message) \
  |  |  ------------------
  |  |  |  |   73|    895|#define QL_MULTILINE_ASSERTION_BEGIN do {
  |  |  ------------------
  |  |  118|    895|QL_MULTILINE_ASSERTION_BEGIN \
  |  |  119|  1.52k|if (!(condition)) { \
  |  |  ------------------
  |  |  |  Branch (119:7): [True: 632, False: 263]
  |  |  |  Branch (119:7): [True: 560, False: 72]
  |  |  ------------------
  |  |  120|    335|    std::ostringstream _ql_msg_stream; \
  |  |  121|    335|    _ql_msg_stream << message; \
  |  |  122|    335|    throw QuantLib::Error(__FILE__,__LINE__, \
  |  |  123|    335|                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
  |  |  124|    895|} \
  |  |  ------------------
  |  |  |  |   85|    895|    #define QL_MULTILINE_ASSERTION_END } while(false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|    895|QL_MULTILINE_ASSERTION_END
  ------------------
  759|    895|                   serialNumber <= maximumSerialNumber(),
  760|    895|                   "Date's serial number (" << serialNumber << ") outside "
  761|    895|                   "allowed range [" << minimumSerialNumber() <<
  762|    895|                   "-" << maximumSerialNumber() << "], i.e. [" <<
  763|    895|                   minDate() << "-" << maxDate() << "]");
  764|    895|    }
_ZN8QuantLib4Date7minDateEv:
  766|    335|    Date Date::minDate() {
  767|    335|        static const Date minimumDate(minimumSerialNumber());
  768|    335|        return minimumDate;
  769|    335|    }
_ZN8QuantLib4Date7maxDateEv:
  771|    335|    Date Date::maxDate() {
  772|    335|        static const Date maximumDate(maximumSerialNumber());
  773|    335|        return maximumDate;
  774|    335|    }
_ZN8QuantLiblsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEENS_5MonthE:
  815|    670|    std::ostream& operator<<(std::ostream& out, Month m) {
  816|    670|        switch (m) {
  817|    335|          case January:
  ------------------
  |  Branch (817:11): [True: 335, False: 335]
  ------------------
  818|    335|            return out << "January";
  819|      0|          case February:
  ------------------
  |  Branch (819:11): [True: 0, False: 670]
  ------------------
  820|      0|            return out << "February";
  821|      0|          case March:
  ------------------
  |  Branch (821:11): [True: 0, False: 670]
  ------------------
  822|      0|            return out << "March";
  823|      0|          case April:
  ------------------
  |  Branch (823:11): [True: 0, False: 670]
  ------------------
  824|      0|            return out << "April";
  825|      0|          case May:
  ------------------
  |  Branch (825:11): [True: 0, False: 670]
  ------------------
  826|      0|            return out << "May";
  827|      0|          case June:
  ------------------
  |  Branch (827:11): [True: 0, False: 670]
  ------------------
  828|      0|            return out << "June";
  829|      0|          case July:
  ------------------
  |  Branch (829:11): [True: 0, False: 670]
  ------------------
  830|      0|            return out << "July";
  831|      0|          case August:
  ------------------
  |  Branch (831:11): [True: 0, False: 670]
  ------------------
  832|      0|            return out << "August";
  833|      0|          case September:
  ------------------
  |  Branch (833:11): [True: 0, False: 670]
  ------------------
  834|      0|            return out << "September";
  835|      0|          case October:
  ------------------
  |  Branch (835:11): [True: 0, False: 670]
  ------------------
  836|      0|            return out << "October";
  837|      0|          case November:
  ------------------
  |  Branch (837:11): [True: 0, False: 670]
  ------------------
  838|      0|            return out << "November";
  839|    335|          case December:
  ------------------
  |  Branch (839:11): [True: 335, False: 335]
  ------------------
  840|    335|            return out << "December";
  841|      0|          default:
  ------------------
  |  Branch (841:11): [True: 0, False: 670]
  ------------------
  842|      0|            QL_FAIL("unknown month (" << Integer(m) << ")");
  ------------------
  |  |   92|      0|#define QL_FAIL(message) \
  |  |  ------------------
  |  |  |  |   57|      0|#define QL_MULTILINE_FAILURE_BEGIN do {
  |  |  ------------------
  |  |   93|      0|QL_MULTILINE_FAILURE_BEGIN \
  |  |   94|      0|    std::ostringstream _ql_msg_stream; \
  |  |   95|      0|    _ql_msg_stream << message; \
  |  |   96|      0|    throw QuantLib::Error(__FILE__,__LINE__, \
  |  |   97|      0|                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
  |  |  ------------------
  |  |  |  |   69|      0|    #define QL_MULTILINE_FAILURE_END } while(false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:46): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|      0|QL_MULTILINE_FAILURE_END
  ------------------
  843|    670|        }
  844|    670|    }
_ZN8QuantLiblsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_4DateE:
  859|    670|    std::ostream& operator<<(std::ostream& out, const Date& d) {
  860|    670|        return out << io::long_date(d);
  861|    670|    }
_ZN8QuantLib6detaillsERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEERKNS0_16long_date_holderE:
  913|    670|                                 const long_date_holder& holder) {
  914|    670|            const Date& d = holder.d;
  915|    670|            if (d == Date()) {
  ------------------
  |  Branch (915:17): [True: 0, False: 670]
  ------------------
  916|      0|                out << "null date";
  917|    670|            } else {
  918|    670|                FormatResetter resetter(out);
  919|    670|                out << d.month() << " ";
  920|    670|                out << io::ordinal(d.dayOfMonth()) << ", ";
  921|    670|                out << d.year();
  922|    670|            }
  923|    670|            return out;
  924|    670|        }
_ZN8QuantLib2io9long_dateERKNS_4DateE:
  987|    670|        detail::long_date_holder long_date(const Date& d) {
  988|    670|            return detail::long_date_holder(d);
  989|    670|        }
_ZN8QuantLib6detail14FormatResetterC2ERNSt3__113basic_ostreamIcNS2_11char_traitsIcEEEE:
  873|    670|                : out_(&out), flags_(out.flags()), filler_(out.fill()),
  874|    670|                  loc_(out.getloc()) {
  875|    670|                std::locale loc (out.getloc(),new nopunct);
  876|    670|                out.imbue(loc);
  877|    670|                out << std::resetiosflags(
  878|    670|                    std::ios_base::adjustfield | std::ios_base::basefield |
  879|    670|                    std::ios_base::floatfield | std::ios_base::showbase |
  880|    670|                    std::ios_base::showpos | std::ios_base::uppercase);
  881|    670|                out << std::right;
  882|    670|            }
_ZNK8QuantLib6detail14FormatResetter7nopunct11do_groupingEv:
  870|  1.34k|                std::string do_grouping() const override { return ""; }
_ZN8QuantLib6detail14FormatResetterD2Ev:
  883|    670|            ~FormatResetter() {
  884|    670|                out_->flags(flags_);
  885|    670|                out_->fill(filler_);
  886|    670|                out_->imbue(loc_);
  887|    670|            }

_ZNK8QuantLib4Date12serialNumberEv:
  404|  2.13k|    inline Date::serial_type Date::serialNumber() const {
  405|  2.13k|        return serialNumber_;
  406|  2.13k|    }
_ZN8QuantLibltERKNS_4DateES2_:
  450|    398|    inline bool operator<(const Date& d1, const Date& d2) {
  451|    398|        return (d1.serialNumber() < d2.serialNumber());
  452|    398|    }
_ZN8QuantLibeqERKNS_4DateES2_:
  442|    670|    inline bool operator==(const Date& d1, const Date& d2) {
  443|    670|        return (d1.serialNumber() == d2.serialNumber());
  444|    670|    }
_ZN8QuantLib6detail16long_date_holderC2ERKNS_4DateE:
  322|    670|            explicit long_date_holder(const Date& d) : d(d) {}
_ZNK8QuantLib4Date10dayOfMonthEv:
  396|    670|    inline Day Date::dayOfMonth() const {
  397|    670|        return dayOfYear() - monthOffset(month(),isLeap(year()));
  398|    670|    }
_ZNK8QuantLib4Date9dayOfYearEv:
  400|  2.01k|    inline Day Date::dayOfYear() const {
  401|  2.01k|        return serialNumber_ - yearOffset(year());
  402|  2.01k|    }
_ZNK8QuantLib4DateplEl:
  408|    493|    inline Date Date::operator+(Date::serial_type days) const {
  409|    493|        return Date(serialNumber_+days);
  410|    493|    }

_ZN8QuantLib10DayCounterC2EN5boost10shared_ptrINS0_4ImplEEE:
   65|      2|        explicit DayCounter(ext::shared_ptr<Impl> impl) : impl_(std::move(impl)) {}

_ZN8QuantLib9Thirty36014implementationENS0_10ConventionERKNS_4DateE:
   35|      2|    Thirty360::implementation(Thirty360::Convention c, const Date& terminationDate) {
   36|      2|        switch (c) {
   37|      0|          case USA:
  ------------------
  |  Branch (37:11): [True: 0, False: 2]
  ------------------
   38|      0|            return ext::shared_ptr<DayCounter::Impl>(new US_Impl);
   39|      0|          case European:
  ------------------
  |  Branch (39:11): [True: 0, False: 2]
  ------------------
   40|      0|          case EurobondBasis:
  ------------------
  |  Branch (40:11): [True: 0, False: 2]
  ------------------
   41|      0|            return ext::shared_ptr<DayCounter::Impl>(new EU_Impl);
   42|      0|          case Italian:
  ------------------
  |  Branch (42:11): [True: 0, False: 2]
  ------------------
   43|      0|            return ext::shared_ptr<DayCounter::Impl>(new IT_Impl);
   44|      0|          case ISMA:
  ------------------
  |  Branch (44:11): [True: 0, False: 2]
  ------------------
   45|      2|          case BondBasis:
  ------------------
  |  Branch (45:11): [True: 2, False: 0]
  ------------------
   46|      2|            return ext::shared_ptr<DayCounter::Impl>(new ISMA_Impl);
   47|      0|          case ISDA:
  ------------------
  |  Branch (47:11): [True: 0, False: 2]
  ------------------
   48|      0|          case German:
  ------------------
  |  Branch (48:11): [True: 0, False: 2]
  ------------------
   49|      0|            return ext::shared_ptr<DayCounter::Impl>(new ISDA_Impl(terminationDate));
   50|      0|          case NASD:
  ------------------
  |  Branch (50:11): [True: 0, False: 2]
  ------------------
   51|      0|            return ext::shared_ptr<DayCounter::Impl>(new NASD_Impl);
   52|      0|          default:
  ------------------
  |  Branch (52:11): [True: 0, False: 2]
  ------------------
   53|      0|            QL_FAIL("unknown 30/360 convention");
  ------------------
  |  |   92|      0|#define QL_FAIL(message) \
  |  |  ------------------
  |  |  |  |   57|      0|#define QL_MULTILINE_FAILURE_BEGIN do {
  |  |  ------------------
  |  |   93|      0|QL_MULTILINE_FAILURE_BEGIN \
  |  |   94|      0|    std::ostringstream _ql_msg_stream; \
  |  |   95|      0|    _ql_msg_stream << message; \
  |  |   96|      0|    throw QuantLib::Error(__FILE__,__LINE__, \
  |  |   97|      0|                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
  |  |  ------------------
  |  |  |  |   69|      0|    #define QL_MULTILINE_FAILURE_END } while(false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:46): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|      0|QL_MULTILINE_FAILURE_END
  ------------------
   54|      2|        }
   55|      2|    }

_ZN8QuantLib9Thirty360C2ENS0_10ConventionERKNS_4DateE:
  135|      2|        : DayCounter(implementation(c, terminationDate)) {}

ecb.cpp:_ZNK8QuantLib12_GLOBAL__N_13$_0clEv:
   56|      2|        const MonthBimap_t MONTHS = []() {
   57|      2|          MonthBimap_t months;
   58|      2|          months.insert({"JAN", January});
   59|      2|          months.insert({"FEB", February});
   60|      2|          months.insert({"MAR", March});
   61|      2|          months.insert({"APR", April});
   62|      2|          months.insert({"MAY", May});
   63|      2|          months.insert({"JUN", June});
   64|      2|          months.insert({"JUL", July});
   65|      2|          months.insert({"AUG", August});
   66|      2|          months.insert({"SEP", September});
   67|      2|          months.insert({"OCT", October});
   68|      2|          months.insert({"NOV", November});
   69|      2|          months.insert({"DEC", December});
   70|      2|          return months;
   71|      2|        }();
ecb.cpp:_ZNK8QuantLib12_GLOBAL__N_18is_ilessclEN5boost17basic_string_viewIcNSt3__111char_traitsIcEEEES7_:
   40|     76|                          const boost::string_view rhs) const {
   41|     76|            char lhsUpper[3];
   42|     76|            char rhsUpper[3];
   43|    304|            for (int i = 0; i < 3; ++i) {
  ------------------
  |  Branch (43:29): [True: 228, False: 76]
  ------------------
   44|    228|              lhsUpper[i] = std::toupper(lhs[i]);
   45|    228|              rhsUpper[i] = std::toupper(rhs[i]);
   46|    228|            }
   47|     76|            return boost::string_view(lhsUpper, 3) <
   48|     76|                   boost::string_view(rhsUpper, 3);
   49|     76|          }

_ZN8QuantLib6detaillsERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEERKNS0_14ordinal_holderE:
   26|    670|                                 const ordinal_holder& holder) {
   27|    670|            Size n = holder.n;
   28|    670|            out << n;
   29|    670|            if (n == Size(11) || n == Size(12) || n == Size(13)) {
  ------------------
  |  Branch (29:17): [True: 0, False: 670]
  |  Branch (29:34): [True: 0, False: 670]
  |  Branch (29:51): [True: 0, False: 670]
  ------------------
   30|      0|                out << "th";
   31|    670|            } else {
   32|    670|                switch (n % 10) {
   33|    670|                  case 1:  out << "st";  break;
  ------------------
  |  Branch (33:19): [True: 670, False: 0]
  ------------------
   34|      0|                  case 2:  out << "nd";  break;
  ------------------
  |  Branch (34:19): [True: 0, False: 670]
  ------------------
   35|      0|                  case 3:  out << "rd";  break;
  ------------------
  |  Branch (35:19): [True: 0, False: 670]
  ------------------
   36|      0|                  default: out << "th";
  ------------------
  |  Branch (36:19): [True: 0, False: 670]
  ------------------
   37|    670|                }
   38|    670|            }
   39|    670|            return out;
   40|    670|        }

_ZN8QuantLib6detail14ordinal_holderC2Em:
   42|    670|            explicit ordinal_holder(Size n) : n(n) {}
_ZN8QuantLib2io7ordinalEm:
  116|    670|        inline detail::ordinal_holder ordinal(Size n) {
  117|    670|            return detail::ordinal_holder(n);
  118|    670|        }

_ZN8QuantLib10DateParser14parseFormattedERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_:
   91|    493|                                    const std::string& fmt) {
   92|    493|        #ifndef QL_PATCH_SOLARIS
   93|    493|        using namespace boost::gregorian;
   94|       |
   95|    493|        date boostDate;
   96|    493|        std::istringstream is(str);
   97|    493|        is.imbue(std::locale(std::locale(), new date_input_facet(fmt)));
   98|    493|        is >> boostDate;
   99|    493|        date_duration noDays = boostDate - date(1901, 1, 1);
  100|    493|        return Date(1, January, 1901) + noDays.days();
  101|       |        #else
  102|       |        QL_FAIL("DateParser::parseFormatted not supported under Solaris");
  103|       |        #endif
  104|    493|    }
_ZN8QuantLib10DateParser8parseISOERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  106|    158|    Date DateParser::parseISO(const std::string& str) {
  107|    158|        QL_REQUIRE(str.size() == 10 && str[4] == '-' && str[7] == '-',
  ------------------
  |  |  117|    158|#define QL_REQUIRE(condition,message) \
  |  |  ------------------
  |  |  |  |   73|    158|#define QL_MULTILINE_ASSERTION_BEGIN do {
  |  |  ------------------
  |  |  118|    158|QL_MULTILINE_ASSERTION_BEGIN \
  |  |  119|    485|if (!(condition)) { \
  |  |  ------------------
  |  |  |  Branch (119:7): [True: 90, False: 68]
  |  |  |  Branch (119:7): [True: 79, False: 11]
  |  |  |  Branch (119:7): [True: 68, False: 11]
  |  |  ------------------
  |  |  120|     90|    std::ostringstream _ql_msg_stream; \
  |  |  121|     90|    _ql_msg_stream << message; \
  |  |  122|     90|    throw QuantLib::Error(__FILE__,__LINE__, \
  |  |  123|     90|                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
  |  |  124|    158|} \
  |  |  ------------------
  |  |  |  |   85|    158|    #define QL_MULTILINE_ASSERTION_END } while(false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|    158|QL_MULTILINE_ASSERTION_END
  ------------------
  108|     68|                   "invalid format");
  109|     68|        Integer year = std::stoi(str.substr(0, 4));
  110|     68|        Month month = static_cast<Month>(std::stoi(str.substr(5, 2)));
  111|     68|        Integer day = std::stoi(str.substr(8, 2));
  112|       |
  113|     68|        return {day, month, year};
  114|    158|    }

