MOAB: Mesh Oriented datABase  (version 5.5.0)
test_prog_opt.cpp File Reference
#include "TestUtil.hpp"
#include "TestRunner.hpp"
#include "moab/ProgOptions.hpp"
#include <limits>
#include <cstdlib>
#include <iterator>
+ Include dependency graph for test_prog_opt.cpp:

Go to the source code of this file.

Macros

#define ARGCV(A)   ( sizeof( A ) / sizeof( ( A )[0] ) ), const_cast< char** >( A )
 

Functions

void test_flag_opt_short ()
 
void test_flag_opt_long_short ()
 
void test_flag_opt_long ()
 
void test_flag_cancel ()
 
void test_flag_store_false ()
 
void test_int_opt ()
 
void test_int_arg ()
 
void test_real_opt ()
 
void test_real_arg ()
 
void test_string_opt ()
 
void test_string_arg ()
 
void test_string_rank_subst ()
 
void test_int_vect_opt ()
 
void test_int_vect_arg ()
 
void test_optional_args ()
 
void test_optional_arg ()
 
void test_squashed_short ()
 
int main (int argc, char *argv[])
 

Macro Definition Documentation

◆ ARGCV

#define ARGCV (   A)    ( sizeof( A ) / sizeof( ( A )[0] ) ), const_cast< char** >( A )

Definition at line 33 of file test_prog_opt.cpp.

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 35 of file test_prog_opt.cpp.

36 {
37  // make ProgOptions abort() rather than exiting with an
38  // error code for invalid options so that we can catch
39  // the signal and continue with later tests
40 #ifndef WIN32
41  setenv( "MOAB_PROG_OPT_ABORT", "1", 0 );
42 #endif
43 
49 
54 
58 
64 
65 #ifdef MOAB_HAVE_MPI
66  MPI_Init( &argc, &argv );
67 #endif
68  int result = RUN_TESTS( argc, argv );
69 #ifdef MOAB_HAVE_MPI
70  MPI_Finalize();
71 #endif
72  return result;
73 }

References REGISTER_TEST, RUN_TESTS, test_flag_cancel(), test_flag_opt_long(), test_flag_opt_long_short(), test_flag_opt_short(), test_flag_store_false(), test_int_arg(), test_int_opt(), test_int_vect_arg(), test_int_vect_opt(), test_optional_arg(), test_optional_args(), test_real_arg(), test_real_opt(), test_squashed_short(), test_string_arg(), test_string_opt(), and test_string_rank_subst().

◆ test_flag_cancel()

void test_flag_cancel ( )

Definition at line 112 of file test_prog_opt.cpp.

113 {
114  ProgOptions opts1;
115  bool value = false;
116  opts1.addOpt< void >( "flag", "my flag", &value, ProgOptions::add_cancel_opt );
117  const char* argv1[] = { "test", "--flag" };
118  opts1.parseCommandLine( ARGCV( argv1 ) );
119  CHECK( value );
120 
121  ProgOptions opts2;
122  value = true;
123  opts2.addOpt< void >( "flag", "my flag", &value, ProgOptions::add_cancel_opt );
124  const char* argv2[] = { "test", "--flag", "--no-flag" };
125  opts2.parseCommandLine( ARGCV( argv2 ) );
126  CHECK( !value );
127 
128  ProgOptions opts3;
129  value = false;
130  opts3.addOpt< void >( "flag", "my flag", &value, ProgOptions::add_cancel_opt );
131  const char* argv3[] = { "test", "--flag", "--no-flag", "--flag" };
132  opts3.parseCommandLine( ARGCV( argv3 ) );
133  CHECK( value );
134 }

References ProgOptions::add_cancel_opt, ProgOptions::addOpt(), ARGCV, CHECK, and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_flag_opt_long()

void test_flag_opt_long ( )

Definition at line 99 of file test_prog_opt.cpp.

100 {
101  ProgOptions opts3;
102  bool value = false;
103  opts3.addOpt< void >( "long,l", "long opt", &value );
104  const char* argv3[] = { "prog", "--long", "--long" };
105  opts3.parseCommandLine( ARGCV( argv3 ) );
106  CHECK( value );
107  CHECK_EQUAL( 2, opts3.numOptSet( ",l" ) );
108  CHECK_EQUAL( 2, opts3.numOptSet( "long,l" ) );
109  CHECK_EQUAL( 2, opts3.numOptSet( "long" ) );
110 }

References ProgOptions::addOpt(), ARGCV, CHECK, CHECK_EQUAL, ProgOptions::numOptSet(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_flag_opt_long_short()

void test_flag_opt_long_short ( )

Definition at line 86 of file test_prog_opt.cpp.

87 {
88  ProgOptions opts2;
89  bool value = false;
90  opts2.addOpt< void >( "long,l", "long opt", &value );
91  const char* argv2[] = { "prog", "-l", "-l" };
92  opts2.parseCommandLine( ARGCV( argv2 ) );
93  CHECK( value );
94  CHECK_EQUAL( 2, opts2.numOptSet( ",l" ) );
95  CHECK_EQUAL( 2, opts2.numOptSet( "long,l" ) );
96  CHECK_EQUAL( 2, opts2.numOptSet( "long" ) );
97 }

References ProgOptions::addOpt(), ARGCV, CHECK, CHECK_EQUAL, ProgOptions::numOptSet(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_flag_opt_short()

void test_flag_opt_short ( )

Definition at line 75 of file test_prog_opt.cpp.

76 {
77  ProgOptions opts1;
78  bool value1 = false;
79  opts1.addOpt< void >( ",s", "short opt", &value1 );
80  const char* argv1[] = { "prog", "-s" };
81  opts1.parseCommandLine( ARGCV( argv1 ) );
82  CHECK( value1 );
83  CHECK_EQUAL( 1, opts1.numOptSet( ",s" ) );
84 }

References ProgOptions::addOpt(), ARGCV, CHECK, CHECK_EQUAL, ProgOptions::numOptSet(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_flag_store_false()

void test_flag_store_false ( )

Definition at line 136 of file test_prog_opt.cpp.

137 {
138  ProgOptions opts1;
139  bool value1 = true;
140  opts1.addOpt< void >( ",s", "short opt", &value1, ProgOptions::store_false );
141  const char* argv1[] = { "prog", "-s" };
142  opts1.parseCommandLine( ARGCV( argv1 ) );
143  CHECK( !value1 );
144 }

References ProgOptions::addOpt(), ARGCV, CHECK, ProgOptions::parseCommandLine(), and ProgOptions::store_false.

Referenced by main().

◆ test_int_arg()

void test_int_arg ( )

Definition at line 171 of file test_prog_opt.cpp.

172 {
173  ProgOptions opts;
174  int val1 = 5;
175  opts.addRequiredArg( "arg", "my test arg", &val1 );
176  opts.addRequiredArg< int >( "arg2", "my other test arg" );
177  const char* argv[] = { "test", "--", "-1", "-010" };
178  opts.parseCommandLine( ARGCV( argv ) );
179  CHECK_EQUAL( -1, val1 );
180  CHECK_EQUAL( -010, opts.getReqArg< int >( "arg2" ) ); // octal -10 == decimal -8
181  CHECK_EQUAL( -1, opts.getReqArg< int >( "arg" ) );
182 }

References ProgOptions::addRequiredArg(), ARGCV, CHECK_EQUAL, ProgOptions::getReqArg(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_int_opt()

void test_int_opt ( )

Definition at line 146 of file test_prog_opt.cpp.

147 {
148  ProgOptions opts;
149  int val1 = -1;
150  opts.addOpt( "long,s", "my int opt", &val1 );
151  const char* argv[] = { "test", "-s", "2", "--long", "-0xA", "--long=5" };
152  opts.parseCommandLine( ARGCV( argv ) );
153  CHECK_EQUAL( 5, val1 );
154  int val2 = -1;
155  CHECK( opts.getOpt( ",s", &val2 ) );
156  CHECK_EQUAL( 5, val2 );
157  val2 = -1;
158  CHECK( opts.getOpt( "long,s", &val2 ) );
159  CHECK_EQUAL( 5, val2 );
160  val2 = -1;
161  CHECK( opts.getOpt( "long", &val2 ) );
162  CHECK_EQUAL( 5, val2 );
163  std::vector< int > list;
164  opts.getOptAllArgs( ",s", list );
165  CHECK_EQUAL( (size_t)3, list.size() );
166  CHECK_EQUAL( 2, list[0] );
167  CHECK_EQUAL( -10, list[1] );
168  CHECK_EQUAL( 5, list[2] );
169 }

References ProgOptions::addOpt(), ARGCV, CHECK, CHECK_EQUAL, ProgOptions::getOpt(), ProgOptions::getOptAllArgs(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_int_vect_arg()

void test_int_vect_arg ( )

Definition at line 374 of file test_prog_opt.cpp.

375 {
376  ProgOptions opts;
377  std::vector< int > list1;
378  opts.addRequiredArg( "ints", "int list", &list1 );
379  const char* argv[] = { "test", "5,6,-3--1,10" };
380 
381  const int exp1[] = { 5, 6, -3, -2, -1, 10 };
382  const int exp1_len = sizeof( exp1 ) / sizeof( exp1[0] );
383 
384  opts.parseCommandLine( ARGCV( argv ) );
385  CHECK_ARRAYS_EQUAL( exp1, exp1_len, &list1[0], list1.size() );
386  CHECK_EQUAL( list1, opts.getReqArg< std::vector< int > >( "ints" ) );
387 }

References ProgOptions::addRequiredArg(), ARGCV, CHECK_ARRAYS_EQUAL, CHECK_EQUAL, ProgOptions::getReqArg(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_int_vect_opt()

void test_int_vect_opt ( )

Definition at line 339 of file test_prog_opt.cpp.

340 {
341  ProgOptions opts;
342  std::vector< int > list1, list2;
343  opts.addOpt( "ids,d", "id list", &list1 );
344  const char* argv[] = { "test", "--ids=1,2,3", "--ids", "4-10", "-d", "4-5,2" };
345 
346  const int exp1[] = { 1, 2, 3 };
347  const int exp1_len = sizeof( exp1 ) / sizeof( exp1[0] );
348  const int exp2[] = { 4, 5, 6, 7, 8, 9, 10 };
349  const int exp2_len = sizeof( exp2 ) / sizeof( exp2[0] );
350  const int exp3[] = { 4, 5, 2 };
351  const int exp3_len = sizeof( exp3 ) / sizeof( exp3[0] );
352  std::vector< int > all;
353  std::copy( exp1, exp1 + exp1_len, std::back_inserter( all ) );
354  std::copy( exp2, exp2 + exp2_len, std::back_inserter( all ) );
355  std::copy( exp3, exp3 + exp3_len, std::back_inserter( all ) );
356 
357  opts.parseCommandLine( ARGCV( argv ) );
358  CHECK_EQUAL( all, list1 );
359  CHECK( opts.getOpt( ",d", &list2 ) );
360  CHECK_ARRAYS_EQUAL( exp3, exp3_len, &list2[0], list2.size() );
361 
362  std::vector< std::vector< int > > lists;
363  opts.getOptAllArgs( "ids", lists );
364  CHECK_EQUAL( (size_t)3, lists.size() );
365  CHECK_ARRAYS_EQUAL( exp1, exp1_len, &lists[0][0], lists[0].size() );
366  CHECK_ARRAYS_EQUAL( exp2, exp2_len, &lists[1][0], lists[1].size() );
367  CHECK_ARRAYS_EQUAL( exp3, exp3_len, &lists[2][0], lists[2].size() );
368 
369  list2.clear();
370  opts.getOptAllArgs( "ids", list2 );
371  CHECK_EQUAL( all, list2 );
372 }

References ProgOptions::addOpt(), ARGCV, CHECK, CHECK_ARRAYS_EQUAL, CHECK_EQUAL, ProgOptions::getOpt(), ProgOptions::getOptAllArgs(), ProgOptions::parseCommandLine(), and size.

Referenced by main().

◆ test_optional_arg()

void test_optional_arg ( )

Definition at line 416 of file test_prog_opt.cpp.

417 {
418  ProgOptions opts1;
419  std::string init, fini;
420  opts1.addRequiredArg( "init", "required initial argument", &init );
421  opts1.addOptionalArgs< std::string >( 1, "mid", "optional arguments" );
422  opts1.addRequiredArg( "fini", "required final argument", &fini );
423  const char* argv1[] = { "test", "arg1", "arg2" };
424  opts1.parseCommandLine( ARGCV( argv1 ) );
425  std::vector< std::string > list;
426  CHECK_EQUAL( "arg1", init );
427  CHECK_EQUAL( "arg2", fini );
428  opts1.getArgs( "mid", list );
429  CHECK( list.empty() );
430 
431  ProgOptions opts2;
432  init.clear();
433  fini.clear();
434  opts2.addRequiredArg( "init", "required initial argument", &init );
435  opts2.addOptionalArgs< std::string >( 1, "mid", "optional arguments" );
436  opts2.addRequiredArg( "fini", "required final argument", &fini );
437  const char* argv2[] = { "test", "arg1", "arg2", "arg3" };
438  opts2.parseCommandLine( ARGCV( argv2 ) );
439  CHECK_EQUAL( "arg1", init );
440  CHECK_EQUAL( "arg3", fini );
441  list.clear();
442  opts2.getArgs( "mid", list );
443  CHECK_EQUAL( (size_t)1, list.size() );
444  CHECK_EQUAL( "arg2", list[0] );
445 }

References ProgOptions::addOptionalArgs(), ProgOptions::addRequiredArg(), ARGCV, CHECK, CHECK_EQUAL, ProgOptions::getArgs(), init(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_optional_args()

void test_optional_args ( )

Definition at line 389 of file test_prog_opt.cpp.

390 {
391  ProgOptions opts1;
392  std::string arg;
393  opts1.addOptionalArgs< std::string >( 0, "opts", "optional arguments" );
394  opts1.addRequiredArg( "req", "required final argument", &arg );
395  const char* argv1[] = { "test", "arg" };
396  opts1.parseCommandLine( ARGCV( argv1 ) );
397  std::vector< std::string > list;
398  CHECK_EQUAL( "arg", arg );
399  opts1.getArgs( "opts", list );
400  CHECK( list.empty() );
401 
402  ProgOptions opts2;
403  arg.clear();
404  opts2.addOptionalArgs< std::string >( 0, "opts", "optional arguments" );
405  opts2.addRequiredArg( "req", "required final argument", &arg );
406  const char* argv2[] = { "test", "arg1", "arg2", "arg" };
407  opts2.parseCommandLine( ARGCV( argv2 ) );
408  CHECK_EQUAL( "arg", arg );
409  list.clear();
410  opts2.getArgs( "opts", list );
411  CHECK_EQUAL( (size_t)2, list.size() );
412  CHECK_EQUAL( "arg1", list[0] );
413  CHECK_EQUAL( "arg2", list[1] );
414 }

References ProgOptions::addOptionalArgs(), ProgOptions::addRequiredArg(), ARGCV, CHECK, CHECK_EQUAL, ProgOptions::getArgs(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_real_arg()

void test_real_arg ( )

Definition at line 210 of file test_prog_opt.cpp.

211 {
212  const double EPS = std::numeric_limits< double >::epsilon();
213  ProgOptions opts;
214  double val1 = 5;
215  opts.addRequiredArg( "arg", "my test arg", &val1 );
216  opts.addRequiredArg< double >( "arg2", "my other test arg" );
217  const char* argv[] = { "test", "--", "-1.2", "1.01e-3" };
218  opts.parseCommandLine( ARGCV( argv ) );
219  CHECK_REAL_EQUAL( -1.2, val1, EPS );
220  CHECK_REAL_EQUAL( 1.01e-3, opts.getReqArg< double >( "arg2" ), EPS );
221  CHECK_REAL_EQUAL( -1.2, opts.getReqArg< double >( "arg" ), EPS );
222 }

References ProgOptions::addRequiredArg(), ARGCV, CHECK_REAL_EQUAL, EPS, ProgOptions::getReqArg(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_real_opt()

void test_real_opt ( )

Definition at line 184 of file test_prog_opt.cpp.

185 {
186  const double EPS = std::numeric_limits< double >::epsilon();
187  ProgOptions opts;
188  double val1 = -1;
189  opts.addOpt( "long,s", "my real opt", &val1 );
190  const char* argv[] = { "test", "-s", "2", "--long", "2e5", "--long=-0.01" };
191  opts.parseCommandLine( ARGCV( argv ) );
192  CHECK_REAL_EQUAL( -0.01, val1, EPS );
193  double val2 = -1;
194  CHECK( opts.getOpt( ",s", &val2 ) );
195  CHECK_REAL_EQUAL( -0.01, val2, EPS );
196  val2 = -1;
197  CHECK( opts.getOpt( "long,s", &val2 ) );
198  CHECK_REAL_EQUAL( -0.01, val2, EPS );
199  val2 = -1;
200  CHECK( opts.getOpt( "long", &val2 ) );
201  CHECK_REAL_EQUAL( -0.01, val2, EPS );
202  std::vector< double > list;
203  opts.getOptAllArgs( ",s", list );
204  CHECK_EQUAL( (size_t)3, list.size() );
205  CHECK_REAL_EQUAL( 2, list[0], EPS );
206  CHECK_REAL_EQUAL( 2e5, list[1], EPS );
207  CHECK_REAL_EQUAL( -0.01, list[2], EPS );
208 }

References ProgOptions::addOpt(), ARGCV, CHECK, CHECK_EQUAL, CHECK_REAL_EQUAL, EPS, ProgOptions::getOpt(), ProgOptions::getOptAllArgs(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_squashed_short()

void test_squashed_short ( )

Definition at line 447 of file test_prog_opt.cpp.

448 {
449  ProgOptions opts;
450  int intval = 0;
451  double realval = 0;
452  bool flagval = false;
453  std::string strval;
454  opts.addOpt< void >( ",f", "flag", &flagval );
455  opts.addOpt( ",i", "int", &intval );
456  opts.addOpt( ",r", "real", &realval );
457  opts.addOpt( ",s", "str", &strval );
458 
459  const char* argv[] = { "test", "-ifsrff", "-0xBEEF", "string", "-1.0e55" };
460  opts.parseCommandLine( ARGCV( argv ) );
461 
462  CHECK_EQUAL( -0xBEEF, intval );
463  CHECK_REAL_EQUAL( -1.0e55, realval, 1e-6 );
464  CHECK_EQUAL( "string", strval );
465  CHECK( flagval );
466  CHECK_EQUAL( 3, opts.numOptSet( ",f" ) );
467  CHECK_EQUAL( 1, opts.numOptSet( ",i" ) );
468  CHECK_EQUAL( 1, opts.numOptSet( ",r" ) );
469  CHECK_EQUAL( 1, opts.numOptSet( ",s" ) );
470 }

References ProgOptions::addOpt(), ARGCV, CHECK, CHECK_EQUAL, CHECK_REAL_EQUAL, ProgOptions::numOptSet(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_string_arg()

void test_string_arg ( )

Definition at line 268 of file test_prog_opt.cpp.

269 {
270  ProgOptions opts;
271  std::string val2;
272  opts.addRequiredArg< std::string >( "arg", "my test arg" );
273  opts.addRequiredArg( "arg2", "my other test arg", &val2 );
274  const char* argv[] = { "test", "my_string", "with spaces" };
275  opts.parseCommandLine( ARGCV( argv ) );
276  CHECK_EQUAL( "with spaces", val2 );
277  CHECK_EQUAL( "my_string", opts.getReqArg< std::string >( "arg" ) );
278  CHECK_EQUAL( "with spaces", opts.getReqArg< std::string >( "arg2" ) );
279 }

References ProgOptions::addRequiredArg(), ARGCV, CHECK_EQUAL, ProgOptions::getReqArg(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_string_opt()

void test_string_opt ( )

Definition at line 224 of file test_prog_opt.cpp.

225 {
226  ProgOptions opts;
227  std::string val1;
228  opts.addOpt( "long,s", "my first opt", &val1 );
229  opts.addOpt< std::string >( "second,2", "my second opt" );
230 
231  const char* argv[] = { "test", "--long", "2", "-s", "foobar", "-2", "two", "--second=testval" };
232  opts.parseCommandLine( ARGCV( argv ) );
233 
234  CHECK_EQUAL( "foobar", val1 );
235  std::string val2;
236  CHECK( opts.getOpt( ",s", &val2 ) );
237  CHECK_EQUAL( "foobar", val2 );
238  val2.clear();
239  CHECK( opts.getOpt( "long,s", &val2 ) );
240  CHECK_EQUAL( "foobar", val2 );
241  val2.clear();
242  CHECK( opts.getOpt( "long", &val2 ) );
243  CHECK_EQUAL( "foobar", val2 );
244 
245  val2.clear();
246  CHECK( opts.getOpt( ",2", &val2 ) );
247  CHECK_EQUAL( "testval", val2 );
248  val2.clear();
249  CHECK( opts.getOpt( "second,2", &val2 ) );
250  CHECK_EQUAL( "testval", val2 );
251  val2.clear();
252  CHECK( opts.getOpt( "second", &val2 ) );
253  CHECK_EQUAL( "testval", val2 );
254 
255  std::vector< std::string > list;
256  opts.getOptAllArgs( "long", list );
257  CHECK_EQUAL( (size_t)2, list.size() );
258  CHECK_EQUAL( "2", list[0] );
259  CHECK_EQUAL( "foobar", list[1] );
260 
261  list.clear();
262  opts.getOptAllArgs( ",2", list );
263  CHECK_EQUAL( (size_t)2, list.size() );
264  CHECK_EQUAL( "two", list[0] );
265  CHECK_EQUAL( "testval", list[1] );
266 }

References ProgOptions::addOpt(), ARGCV, CHECK, CHECK_EQUAL, ProgOptions::getOpt(), ProgOptions::getOptAllArgs(), and ProgOptions::parseCommandLine().

Referenced by main().

◆ test_string_rank_subst()

void test_string_rank_subst ( )

Definition at line 281 of file test_prog_opt.cpp.

282 {
283  std::string exp1 = "ddd%";
284  std::string exp2 = "%";
285  std::string exp2b = "foo%bar";
286  std::string exp3 = "%string%";
287  std::string exp4 = "file.%";
288 
289  ProgOptions opts;
290  std::string val1, val2, val3, val4;
291  opts.addOpt( ",n", "no subst flag", &val1, 0 );
292  opts.addOpt( "dosub,s", "subst flag", &val2, ProgOptions::rank_subst );
293  opts.addRequiredArg( "nos", "no subst arg", &val3, 0 );
294  opts.addRequiredArg( "sub", "subst arg", &val4, ProgOptions::rank_subst );
295  std::string eqflg( "--dosub=" );
296  eqflg += exp2;
297  const char* argv[] = { "test", exp3.c_str(), exp4.c_str(), "-s", exp2b.c_str(), "-n", exp1.c_str(), eqflg.c_str() };
298  opts.parseCommandLine( ARGCV( argv ) );
299 
300 #ifdef MOAB_HAVE_MPI
301  int rank, size;
302  MPI_Comm_rank( MPI_COMM_WORLD, &rank );
303  MPI_Comm_size( MPI_COMM_WORLD, &size );
304  char buffer[64];
305  int width = 1;
306  while( size > 10 )
307  {
308  width++;
309  size /= 10;
310  }
311  sprintf( buffer, "%0*d", width, rank );
312  exp2 = buffer;
313  exp2b = std::string( "foo" ) + buffer + "bar";
314  exp4 = std::string( "file." ) + buffer;
315 #endif
316 
317  CHECK_EQUAL( exp1, val1 );
318  CHECK_EQUAL( exp2, val2 );
319  CHECK_EQUAL( exp3, val3 );
320  CHECK_EQUAL( exp4, val4 );
321 
322  val1.clear();
323  val2.clear();
324  CHECK( opts.getOpt( ",n", &val1 ) );
325  CHECK( opts.getOpt( "dosub", &val2 ) );
326 
327  CHECK_EQUAL( exp1, val1 );
328  CHECK_EQUAL( exp2, val2 );
329  CHECK_EQUAL( exp3, opts.getReqArg< std::string >( "nos" ) );
330  CHECK_EQUAL( exp4, opts.getReqArg< std::string >( "sub" ) );
331 
332  std::vector< std::string > list;
333  opts.getOptAllArgs( ",s", list );
334  CHECK_EQUAL( (size_t)2, list.size() );
335  CHECK_EQUAL( exp2b, list[0] );
336  CHECK_EQUAL( exp2, list[1] );
337 }

References ProgOptions::addOpt(), ProgOptions::addRequiredArg(), ARGCV, buffer, CHECK, CHECK_EQUAL, ProgOptions::getOpt(), ProgOptions::getOptAllArgs(), ProgOptions::getReqArg(), MPI_COMM_WORLD, ProgOptions::parseCommandLine(), rank, ProgOptions::rank_subst, and size.

Referenced by main().