See the [manual](https://libsemigroups.readthedocs.io/en/latest/installation.html) for details of how to do this.
| Object | Convention |
| class | NamedLikeThis |
| struct | NamedLikeThis |
| function | named_like_this |
| enum class | namedlikethis |
| enum class member | named_like_this |
| stateful type alias | named_like_this_type |
| stateless type alias | LikeThis |
| iterator | iterator or const_iterator |
| global variable | NAMED_LIKE_THIS |
Try to ensure that any new functionality added to libsemigroups satisfies
the strong exception guarantee, and if not that this is documented.
To run lldb:
./configure --enable-debug && make test_all
libtool --mode=execute lldb test_alltest_all is the name of the check program produced by make check. Similarly to run valgrind you have to do:
./configure --enable-debug --disable-hpcombi && make test_all
libtool --mode=execute valgrind --leak-check=full ./test_all [quick] 2>&1 | tee --append valgrind.txtAny new tests should be tagged with one of the following:
| Tag | Runtime |
| quick | < 200ms |
| standard | < 3s |
| extreme | > 3s |
They should be declared using
LIBSEMIGROUPS_TEST_CASE(classname, number, message, tags)"tags" should include "[FilePrefix]" where "FilePrefix" would be "cong-pair" in the file "tests/cong-pair.test.cc", if the file prefix is the same as "classname", then it should not be included. Tags are case insensitive.
A *bugfix release* is one of the form x.y.z -> x.y.z+1, and a *non-bugfix release* is one of the form x.y.z -> x+1.y.z or x.y+1.z.
Use the script etc/release-libsemigroups.py.