Skip to content

Commit

Permalink
- Update the library testing:
Browse files Browse the repository at this point in the history
- Output both the actual signal interpolated and raw so we can see if interpolation did something odd to it
- Add a tolerance setting for (max-min)*reltol to avoid problems comparing signals close to 0
- Added an API call that can directly output html instead of a csv-file (so we could serve html-pages directly from two result-files by doing the diff on-line)


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@17885 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Oct 25, 2013
1 parent 617ff97 commit 7ac7af8
Show file tree
Hide file tree
Showing 8 changed files with 245 additions and 96 deletions.
18 changes: 17 additions & 1 deletion Compiler/FrontEnd/ModelicaBuiltin.mo
Expand Up @@ -2345,7 +2345,8 @@ public function diffSimulationResults "compares simulation results."
input String actualFile;
input String expectedFile;
input String diffPrefix;
input Real relTol := 1e-4 "y tolerance";
input Real relTol := 1e-3 "y tolerance";
input Real relTolDiffMinMax := 1e-4 "y tolerance based on the difference between the maximum and minimum of the signal";
input Real rangeDelta := 0.002 "x tolerance";
input String[:] vars := fill("",0);
input Boolean keepEqualResults := false;
Expand All @@ -2358,6 +2359,21 @@ annotation(Documentation(info="<html>
</html>"),preferredView="text");
end diffSimulationResults;

public function diffSimulationResultsHtml
input String var;
input String actualFile;
input String expectedFile;
input Real relTol := 1e-3 "y tolerance";
input Real relTolDiffMinMax := 1e-4 "y tolerance based on the difference between the maximum and minimum of the signal";
input Real rangeDelta := 0.002 "x tolerance";
output String html;
external "builtin";
annotation(Documentation(info="<html>
<p>Takes two result files and compares them. By default, all selected variables that are not equal in the two files are output to diffPrefix.varName.csv.</p>
<p>The output is the names of the variables for which files were generated.</p>
</html>"),preferredView="text");
end diffSimulationResultsHtml;

public function checkTaskGraph "Checks if the given taskgraph has the same structure as the reference taskgraph and if all attributes are set correctly."
input String filename;
input String reffilename;
Expand Down
24 changes: 19 additions & 5 deletions Compiler/Script/CevalScript.mo
Expand Up @@ -838,7 +838,7 @@ algorithm
list<GlobalScript.Variable> iv;
list<GlobalScript.CompiledCFunction> cf;
GlobalScript.SimulationOptions simOpt;
Real startTime,stopTime,tolerance;
Real startTime,stopTime,tolerance,reltol,reltolDiffMinMax,rangeDelta;
DAE.Exp startTimeExp,stopTimeExp,toleranceExp;
DAE.Type tp;
Absyn.Class absynClass;
Expand Down Expand Up @@ -2446,7 +2446,7 @@ algorithm
filename_1 = Util.testsuiteFriendlyPath(filename_1);
filename_1 = Util.if_(System.substring(filename_1,1,1) ==& "/",filename_1,stringAppendList({pwd,pd,filename_1}));
filename2 = Util.if_(System.substring(filename2,1,1) ==& "/",filename2,stringAppendList({pwd,pd,filename2}));
vars_1 = List.map(cvars, ValuesUtil.valString);
vars_1 = List.map(cvars, ValuesUtil.extractValueString);
strings = SimulationResults.cmpSimulationResults(Config.getRunningTestsuite(),filename,filename_1,filename2,x1,x2,vars_1);
cvars = List.map(strings,ValuesUtil.makeString);
v = ValuesUtil.makeArray(cvars);
Expand All @@ -2456,16 +2456,16 @@ algorithm
case (cache,env,"compareSimulationResults",_,st,_)
then (cache,Values.STRING("Error in compareSimulationResults"),st);

case (cache,env,"diffSimulationResults",{Values.STRING(filename),Values.STRING(filename_1),Values.STRING(filename2),Values.REAL(x1),Values.REAL(x2),Values.ARRAY(valueLst=cvars),Values.BOOL(b)},st,_)
case (cache,env,"diffSimulationResults",{Values.STRING(filename),Values.STRING(filename_1),Values.STRING(filename2),Values.REAL(reltol),Values.REAL(reltolDiffMinMax),Values.REAL(rangeDelta),Values.ARRAY(valueLst=cvars),Values.BOOL(b)},st,_)
equation
pwd = System.pwd();
pd = System.pathDelimiter();
filename = Util.if_(System.substring(filename,1,1) ==& "/",filename,stringAppendList({pwd,pd,filename}));
filename_1 = Util.testsuiteFriendlyPath(filename_1);
filename_1 = Util.if_(System.substring(filename_1,1,1) ==& "/",filename_1,stringAppendList({pwd,pd,filename_1}));
filename2 = Util.if_(System.substring(filename2,1,1) ==& "/",filename2,stringAppendList({pwd,pd,filename2}));
vars_1 = List.map(cvars, ValuesUtil.valString);
(b,strings) = SimulationResults.diffSimulationResults(Config.getRunningTestsuite(),filename,filename_1,filename2,x1,x2,vars_1,b);
vars_1 = List.map(cvars, ValuesUtil.extractValueString);
(b,strings) = SimulationResults.diffSimulationResults(Config.getRunningTestsuite(),filename,filename_1,filename2,reltol,reltolDiffMinMax,rangeDelta,vars_1,b);
cvars = List.map(strings,ValuesUtil.makeString);
v = ValuesUtil.makeArray(cvars);
then
Expand All @@ -2476,6 +2476,20 @@ algorithm
v = ValuesUtil.makeArray({});
then (cache,Values.TUPLE({Values.BOOL(false),v}),st);

case (cache,env,"diffSimulationResultsHtml",{Values.STRING(str),Values.STRING(filename),Values.STRING(filename_1),Values.REAL(reltol),Values.REAL(reltolDiffMinMax),Values.REAL(rangeDelta)},st,_)
equation
pwd = System.pwd();
pd = System.pathDelimiter();
filename = Util.if_(System.substring(filename,1,1) ==& "/",filename,stringAppendList({pwd,pd,filename}));
filename_1 = Util.testsuiteFriendlyPath(filename_1);
filename_1 = Util.if_(System.substring(filename_1,1,1) ==& "/",filename_1,stringAppendList({pwd,pd,filename_1}));
str = SimulationResults.diffSimulationResultsHtml(Config.getRunningTestsuite(),filename,filename_1,reltol,reltolDiffMinMax,rangeDelta,str);
then
(cache,Values.STRING(str),st);

case (cache,env,"diffSimulationResultsHtml",_,st,_)
then (cache,Values.STRING(""),st);

case (cache,env,"checkTaskGraph",{Values.STRING(filename),Values.STRING(filename_1)},st,_)
equation
pwd = System.pwd();
Expand Down
17 changes: 15 additions & 2 deletions Compiler/Util/SimulationResults.mo
Expand Up @@ -94,13 +94,26 @@ public function diffSimulationResults
input String reffilename;
input String prefix;
input Real refTol;
input Real absTol;
input Real relTolDiffMaxMin;
input Real rangeDelta;
input list<String> vars;
input Boolean keepEqualResults;
output Boolean success;
output list<String> res;
external "C" res=SimulationResults_diffSimulationResults(runningTestsuite,filename,reffilename,prefix,refTol,absTol,vars,keepEqualResults,success) annotation(Library = "omcruntime");
external "C" res=SimulationResults_diffSimulationResults(runningTestsuite,filename,reffilename,prefix,refTol,relTolDiffMaxMin,rangeDelta,vars,keepEqualResults,success) annotation(Library = "omcruntime");
end diffSimulationResults;

public function diffSimulationResultsHtml
input Boolean runningTestsuite;
input String filename;
input String reffilename;
input Real refTol;
input Real relTolDiffMaxMin;
input Real rangeDelta;
input String var;
output String html;
external "C" html=SimulationResults_diffSimulationResultsHtml(runningTestsuite,var,filename,reffilename,refTol,relTolDiffMaxMin,rangeDelta) annotation(Library = "omcruntime");
end diffSimulationResultsHtml;

end SimulationResults;

12 changes: 8 additions & 4 deletions Compiler/runtime/SimulationResultsCmp.c
Expand Up @@ -598,7 +598,7 @@ static const char* getTimeVarName(void *vars) {
#include "SimulationResultsCmpTubes.c"

/* Common, huge function, for both result comparison and result diff */
void* SimulationResultsCmp_compareResults(int isResultCmp, int runningTestsuite, const char *filename, const char *reffilename, const char *resultfilename, double reltol, double abstol, void *vars, int keepEqualResults, int *success)
void* SimulationResultsCmp_compareResults(int isResultCmp, int runningTestsuite, const char *filename, const char *reffilename, const char *resultfilename, double reltol, double abstol, double rangeDelta, double reltolDiffMaxMin, void *vars, int keepEqualResults, int *success, int isHtml, char **htmlOut)
{
char **cmpvars=NULL;
char **cmpdiffvars=NULL;
Expand Down Expand Up @@ -735,10 +735,12 @@ void* SimulationResultsCmp_compareResults(int isResultCmp, int runningTestsuite,
}
}
/* compare */
if (isResultCmp) {
if (isHtml) {
vardiffindx = cmpDataTubes(isResultCmp,var,&time,&timeref,&data,&dataref,reltol,rangeDelta,reltolDiffMaxMin,&ddf,cmpdiffvars,vardiffindx,keepEqualResults,&res,resultfilename,1,htmlOut);
} if (isResultCmp) {
vardiffindx = cmpData(isResultCmp,var,&time,&timeref,&data,&dataref,reltol,abstol,&ddf,cmpdiffvars,vardiffindx,keepEqualResults,&res,resultfilename);
} else {
vardiffindx = cmpDataTubes(isResultCmp,var,&time,&timeref,&data,&dataref,reltol,/*rangeDelta*/abstol,&ddf,cmpdiffvars,vardiffindx,keepEqualResults,&res,resultfilename);
vardiffindx = cmpDataTubes(isResultCmp,var,&time,&timeref,&data,&dataref,reltol,rangeDelta,reltolDiffMaxMin,&ddf,cmpdiffvars,vardiffindx,keepEqualResults,&res,resultfilename,0,0);
}
/* free */
if (dataref.data) free(dataref.data);
Expand All @@ -763,7 +765,9 @@ void* SimulationResultsCmp_compareResults(int isResultCmp, int runningTestsuite,
res = mk_cons(mk_scon("Files Equal!"),res);
}
} else {
*success = 0==vardiffindx;
if (success) {
*success = 0==vardiffindx;
}
}

// if (var1) free(var1);
Expand Down

0 comments on commit 7ac7af8

Please sign in to comment.