preCICE
Public Types | Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
precice::testing::TestContext Class Reference

#include <TestContext.hpp>

Collaboration diagram for precice::testing::TestContext:
[legend]

Public Types

using Participants = std::vector< Participant >
 

Public Member Functions

 ~TestContext () noexcept
 
std::string config () const
 
std::string prefix (const std::string &filename) const
 
bool hasSize (int size) const
 Check whether this context has a given size. More...
 
bool isNamed (const std::string &name) const
 Check whether this context has a given name. More...
 
bool isRank (Rank rank) const
 Check whether this context has a given rank inside the Participant. More...
 
bool isPrimary () const
 
m2n::PtrM2N connectPrimaryRanks (const std::string &acceptor, const std::string &requestor, const ConnectionOptions &options=ConnectionOptions{}) const
 
std::string describe () const
 Provides a user- and log-friendly description of the current context. More...
 
Construction
 TestContext ()=default
 Create a context representing an unnamed serial Participant. More...
 
template<class... T>
 TestContext (Ranks ranks)
 
template<class... T>
 TestContext (Ranks ranks, T... args)
 
template<class... T>
 TestContext (T... args)
 

Public Attributes

std::string name
 the name of the current participant More...
 
Rank rank = 0
 the rank of the current participant More...
 
int size = 1
 the size of the Communicator of the current participant More...
 
bool invalid = false
 whether this context is valid or not More...
 

Private Member Functions

void setContextFrom (const Participant &p, Rank rank)
 
Option Handling
void handleOption (Participants &participants, Participant participant)
 
void handleOption (Participants &participants, testing::Require requirement)
 
template<class LastOption >
void handleOptions (Participants &participants, LastOption &last)
 
template<class NextOption , class... Rest>
void handleOptions (Participants &participants, NextOption &next, Rest &... rest)
 
Initialization
void initialize (const Participants &participants)
 Main entrypoint. More...
 
void initializeMPI (const Participants &participants)
 
void initializeIntraComm ()
 Initialize the intra-participant communication connection if requested. More...
 
void initializePetsc ()
 Initialize PETSc if required. More...
 
void initializeEvents ()
 Initialize Events if required. More...
 

Private Attributes

bool _petsc = false
 whether to initialize PETSc More...
 
bool _events = false
 whether to initialize events More...
 
bool _simple = false
 whether this Context was created with a Ranks constructor More...
 
bool _initIntraComm = false
 whether to initialize an intra-participant connection More...
 
utils::Parallel::CommStatePtr _contextComm
 the MPI communicator of the context More...
 
std::vector< std::string > _names
 contains the name of every known Participant More...
 

Detailed Description

Type representing the context of a test.

Note
Do not use this type directly. Use PRECICE_TEST() instead.

This type is responsible for

  1. making sure that there are enough ranks to run the test on.
  2. restricting and splitting the MPI Communicator.
  3. handling invalid contexts (such as unneeded ranks)
  4. initializing the intra-participant communication if requested. initializeIntraComm()
  5. handling further requirements
    See also
    Require
  6. providing a usable context during the test isNamed(), isPrimary(), isRank()
  7. cleaning up after the test case

Definition at line 152 of file TestContext.hpp.

Member Typedef Documentation

◆ Participants

Definition at line 154 of file TestContext.hpp.

Constructor & Destructor Documentation

◆ TestContext() [1/4]

precice::testing::TestContext::TestContext ( )
default

Create a context representing an unnamed serial Participant.

◆ TestContext() [2/4]

template<class... T>
precice::testing::TestContext::TestContext ( Ranks  ranks)
inline

Create a context representing an unnamed Participant running on a given count of Ranks

Note
You need to construct a Participant if you require initializing an intra-participant connection "Serial"_on(3_ranks).setupIntraComm()
Attention
This call synchronizes all ranks

Definition at line 183 of file TestContext.hpp.

Here is the call graph for this function:

◆ TestContext() [3/4]

template<class... T>
precice::testing::TestContext::TestContext ( Ranks  ranks,
T...  args 
)
inline

Create a context representing an unnamed Participant running on a given count of Ranks and some requirements

Note
You need to construct a Participant if you require initializing an intra-participant connection "Serial"_on(3_ranks).setupIntraComm()
Attention
This call synchronizes all ranks
See also
Require

Definition at line 200 of file TestContext.hpp.

Here is the call graph for this function:

◆ TestContext() [4/4]

template<class... T>
precice::testing::TestContext::TestContext ( T...  args)
inline

Create a context representing one or more participants

Attention
This call synchronizes all ranks
See also
Require

Definition at line 215 of file TestContext.hpp.

Here is the call graph for this function:

◆ ~TestContext()

precice::testing::TestContext::~TestContext ( )
noexcept

Cleans-up all initialized parts and synchronizes all ranks

Attention
This call synchronizes all ranks

Definition at line 34 of file TestContext.cpp.

Here is the call graph for this function:

Member Function Documentation

◆ config()

std::string precice::testing::TestContext::config ( ) const

Returns the canonical config name of this test.

The location of integration tests are tied the test name and test suites. This computes the canonical filename of this test's configuration file based on the repository root, the current test suites and name.

Returns
the full filepath of this test's configuration file

Definition at line 60 of file TestContext.cpp.

Here is the call graph for this function:

◆ connectPrimaryRanks()

m2n::PtrM2N precice::testing::TestContext::connectPrimaryRanks ( const std::string &  acceptor,
const std::string &  requestor,
const ConnectionOptions options = ConnectionOptions{} 
) const

