- 
                Notifications
    
You must be signed in to change notification settings  - Fork 175
 
Regression testing of Modelica and ModelicaTest
MSL regression testing started in 2014. See #1392 and MSLRegressionTesting.pdf for the documentation.
Regression testing consists of various steps to be performed as automated as possible.
- 
Load libraries Modelica and ModelicaTest in Dymola and verify that you also loaded the Dymola-specific ModelicaServices
 - 
Remove Modelica/Resources/C-Sources/ModelicaInternal.c from the MSL sources in case of testing with Dymola version < 2021
 - 
Clone the Release checks repository
 
git clone https://github.com/modelica-tools/msl-release
- 
Open ReleaseChecks.mo in Dymola
 - 
Run the pedantic check on Modelica and ModelicaTest
 
ReleaseChecks.printExecutables(libraries={"Modelica", "ModelicaTest"})
- Check the created file "log_failed.txt" for all models that fail the pedantic translation and create a new GitHub issue. See #3435 for an example report.
 
- Open a git bash and run
 
git config --get remote.origin.url
git rev-parse --short HEAD
git status --porcelain --untracked-files=no
to determine the Git URL, the Git revision and the git status of the repository under test.
- Set up the date utility tool
 
Extract getdatetime.exe from getdatetime.zip to the working directory
- Simulate all example and test models with a default tolerance of 1e-6
 
ReleaseChecks.simulateExecutables(
  libraries={"Modelica", "ModelicaTest"},
  directories={"modelica://Modelica/Resources/Reference", "modelica://ModelicaTest/Resources/Reference"},
  incrementalRun=false,
  keepResultFile=false,
  numberOfIntervals=5000,
  tolerance=1e-6,
  useTolerance=false,
  gitURL="https://github.com/modelica/ModelicaStandardLibrary.git",
  gitRevision="bd753330a",
  gitStatus="D Modelica/Resources/C-Sources/ModelicaInternal.c, M ModelicaServices/package.mo",
  description="Reg test MSL v4.0.0-rc.1")
Check the options of ReleaseChecks.simulateExecutables. For example, if you want to keep the simulation MAT files containing the trajectories of all variables, you can set the option keepResultFile. Or, you probably want to set the compiler to differ from the default value.
The simulation results will be written to the output directories "modelica://Modelica/Resources/Reference/Modelica" and "modelica://ModelicaTest/Resources/Reference/ModelicaTest", respectively. In case these directories already contain simulation log files or simulation result files from previous runs, they will be deleted first.
Manual steps during and after the run:
- 
The simulation of ModelicaTest.Fluid.TestPipesAndValves.DynamicPipeClosingValve does not terminate and needs to be manually stopped during the run. See #3415 for the report.
 - 
The simulation results of Modelica.Electrical.Analog.Examples.OpAmps.DifferentialAmplifier are invalid due to #3518. The simulation log files need to be manually deleted after the run (to force another simulation by a repeated simulation run).
 
- Repeat the simulation for all failed models with an explicit tolerance of 1e-6
 
ReleaseChecks.simulateExecutables(
  libraries={"Modelica", "ModelicaTest"},
  directories={"modelica://Modelica/Resources/Reference", "modelica://ModelicaTest/Resources/Reference"},
  incrementalRun=true,
  keepResultFile=false,
  numberOfIntervals=5000,
  tolerance=1e-6,
  useTolerance=true,
  gitURL="https://github.com/modelica/ModelicaStandardLibrary.git",
  gitRevision="bd753330a",
  gitStatus="D Modelica/Resources/C-Sources/ModelicaInternal.c, M ModelicaServices/package.mo",
  description="Reg test MSL v4.0.0-rc.1")
- Repeat the simulation for all failed models with an explicit tolerance of 2e-5
 
