Quinoa all test code coverage report
Current view: top level - Control/RNGTest/InputDeck - Grammar.hpp (source / functions) Hit Total Coverage
Commit: Quinoa_v0.3-957-gb4f0efae0 Lines: 1 1 100.0 %
Date: 2021-11-09 15:14:18 Functions: 0 0 -
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 3 6 50.0 %

           Branch data     Line data    Source code
       1                 :            : // *****************************************************************************
       2                 :            : /*!
       3                 :            :   \file      src/Control/RNGTest/InputDeck/Grammar.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     Random number generator test suite grammar definition
       9                 :            :   \details   Random number generator test suite input deck grammar definition.
      10                 :            :   We use the Parsing Expression Grammar Template Library (PEGTL) to create the
      11                 :            :   grammar and the associated parser. Word of advice: read from the bottom up.
      12                 :            : */
      13                 :            : // *****************************************************************************
      14                 :            : #ifndef RNGTestInputDeckGrammar_h
      15                 :            : #define RNGTestInputDeckGrammar_h
      16                 :            : 
      17                 :            : #include "CommonGrammar.hpp"
      18                 :            : #include "Keywords.hpp"
      19                 :            : #include "QuinoaConfig.hpp"
      20                 :            : 
      21                 :            : #ifdef HAS_MKL
      22                 :            :   #include "MKLGrammar.hpp"
      23                 :            : #endif
      24                 :            : 
      25                 :            : #ifdef HAS_RNGSSE2
      26                 :            :   #include "RNGSSEGrammar.hpp"
      27                 :            : #endif
      28                 :            : 
      29                 :            : #include "Random123Grammar.hpp"
      30                 :            : 
      31                 :            : namespace rngtest {
      32                 :            : 
      33                 :            : extern ctr::InputDeck g_inputdeck_defaults;
      34                 :            : 
      35                 :            : //! RNGTest input deck facilitating user input for testing RNGs
      36                 :            : namespace deck {
      37                 :            : 
      38                 :            :   //! \brief Specialization of tk::grm::use for RNGTest's control file parser
      39                 :            :   template< typename keyword >
      40                 :            :   using use = tk::grm::use< keyword, ctr::InputDeck::keywords >;
      41                 :            : 
      42                 :            : } // ::deck
      43                 :            : } // ::rngtest
      44                 :            : 
      45                 :            : namespace tk {
      46                 :            : namespace grm {
      47                 :            : 
      48                 :            :   using namespace tao;
      49                 :            : 
      50                 :            :   // Note that PEGTL action specializations must be in the same namespace as the
      51                 :            :   // template being specialized. See http://stackoverflow.com/a/3052604.
      52                 :            : 
      53                 :            :   // RNGTest's InputDeck actions
      54                 :            : 
      55                 :            :   //! Rule used to trigger action
      56                 :            :   template< class Option, typename... tags >
      57                 :            :   struct store_rngtest_option : pegtl::success {};
      58                 :            :   //! \brief Put option in state at position given by tags
      59                 :            :   //! \details This is simply a wrapper around tk::grm::store_option passing the
      60                 :            :   //!    stack defaults for rngtest.
      61                 :            :   template< class Option, typename... tags >
      62                 :            :   struct action< store_rngtest_option< Option, tags... > > {
      63                 :            :     template< typename Input, typename Stack >
      64                 :            :     static void apply( const Input& in, Stack& stack ) {
      65                 :            :       store_option< Stack, rngtest::deck::use, Option, rngtest::ctr::InputDeck,
      66                 :            :                     Input, tags... >
      67 [ +  - ][ +  - ]:          4 :                   ( stack, in, rngtest::g_inputdeck_defaults );
                 [ +  - ]
      68                 :            :     }
      69                 :            :   };
      70                 :            : 
      71                 :            : } // ::grm
      72                 :            : } // ::tk
      73                 :            : 
      74                 :            : namespace rngtest {
      75                 :            : 
      76                 :            : //! RNGTest input deck facilitating user input for testing RNGs
      77                 :            : namespace deck {
      78                 :            : 
      79                 :            :   using namespace tao;
      80                 :            : 
      81                 :            :   // RNGTest's InputDeck grammar
      82                 :            : 
      83                 :            :   //! \brief Match the inside of rngs ... end block
      84                 :            :   struct rngs :
      85                 :            :          pegtl::sor<
      86                 :            :                      #ifdef HAS_MKL
      87                 :            :                      tk::mkl::rngs< use,
      88                 :            :                                     tag::selected, tag::rng,
      89                 :            :                                     tag::param, tag::rngmkl >,
      90                 :            :                      #endif
      91                 :            :                      #ifdef HAS_RNGSSE2
      92                 :            :                      tk::rngsse::rngs< use,
      93                 :            :                                        tag::selected, tag::rng,
      94                 :            :                                        tag::param, tag::rngsse >,
      95                 :            :                      #endif
      96                 :            :                      tk::random123::rngs< use,
      97                 :            :                                           tag::selected, tag::rng,
      98                 :            :                                           tag::param, tag::rng123 > > {};
      99                 :            : 
     100                 :            :   // \brief Match TestU01 batteries
     101                 :            :   template< typename battery_kw >
     102                 :            :   struct testu01 :
     103                 :            :          pegtl::if_must<
     104                 :            :            tk::grm::scan< typename battery_kw::pegtl_string,
     105                 :            :                           tk::grm::store_rngtest_option< ctr::Battery,
     106                 :            :                                                          tag::selected,
     107                 :            :                                                          tag::battery > >,
     108                 :            :            pegtl::sor< tk::grm::block< use< kw::end >, rngs >,
     109                 :            :                        tk::grm::msg< tk::grm::MsgType::ERROR,
     110                 :            :                                      tk::grm::MsgKey::UNFINISHED > > > {};
     111                 :            : 
     112                 :            :   //! \brief Match all batteries
     113                 :            :   struct battery :
     114                 :            :          pegtl::sor< testu01< use< kw::smallcrush > >,
     115                 :            :                      testu01< use< kw::crush > >,
     116                 :            :                      testu01< use< kw::bigcrush > > > {};
     117                 :            : 
     118                 :            :   //! \brief All keywords
     119                 :            :   struct keywords :
     120                 :            :          pegtl::sor< tk::grm::title< use >, battery > {};
     121                 :            : 
     122                 :            :   //! \brief Grammar entry point: parse keywords and ignores until eof
     123                 :            :   struct read_file :
     124                 :            :          tk::grm::read_file< keywords, tk::grm::ignore > {};
     125                 :            : 
     126                 :            : } // deck::
     127                 :            : } // rngtest::
     128                 :            : 
     129                 :            : #endif // RNGTestInputDeckGrammar_h

Generated by: LCOV version 1.14