The following contains some general guidelines for developers.
- Storm consists of the core library
lib/libstorm
resulting from the source code insrc/storm
. - Several additional libraries
lib/libstorm-xyz
provide additional features (parametric models, POMPD, DFT, etc.) and are built from the corresponding code insrc/storm-xyz
. - For each library, a corresponding binary
/bin/storm-xyz
is built from the source insrc/storm-xyz-cli
. - Functionality is accompanied by tests (
src/test
) whenever possible. The complete test suite can be executed bymake test
and individual tests can be executed via the corresponding binariesbin/test-xyz
. - Storm is heavily templated.
In particular, it features the template argument
ValueType
representing the underlying number type. The most commonly used types aredouble
,storm::RationalNumber
andstorm::RationalFunction
.
- Code should be formatted according to the given rules set by clang-format.
Proper formatting can be ensured by executing
make format
. For more information see PR#175. - We use Doxygen for documentation, see storm-doc.
Code blocks should be documented with:
/*! * ... * @param ... * @return ... */
- We provide custom macros for output and logging.
The use of
std::cout
should be avoided and instead, macros such asSTORM_LOG_DEBUG
,STORM_LOG_INFO
orSTORM_PRINT_AND_LOG
should be used. - For line breaks, we use
'\n'
instead ofstd::endl
to avoid unnecessary flushing. See PR 178 for details.
- Check that all tests run successfully:
make test
. - Check that the code is properly formatted:
make format
. There is also a CI job which can provide automated code formatting. - New code should be submitted by opening a pull request. Our continuous integration automatically checks that the code in the PR is properly formatted and all tests run successfully.