Walker test code coverage report
Current view: top level - Control - RNGSSEGrammar.hpp (source / functions) Hit Total Coverage
Commit: test_coverage.info Lines: 5 6 83.3 %
Date: 2022-09-21 13:52:12 Functions: 1 2 50.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 3 8 37.5 %

           Branch data     Line data    Source code
       1                 :            : // *****************************************************************************
       2                 :            : /*!
       3                 :            :   \file      src/Control/RNGSSEGrammar.hpp
       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     RNGSSE-related grammar
       9                 :            :   \details   This file defines RNGSSE2 library related grammar, (re-)used by
      10                 :            :      several executables.
      11                 :            : */
      12                 :            : // *****************************************************************************
      13                 :            : #ifndef RNGSSEGrammar_h
      14                 :            : #define RNGSSEGrammar_h
      15                 :            : 
      16                 :            : #include <brigand/algorithms/for_each.hpp>
      17                 :            : 
      18                 :            : #include "CommonGrammar.hpp"
      19                 :            : 
      20                 :            : namespace tk {
      21                 :            : namespace grm {
      22                 :            : 
      23                 :            :   // Note that PEGTL action specializations must be in the same namespace as the
      24                 :            :   // template being specialized. See http://stackoverflow.com/a/3052604.
      25                 :            : 
      26                 :            :   // RNGSSE PEGTL actions
      27                 :            : 
      28                 :            :   //! Rule used to trigger action
      29                 :            :   template< template < class > class use, class Option,
      30                 :            :             typename field, typename sel, typename vec, typename tag,
      31                 :            :             typename... tags > struct insert_seq : pegtl::success {};
      32                 :            :   //! \brief Convert and insert RNGSSE sequence option value to map at position
      33                 :            :   //!   given by tags
      34                 :            :   template< template < class > class use, class Option,
      35                 :            :             typename field, typename sel, typename vec, typename tag,
      36                 :            :             typename... tags >
      37                 :            :   struct action< insert_seq< use, Option, field, sel, vec, tag, tags... > > {
      38                 :            :     template< typename Input, typename Stack >
      39                 :          1 :     static void apply( const Input& in, Stack& stack ) {
      40                 :          1 :       ctr::RNGSSESeqLen opt;
      41                 :            :       using EnumType = ctr::RNGSSESeqLen::EnumType;
      42                 :            :       // get recently inserted key from <sel,vec>
      43                 :            :       const auto& key = stack.template get< sel, vec >().back();
      44                 :            :       // Error out if RNG does not support option specified
      45 [ +  - ][ -  + ]:          2 :       if ( !ctr::RNG().supportsOpt( key, opt.value(in.string()) ) )
                 [ -  + ]
      46         [ -  - ]:          0 :         Message< Stack, ERROR, MsgKey::UNSUPPORTED >( stack, in );
      47                 :            :       stack.template
      48                 :            :         insert_field< field, EnumType, tag, tags... >
      49                 :          1 :                     ( key, opt.value(in.string()) );
      50                 :            :       // trigger error at compile-time if any of the expected option values
      51                 :            :       // is not in the keywords pool of the grammar
      52                 :            :       brigand::for_each< typename Option::keywords >( is_keyword< use >() );
      53                 :          1 :     }
      54                 :            :   };
      55                 :            : 
      56                 :            : } // ::grm
      57                 :            : 
      58                 :            : //! Toolkit, grammar definition for the RNGSSE library
      59                 :            : namespace rngsse {
      60                 :            : 
      61                 :            :   using namespace tao;
      62                 :            : 
      63                 :            :   // RNGSSE PEGTL grammar
      64                 :            : 
      65                 :            :   //! \brief rng: match any one of the RNGSSE random number generators
      66                 :            :   template< template< class > class use >
      67                 :            :   struct rng :
      68                 :            :          pegtl::sor< typename use< kw::rngsse_gm19 >::pegtl_string,
      69                 :            :                      typename use< kw::rngsse_gm29 >::pegtl_string,
      70                 :            :                      typename use< kw::rngsse_gm31 >::pegtl_string,
      71                 :            :                      typename use< kw::rngsse_gm55 >::pegtl_string,
      72                 :            :                      typename use< kw::rngsse_gm61 >::pegtl_string,
      73                 :            :                      typename use< kw::rngsse_gq581 >::pegtl_string,
      74                 :            :                      typename use< kw::rngsse_gq583 >::pegtl_string,
      75                 :            :                      typename use< kw::rngsse_gq584 >::pegtl_string,
      76                 :            :                      typename use< kw::rngsse_mt19937 >::pegtl_string,
      77                 :            :                      typename use< kw::rngsse_lfsr113 >::pegtl_string,
      78                 :            :                      typename use< kw::rngsse_mrg32k3a >::pegtl_string > {};
      79                 :            : 
      80                 :            :   //! \brief Match and set RNGSSE RNG seed
      81                 :            :   template< template< class > class use, typename sel,
      82                 :            :             typename vec, typename... tags >
      83                 :            :   struct seed :
      84                 :            :          tk::grm::process< use< kw::seed >,
      85                 :            :                            tk::grm::insert_seed< sel, vec, tags... > > {};
      86                 :            : 
      87                 :            :   //! \brief Match and set RNG sequence length parameter
      88                 :            :   template< template < class > class use, typename keyword,
      89                 :            :             typename option, typename field, typename sel, typename vec,
      90                 :            :             typename... tags >
      91                 :            :   struct rngsse_seq :
      92                 :            :          grm::process<
      93                 :            :            keyword,
      94                 :            :            tk::grm::insert_seq< use, option, field, sel, vec, tags... >,
      95                 :            :            pegtl::alpha > {};
      96                 :            : 
      97                 :            :   //! \brief Match and set RNGSSE sequence length
      98                 :            :   template< template< class > class use, typename sel,
      99                 :            :             typename vec, typename... tags >
     100                 :            :   struct seqlen :
     101                 :            :          rngsse_seq< use,
     102                 :            :                      use< kw::seqlen >,
     103                 :            :                      ctr::RNG,
     104                 :            :                      tag::seqlen,
     105                 :            :                      sel, vec, tags... > {};
     106                 :            : 
     107                 :            :   //! \brief Match RNGSSE RNGs in an rngs ... end block
     108                 :            :   //! \see walker::deck::rngs
     109                 :            :   template< template< class > class use, typename sel,
     110                 :            :             typename vec, typename... tags >
     111                 :            :   struct rngs :
     112                 :            :          pegtl::if_must<
     113                 :            :            tk::grm::scan< rng< use >,
     114                 :            :                           tk::grm::store_back_option< use,
     115                 :            :                                                       ctr::RNG,
     116                 :            :                                                       sel, vec > >,
     117                 :            :            tk::grm::block< use< kw::end >,
     118                 :            :                            seed< use, sel, vec, tags... >,
     119                 :            :                            seqlen< use, sel, vec, tags... > > > {};
     120                 :            : 
     121                 :            : } // rngsse::
     122                 :            : } // tk::
     123                 :            : 
     124                 :            : #endif // RNGSSEGrammar_h

Generated by: LCOV version 1.14