ReleaseChecks.simulateExecutables(
  libraries={"Modelica", "ModelicaTest"},
  directories={"modelica://Modelica/Resources/Reference", "modelica://ModelicaTest/Resources/Reference"},
  incrementalRun=true,
  keepResultFile=false,
  numberOfIntervals=5000,
  tolerance=2e-5,
  useTolerance=true,
  gitURL="https://github.com/modelica/ModelicaStandardLibrary.git",
  gitRevision="bd753330a",
  gitStatus="D Modelica/Resources/C-Sources/ModelicaInternal.c, M ModelicaServices/package.mo",
  description="Reg test MSL v4.0.0-rc.1")
- Delete the simulation log files of Modelica.Electrical.Analog.Examples.OpAmps.DifferentialAmplifier and repeat the simulation with an explicit tolerance of 1e-8
 
ReleaseChecks.simulateExecutables(
  libraries={"Modelica", "ModelicaTest"},
  directories={"modelica://Modelica/Resources/Reference", "modelica://ModelicaTest/Resources/Reference"},
  incrementalRun=true,
  keepResultFile=false,
  numberOfIntervals=5000,
  tolerance=1e-8,
  useTolerance=true,
  gitURL="https://github.com/modelica/ModelicaStandardLibrary.git",
  gitRevision="bd753330a",
  gitStatus="D Modelica/Resources/C-Sources/ModelicaInternal.c, M ModelicaServices/package.mo",
  description="Reg test MSL v4.0.0-rc.1")
- Search the two output directories for files "check_failed.log", "translate_failed.log" and "simulate_failed.log" and create new GitHub issues.
 
- Download the reference result files to be used as the base-line. It is assumed that this directory is in parallel to the MSL root directory.
 
See the Reference results page how to obtain the reference results.
- Set up the CSV Compare tool
 
Extract Compare.exe from csv-compare.windows-v2.0.3.x64.zip to the root directory of the MSL repository
- 
In the MSL root directory, delete the file "log.txt" in case it already exists from a previous run
 - 
Run the comparison with the "bitmap" option
 
Compare.exe --mode csvTreeCompare --override --bitmap --tolerance 2e-3 --delimiter "," --verbosity 2 .\Modelica\Resources\Reference\ ..\MAP-LIB_ReferenceResults\ --logfile logall.txt --comparisonflag --reportdir C:\temp\MSL400\
- Identify the failed models
 
The workflow is to repeat the comparison run without the "bitmap" option only for the failed models. We need to copy all directories containing a file "compare_failed.log" to a separate location, while maintaining the directory structure. If you prefer, you can create a script for this job, or use a file manager as Total Commander with particular plugins.
For example, in Total Commander:
- Delete C:\compare\Failed
 - Find all directories (ALT+F7) containing a file "compare_failed.log" using the content plugin FileInDir
 

- Feed the search result to listbox (ALT+L)
 - Select the found directories (CTRL+A) and copy the directory structure to C:\compare\Failed\ using the packer plugin TreeCopyPlus (ALT+F5)
 

- Repository creation
 
In case we want to share the comparison reports, we can use a GitHub repository to store the website.
- Create a new git repository (e.g., "MSL400RC1FAILED") at GitHub
 - Clone this empty repository to C:\compare\MSL400RC1FAILED, for example.
 
- Repeat the comparison without "bitmap" option, but with the "failedonly" option
 
Compare.exe --mode csvTreeCompare --override --tolerance 2e-3 --delimiter "," --verbosity 2 C:\compare\Failed ..\MAP-LIB_ReferenceResults\ --logfile log.txt --failedonly --comparisonflag --reportdir c:\compare\MSL400RC1FAILED\
- Upload the comparison report
 
- Add all CSS, HTML and JS files to the repository, commit and push.
 - In the settings page of the GitHub repository, setup GitHub Pages to create a static website from the master branch
 

- Create a new issue at GitHub pointing to the HTML website of the comparison report
 
- Repeat for ModelicaTest
 
Repeat steps 3 to 8 for ModelicaTest
- Upload the simulation log files and simulation data
 
TODO: Upload to a new branch of https://github.com/modelica/MAP-LIB_ReferenceResults