Walker test code coverage report
Current view: top level - Main - WalkerPrint.cpp (source / functions) Hit Total Coverage
Commit: test_coverage.info Lines: 66 66 100.0 %
Date: 2022-09-21 18:57:21 Functions: 5 5 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 85 166 51.2 %

           Branch data     Line data    Source code
       1                 :            : // *****************************************************************************
       2                 :            : /*!
       3                 :            :   \file      src/Main/WalkerPrint.cpp
       4                 :            :   \copyright 2012-2015 J. Bakosi,
       5                 :            :              2016-2018 Los Alamos National Security, LLC.,
       6                 :            :              2019-2021 Triad National Security, LLC.
       7                 :            :              All rights reserved. See the LICENSE file for details.
       8                 :            :   \brief     Walker-specific pretty printer functionality
       9                 :            :   \details   Walker-specific pretty printer functionality.
      10                 :            : */
      11                 :            : // *****************************************************************************
      12                 :            : 
      13                 :            : #include <regex>
      14                 :            : 
      15                 :            : #include "Exception.hpp"
      16                 :            : #include "Tags.hpp"
      17                 :            : #include "StatCtr.hpp"
      18                 :            : #include "WalkerPrint.hpp"
      19                 :            : #include "DiffEq.hpp"
      20                 :            : #include "Options/PDFCentering.hpp"
      21                 :            : #include "Options/PDFFile.hpp"
      22                 :            : #include "Options/PDFPolicy.hpp"
      23                 :            : #include "Options/TxtFloatFormat.hpp"
      24                 :            : 
      25                 :            : using walker::WalkerPrint;
      26                 :            : 
      27                 :            : namespace walker {
      28                 :            : 
      29                 :            : extern std::vector< DiffEq > g_diffeqs;
      30                 :            : 
      31                 :            : } // walker::
      32                 :            : 
      33                 :            : void
      34                 :         93 : WalkerPrint::inthead( const std::string& t,
      35                 :            :                       const std::string& name,
      36                 :            :                       const std::string& legend,
      37                 :            :                       const std::string& head ) const
      38                 :            : // *****************************************************************************
      39                 :            : //  Print time integration header
      40                 :            : //! \param[in] t Section title
      41                 :            : //! \param[in] name Section name
      42                 :            : //! \param[in] legend Legend to print
      43                 :            : //! \param[in] head Head to append
      44                 :            : // *****************************************************************************
      45                 :            : {
      46         [ +  - ]:         93 :   section( t, name );
      47         [ +  - ]:         93 :   std::string l( legend );
      48 [ +  - ][ +  - ]:         93 :   l = std::regex_replace( l, std::regex("\n"), "\n" + m_item_indent );
                 [ +  - ]
      49 [ +  - ][ +  - ]:         93 :   raw( m_item_indent + l + head );
                 [ +  - ]
      50                 :         93 : }
      51                 :            : 
      52                 :            : void
      53                 :         93 : WalkerPrint::statistics( const std::string& t ) const
      54                 :            : // *****************************************************************************
      55                 :            : //  Print statistics and PDFs
      56                 :            : //! \param[in] t Section title
      57                 :            : // *****************************************************************************
      58                 :            : {
      59 [ +  + ][ +  - ]:         96 :   if ( !g_inputdeck.get< tag::stat >().empty() ||
      60         [ +  - ]:          3 :        !g_inputdeck.get< tag::pdf >().empty() )
      61                 :            :   {
      62                 :         93 :     section( t );
      63 [ +  - ][ +  - ]:         93 :     stats( "Estimated statistical moments" );
      64 [ +  - ][ +  - ]:         93 :     pdfs( "Estimated PDFs", tk::ctr::pdf );
      65                 :            :   }
      66                 :         93 : }
      67                 :            : 
      68                 :            : void
      69                 :         93 : WalkerPrint::diffeqs( const std::string& t, const std::vector< std::vector<
      70                 :            :   std::pair< std::string, std::string > > >& info ) const
      71                 :            : // *****************************************************************************
      72                 :            : //  Print configuration of a stack of differential equations
      73                 :            : //! \param[in] t Title to use
      74                 :            : //! \param[in] info Info vector to use
      75                 :            : // *****************************************************************************
      76                 :            : {
      77         [ +  - ]:         93 :   if ( !info.empty() ) {
      78         [ +  - ]:        186 :     std::stringstream ss;
      79 [ +  - ][ +  - ]:         93 :     ss << t << " (" << g_diffeqs.size() << ")";
         [ +  - ][ +  - ]
      80 [ +  - ][ +  - ]:         93 :     section( ss.str() );
      81         [ +  + ]:        198 :     for (std::size_t e=0; e<info.size(); ++e) {
      82         [ +  - ]:        105 :       subsection( info[e][0].first );
      83         [ +  + ]:       1265 :       for (std::size_t l=1; l<info[e].size(); ++l)
      84                 :       3480 :         m_stream << m_item_name_value_fmt % m_item_indent
      85 [ +  - ][ +  - ]:       1160 :                     % info[e][l].first % info[e][l].second;
         [ +  - ][ +  - ]
      86 [ +  + ][ +  - ]:        105 :       if (e < info.size()-1) endsubsection();
      87                 :            :     }
      88                 :            :   }
      89                 :         93 : }
      90                 :            : 
      91                 :            : void
      92                 :         93 : WalkerPrint::stats( const std::string& msg ) const
      93                 :            : // *****************************************************************************
      94                 :            : //  Echo statistics container contents if differs from default
      95                 :            : //! \param[in] msg Message to print
      96                 :            : // *****************************************************************************
      97                 :            : {
      98 [ -  + ][ -  - ]:         93 :   Assert( !msg.empty(), "Empty message size in WalkerPrint::stats()." );
         [ -  - ][ -  - ]
      99                 :         93 :   const auto& c = g_inputdeck.get< tag::stat >();
     100                 :            : 
     101 [ +  + ][ +  - ]:         93 :   if (!c.empty() && c != g_inputdeck_defaults.get< tag::stat >()) {
         [ +  - ][ +  + ]
     102 [ +  - ][ +  - ]:         90 :     m_stream << m_item_name_fmt % m_item_indent % msg;
                 [ +  - ]
     103 [ +  + ][ +  - ]:       1431 :     for (const auto& v : c) m_stream << v << ' ';
                 [ +  - ]
     104         [ +  - ]:         90 :     m_stream << '\n';
     105                 :            :   }
     106                 :            : 
     107                 :            :   // Output options and settings affecting statistics output
     108         [ +  - ]:        186 :   tk::ctr::TxtFloatFormat fl;
     109 [ +  - ][ +  - ]:         93 :   item( "Stats " + fl.group(),
     110         [ +  - ]:         93 :         fl.name( g_inputdeck.get< tag::flformat, tag::stat >() ) );
     111         [ +  - ]:         93 :   item( "Stats text precision, digits",
     112         [ +  - ]:        186 :         g_inputdeck.get< tag::prec, tag::stat >() );
     113                 :         93 : }
     114                 :            : 
     115                 :            : void
     116                 :         93 : WalkerPrint::pdfs( const std::string& msg,
     117                 :            :                    std::function<
     118                 :            :                      std::ostream& ( std::ostream&,
     119                 :            :                                      const std::vector< tk::ctr::Term >&,
     120                 :            :                                      const std::vector< tk::real >&,
     121                 :            :                                      const std::string&,
     122                 :            :                                      const std::vector< tk::real >& ext ) > op )
     123                 :            : const
     124                 :            : // *****************************************************************************
     125                 :            : //  Echo pdfs container contents if differs from default applying op.
     126                 :            : //! \param[in] msg Message to print
     127                 :            : //! \param[in] op Functor to use
     128                 :            : //! \details See src/Control/StatCtr.h for the definition of functions that may
     129                 :            : //!    be passed in as op. Currently, the only example is tk::ctr::pdf.
     130                 :            : // *****************************************************************************
     131                 :            : {
     132 [ -  + ][ -  - ]:         93 :   Assert( !msg.empty(), "Empty message size in WalkerPrint::vec()." );
         [ -  - ][ -  - ]
     133                 :            : 
     134                 :         93 :   const auto& c = g_inputdeck.get< tag::pdf >();
     135                 :         93 :   const auto& b = g_inputdeck.get< tag::discr, tag::binsize >();
     136                 :         93 :   const auto& n = g_inputdeck.get< tag::cmd, tag::io, tag::pdfnames >();
     137                 :         93 :   const auto& x = g_inputdeck.get< tag::discr, tag::extent >();
     138                 :            : 
     139 [ +  - ][ +  - ]:         93 :   Assert( (c.size() == b.size()) &&
         [ +  - ][ -  - ]
         [ -  - ][ -  - ]
     140                 :            :           (c.size() == n.size()) &&
     141                 :            :           (c.size() == x.size()),
     142                 :            :           "Number of PDFs, number of binsizes vector, number of PDF names, and "
     143                 :            :           "number of extents vector must all equal in WalkerPrint::pdfs()." );
     144                 :            : 
     145 [ +  + ][ +  - ]:         93 :   if (!c.empty() && c != g_inputdeck_defaults.get< tag::pdf >()) {
                 [ +  + ]
     146                 :         16 :     m_stream << m_item_name_fmt % m_item_indent % msg;
     147         [ +  + ]:         45 :     for (std::size_t i=0; i<c.size(); ++i) {
     148                 :         29 :       op( m_stream, c[i], b[i], n[i], x[i] );
     149                 :            :     }
     150                 :         16 :     m_stream << '\n';
     151                 :            :   }
     152                 :            : 
     153                 :            :   // Output options and settings affecting PDF output
     154         [ +  + ]:         93 :   if (!c.empty()) {
     155         [ +  - ]:         32 :     tk::ctr::PDFFile f;
     156         [ +  - ]:         16 :     item( f.group(),
     157         [ +  - ]:         16 :           f.name( g_inputdeck.get< tag::selected, tag::filetype >() ) );
     158         [ +  - ]:         32 :     tk::ctr::PDFPolicy p;
     159         [ +  - ]:         16 :     item( p.group(),
     160         [ +  - ]:         16 :           p.name( g_inputdeck.get< tag::selected, tag::pdfpolicy >() ) );
     161         [ +  - ]:         32 :     tk::ctr::PDFCentering e;
     162         [ +  - ]:         16 :     item( e.group(),
     163         [ +  - ]:         16 :           e.name( g_inputdeck.get< tag::selected, tag::pdfctr >() ) );
     164         [ +  - ]:         32 :     tk::ctr::TxtFloatFormat fl;
     165 [ +  - ][ +  - ]:         16 :     item( "PDF text " + fl.group(),
     166         [ +  - ]:         16 :           fl.name( g_inputdeck.get< tag::flformat, tag::pdf >() ) );
     167         [ +  - ]:         16 :     item( "PDF text precision, digits",
     168         [ +  - ]:         32 :           g_inputdeck.get< tag::prec, tag::pdf >() );
     169                 :            :   }
     170                 :         93 : }

Generated by: LCOV version 1.14