Creates a M2N and establishes a primary connection between participants

Parameters
[in]acceptorthe accepting participant
[in]requestorthe requesting participant
[in]optionsa set of options concerning the created connection
Note
This function throws if the acceptor or requestor are unknown!
See also
ConnectionOptions

Definition at line 217 of file TestContext.cpp.

Here is the call graph for this function:

◆ describe()

std::string precice::testing::TestContext::describe ( ) const

Provides a user- and log-friendly description of the current context.

Definition at line 253 of file TestContext.cpp.

◆ handleOption() [1/2]

void precice::testing::TestContext::handleOption ( Participants participants,
Participant  participant 
)
private

Definition at line 107 of file TestContext.cpp.

◆ handleOption() [2/2]

void precice::testing::TestContext::handleOption ( Participants participants,
testing::Require  requirement 
)
private

Definition at line 91 of file TestContext.cpp.

◆ handleOptions() [1/2]

template<class LastOption >
void precice::testing::TestContext::handleOptions ( Participants participants,
LastOption &  last 
)
inlineprivate

Definition at line 300 of file TestContext.hpp.

Here is the call graph for this function:

◆ handleOptions() [2/2]

template<class NextOption , class... Rest>
void precice::testing::TestContext::handleOptions ( Participants participants,
NextOption &  next,
Rest &...  rest 
)
inlineprivate

Definition at line 306 of file TestContext.hpp.

Here is the call graph for this function:

◆ hasSize()

bool precice::testing::TestContext::hasSize ( int  size) const

Check whether this context has a given size.

Definition at line 65 of file TestContext.cpp.

◆ initialize()

void precice::testing::TestContext::initialize ( const Participants participants)
private

Main entrypoint.

Definition at line 126 of file TestContext.cpp.

Here is the call graph for this function:

◆ initializeEvents()

void precice::testing::TestContext::initializeEvents ( )
private

Initialize Events if required.

Definition at line 203 of file TestContext.cpp.

Here is the call graph for this function:

◆ initializeIntraComm()

void precice::testing::TestContext::initializeIntraComm ( )
private

Initialize the intra-participant communication connection if requested.

Definition at line 180 of file TestContext.cpp.

Here is the call graph for this function:

◆ initializeMPI()

void precice::testing::TestContext::initializeMPI ( const Participants participants)
private

Check, restrict and split the MPI communicator Marks unneeded contexts as invalid

Definition at line 136 of file TestContext.cpp.

Here is the call graph for this function:

◆ initializePetsc()

void precice::testing::TestContext::initializePetsc ( )
private

Initialize PETSc if required.

Definition at line 210 of file TestContext.cpp.

Here is the call graph for this function:

◆ isNamed()

bool precice::testing::TestContext::isNamed ( const std::string &  name) const

Check whether this context has a given name.

Definition at line 70 of file TestContext.cpp.

◆ isPrimary()

bool precice::testing::TestContext::isPrimary ( ) const

Check whether this context is the primary rank of a participant

Note
This is equivalent to isRank(0)

Definition at line 86 of file TestContext.cpp.

Here is the call graph for this function:

◆ isRank()

bool precice::testing::TestContext::isRank ( Rank  rank) const

Check whether this context has a given rank inside the Participant.

Definition at line 78 of file TestContext.cpp.

◆ prefix()

std::string precice::testing::TestContext::prefix ( const std::string &  filename) const

Prefixes the given filename with the test directory.

The filename will be located in the same directory as the current test file.

Returns
the full filepath to the filename relative

Definition at line 52 of file TestContext.cpp.

Here is the call graph for this function:

◆ setContextFrom()

void precice::testing::TestContext::setContextFrom ( const Participant p,
Rank  rank 
)
private

set the context from a Participants and a given rank Both uniquely identify a context.

Definition at line 117 of file TestContext.cpp.

Here is the call graph for this function:

Member Data Documentation

◆ _contextComm

utils::Parallel::CommStatePtr precice::testing::TestContext::_contextComm
private

the MPI communicator of the context

Definition at line 289 of file TestContext.hpp.

◆ _events

bool precice::testing::TestContext::_events = false
private

whether to initialize events

Definition at line 280 of file TestContext.hpp.

◆ _initIntraComm

bool precice::testing::TestContext::_initIntraComm = false
private

whether to initialize an intra-participant connection

Definition at line 286 of file TestContext.hpp.

◆ _names

std::vector<std::string> precice::testing::TestContext::_names
private

contains the name of every known Participant

Definition at line 292 of file TestContext.hpp.

◆ _petsc

bool precice::testing::TestContext::_petsc = false
private

whether to initialize PETSc

Definition at line 277 of file TestContext.hpp.

◆ _simple

bool precice::testing::TestContext::_simple = false
private

whether this Context was created with a Ranks constructor

Definition at line 283 of file TestContext.hpp.

◆ invalid

bool precice::testing::TestContext::invalid = false

whether this context is valid or not

Definition at line 166 of file TestContext.hpp.

◆ name

std::string precice::testing::TestContext::name

the name of the current participant

Definition at line 157 of file TestContext.hpp.

◆ rank

Rank precice::testing::TestContext::rank = 0

the rank of the current participant

Definition at line 160 of file TestContext.hpp.

◆ size

int precice::testing::TestContext::size = 1

the size of the Communicator of the current participant

Definition at line 163 of file TestContext.hpp.


The documentation for this class was generated from the following files: