From 4fe6905bc86d563732d0b4ffcc8f6fa7b9b44046 Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Wed, 15 Feb 2017 10:48:08 +0100
Subject: [PATCH] Improved regtest

---
 regtest/basic/rt-make-exceptions/main.cpp     | 72 +++++++++++++------
 .../basic/rt-make-exceptions/output.reference | 63 ++++++++++++----
 2 files changed, 97 insertions(+), 38 deletions(-)

diff --git a/regtest/basic/rt-make-exceptions/main.cpp b/regtest/basic/rt-make-exceptions/main.cpp
index 109cf184d..110ba9134 100644
--- a/regtest/basic/rt-make-exceptions/main.cpp
+++ b/regtest/basic/rt-make-exceptions/main.cpp
@@ -7,6 +7,29 @@
 
 using namespace PLMD;
 
+void test_line(std::ostream & ofs,Plumed & p,const std::string & arg){
+  std::string cmd="readInputLine";
+  ofs<<cmd<<" "<<arg<<std::endl;
+  try{
+    p.cmd(cmd.c_str(),arg.c_str());
+    ofs<<"+++ !!!! uncatched !!!!"<<std::endl;
+  } catch(Exception&e) {
+    ofs<<"+++ catched"<<std::endl;
+  }
+}
+
+void test_this(std::ostream & ofs,Plumed & p,const std::string & cmd,const void*arg){
+  ofs<<cmd;
+  if(!arg) ofs<<" NULL";
+  ofs<<std::endl;
+  try{
+    p.cmd(cmd.c_str(),arg);
+    ofs<<"+++ !!!! uncatched !!!!"<<std::endl;
+  } catch(Exception&e) {
+    ofs<<"+++ catched"<<std::endl;
+  }
+}
+
 int main(){
 
   std::ofstream ofs("output");
@@ -14,16 +37,20 @@ int main(){
   {
 // test a mistake in timer
     Stopwatch sw;
-    try{ sw.pause();
-    } catch(Exception& e) { ofs<<"E pause\n"; }
+    ofs<<"pause"<<std::endl;
+    try{
+      sw.pause();
+      ofs<<"+++ !!!! uncatched !!!!"<<std::endl;
+    } catch(Exception& e) {
+      ofs<<"+++ catched"<<std::endl;
+    }
   }
 
   Plumed plumed;
 
 // first try to wrongly set real precision
   unsigned i=127;
-  try{ plumed.cmd("setRealPrecision",&i);
-  } catch(Exception&e){ ofs<<"E setRealPrecision"<<std::endl;}
+  test_this(ofs,plumed,"setRealPrecision",&i);
 
   int natoms=10;
 
@@ -42,38 +69,38 @@ int main(){
 // Each of them will raise an exception
 // Notice that name "d" will not be reserved and it will be possible
 // to use it later
-  try{ plumed.cmd("readInputLine","d: DISTANCE ATOMS=1,2,3");
-  } catch(Exception& e) {   ofs<<"E d:DISTANCE ATOMS=1,2,3"<<std::endl; }
-  try{ plumed.cmd("readInputLine","d:DISTANCE ATOMS=1,2");
-  } catch(Exception& e) {   ofs<<"E d:DISTANCE ATOMS=1,2"<<std::endl; }
-  try{ plumed.cmd("readInputLine","d: DIST ANCE ATOMS=1,2");
-  } catch(Exception& e) {   ofs<<"E d: DIST ANCE ATOMS=1,2"<<std::endl; }
-  try{ plumed.cmd("readInputLine","d: ANGLE ATOMS=1,2,3,4,5");
-  } catch(Exception& e) {   ofs<<"E d: ANGLE ATOMS=1,2,3,4,5 "<<std::endl; }
-  try{ plumed.cmd("readInputLine","d: COORDINATION GROUPA=1 GROUPB=2 R_0=0.5 NN=1.5");
-  } catch(Exception& e) {   ofs<<"E d: COORDINATION GROUPA=1 GROUPB=2 R_0=0.5 NN=1.5"<<std::endl; }
+  test_line(ofs,plumed,"d: DISTANCE ATOMS=1,2,3");
+  test_line(ofs,plumed,"d:DISTANCE ATOMS=1,2");
+  test_line(ofs,plumed,"d: DIST ANCE ATOMS=1,2");
+  test_line(ofs,plumed,"d: DISTANCE ATOMS=1,2 COMPONENTS SCALED_COMPONENTS");
+  test_line(ofs,plumed,"d: GYRATION ATOMS=");
+  test_line(ofs,plumed,"d: GYRATION ATOMS=1-4 TYPE=WHAT");
+  test_line(ofs,plumed,"d: POSITION ATOM=1,2");
+  test_line(ofs,plumed,"d: PUCKERING ATOMS=1-4");
+  test_line(ofs,plumed,"d: ANGLE ATOMS=1,2,3,4,5");
+  test_line(ofs,plumed,"d: COORDINATION GROUPA=1 GROUPB=2 R_0=0.5 NN=1.5");
 
 // these should not fail
   plumed.cmd("readInputLine","d: DISTANCE ATOMS=1,2");
   plumed.cmd("readInputLine","d1: DISTANCE ATOMS={1 2}"); // check if braces are parsed correctly
   plumed.cmd("readInputLine","RESTRAINT ARG=d AT=0 KAPPA=1");
 
-// Check stupid option to RESTART
-  try{ plumed.cmd("readInputLine","METAD ARG=d PACE=1 SIGMA=1 HEIGHT=0 FILE=H1 RESTART=WHAT");
-  } catch(Exception& e) {   ofs<<"E METAD ARG=d PACE=1 SIGMA=1 HEIGHT=0 FILE=H1 RESTART=WHAT"<<std::endl; }
+  test_line(ofs,plumed,"METAD ARG=d PACE=1 SIGMA=1 HEIGHT=0 FILE=H1 RESTART=WHAT");
+  test_line(ofs,plumed,"METAD ARG=d PACE=1 SIGMA=1 TAU=5");
+  test_line(ofs,plumed,"COMBINE ARG=d,d1 COEFFICIENTS=3");
+  test_line(ofs,plumed,"COMBINE ARG=d,d1 COEFFICIENTS=3,3 PARAMETERS=1");
+  test_line(ofs,plumed,"COMBINE ARG=d,d1 COEFFICIENTS=3,3 PARAMETERS=1,2 POWERS=4");
 
 // these should not fail
   plumed.cmd("readInputLine","m1: METAD ARG=d PACE=1 SIGMA=5 HEIGHT=1 FILE=H1 FMT=%9.5f");
   plumed.cmd("readInputLine","m2: METAD ARG=d PACE=2 SIGMA=5 HEIGHT=1 FILE=H2 FMT=%9.5f");
   plumed.cmd("readInputLine","PRINT ARG=d,d1,m1.bias FILE=COLVAR FMT=%9.5f");
 
-  try{ plumed.cmd("something random here",NULL);
-  } catch(Exception& e) { ofs<<"E random cmd"<<std::endl;}
+  test_this(ofs,plumed,"something random here",NULL);
   for(int step=0;step<3;step++){
 
 // this should fail
-    try{ plumed.cmd("setStep",NULL);
-    } catch(Exception& e) { ofs<<"E cmd setStep NULL"<<std::endl;}
+    test_this(ofs,plumed,"setStep",NULL);
 
     plumed.cmd("setStep",&step);
     plumed.cmd("setPositions",&positions[0]);
@@ -86,8 +113,7 @@ int main(){
     plumed.cmd("calc");
 
 // this should fail
-    try{ plumed.cmd("setMasses",&masses[0]);
-    } catch(Exception& e) { ofs<<"E setMasses called in wrong place"<<std::endl;}
+    test_this(ofs,plumed,"setMasses",&masses[0]);
   }
 
   return 0;
diff --git a/regtest/basic/rt-make-exceptions/output.reference b/regtest/basic/rt-make-exceptions/output.reference
index c84dc4e11..2bf696e7c 100644
--- a/regtest/basic/rt-make-exceptions/output.reference
+++ b/regtest/basic/rt-make-exceptions/output.reference
@@ -1,15 +1,48 @@
-E pause
-E setRealPrecision
-E d:DISTANCE ATOMS=1,2,3
-E d:DISTANCE ATOMS=1,2
-E d: DIST ANCE ATOMS=1,2
-E d: ANGLE ATOMS=1,2,3,4,5 
-E d: COORDINATION GROUPA=1 GROUPB=2 R_0=0.5 NN=1.5
-E METAD ARG=d PACE=1 SIGMA=1 HEIGHT=0 FILE=H1 RESTART=WHAT
-E random cmd
-E cmd setStep NULL
-E setMasses called in wrong place
-E cmd setStep NULL
-E setMasses called in wrong place
-E cmd setStep NULL
-E setMasses called in wrong place
+pause
++++ catched
+setRealPrecision
++++ catched
+readInputLine d: DISTANCE ATOMS=1,2,3
++++ catched
+readInputLine d:DISTANCE ATOMS=1,2
++++ catched
+readInputLine d: DIST ANCE ATOMS=1,2
++++ catched
+readInputLine d: DISTANCE ATOMS=1,2 COMPONENTS SCALED_COMPONENTS
++++ catched
+readInputLine d: GYRATION ATOMS=
++++ catched
+readInputLine d: GYRATION ATOMS=1-4 TYPE=WHAT
++++ catched
+readInputLine d: POSITION ATOM=1,2
++++ catched
+readInputLine d: PUCKERING ATOMS=1-4
++++ catched
+readInputLine d: ANGLE ATOMS=1,2,3,4,5
++++ catched
+readInputLine d: COORDINATION GROUPA=1 GROUPB=2 R_0=0.5 NN=1.5
++++ catched
+readInputLine METAD ARG=d PACE=1 SIGMA=1 HEIGHT=0 FILE=H1 RESTART=WHAT
++++ catched
+readInputLine METAD ARG=d PACE=1 SIGMA=1 TAU=5
++++ catched
+readInputLine COMBINE ARG=d,d1 COEFFICIENTS=3
++++ catched
+readInputLine COMBINE ARG=d,d1 COEFFICIENTS=3,3 PARAMETERS=1
++++ catched
+readInputLine COMBINE ARG=d,d1 COEFFICIENTS=3,3 PARAMETERS=1,2 POWERS=4
++++ catched
+something random here NULL
++++ catched
+setStep NULL
++++ catched
+setMasses
++++ catched
+setStep NULL
++++ catched
+setMasses
++++ catched
+setStep NULL
++++ catched
+setMasses
++++ catched
-- 
GitLab