A Discrete-Event Network Simulator
API
mpi-test-fixtures.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright 2018. Lawrence Livermore National Security, LLC.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Steven Smith <smith84@llnl.gov>
19  */
20 
21 #include <iomanip>
22 #include <sstream>
23 #include <ios>
24 
42 namespace ns3 {
43 
44 template <typename T> class Ptr;
45 class Address;
46 class Packet;
47 
48 
55 #define RANK0COUT(x) \
56  do \
57  if (SinkTracer::GetWorldRank () == 0) \
58  { \
59  std::cout << "TEST : "; \
60  std::ios_base::fmtflags f( std::cout.flags() ); \
61  std::cout << std::setfill('0') << std::setw(5) << SinkTracer::GetLineCount (); \
62  std::cout.flags( f ); \
63  std::cout << " : " << x; \
64  } \
65  while (false)
66 
67 #define RANK0COUTAPPEND(x) \
68  do \
69  if (SinkTracer::GetWorldRank () == 0) \
70  { \
71  std::cout << x ; \
72  } \
73  while (false)
74 
76 {
77 
78 public:
83  static void Init (void);
84 
89  static void SinkTrace (const ns3::Ptr<const ns3::Packet> packet,
90  const ns3::Address &srcAddress,
91  const ns3::Address &destAddress);
92 
97  static void Verify (unsigned long expectedCount);
98 
105  static std::string FormatAddress (const ns3::Address address);
106 
112  static int GetWorldRank (void)
113  {
114  return m_worldRank;
115  }
116 
122  static int GetWorldSize (void)
123  {
124  return m_worldSize;
125  }
126 
131  static int GetLineCount (void)
132  {
133  return m_line++;
134  }
135 
136 private:
137  static unsigned long m_sinkCount; /*< Running sum of number of SinkTrace calls observed */
138  static unsigned long m_line; /*< Current output line number for ordering output */
139  static int m_worldRank; /*< MPI CommWorld rank */
140  static int m_worldSize; /*< MPI CommWorld size */
141 };
142 
143 } // namespace ns3
a polymophic address class
Definition: address.h:91
static void SinkTrace(const ns3::Ptr< const ns3::Packet > packet, const ns3::Address &srcAddress, const ns3::Address &destAddress)
PacketSink receive trace callback.
static int GetWorldRank(void)
Get the MPI rank in the world communicator.
static void Init(void)
PacketSink receive trace callback.
static int m_worldRank
static int GetLineCount(void)
Get current line count and increment.
static void Verify(unsigned long expectedCount)
Verify the sink trace count observed matches the expected count.
static int m_worldSize
static unsigned long m_line
static int GetWorldSize(void)
Get the MPI size of the world communicator.
static unsigned long m_sinkCount
static std::string FormatAddress(const ns3::Address address)
Get the source address and port, as a formatted string.
address
Definition: first.py:44
Every class exported by the ns3 library is enclosed in the ns3 namespace.