Update google test doc
Compare changes
<div class="toc"><ul class="toc-item"><li><span><a href="#Introduction" data-toc-modified-id="Introduction-1">Introduction</a></span></li><li><span><a href="#Online-compilers" data-toc-modified-id="Online-compilers-2">Online compilers</a></span></li><li><span><a href="#Static-analyzer-tools" data-toc-modified-id="Static-analyzer-tools-3">Static analyzer tools</a></span></li><li><span><a href="#Valgrind" data-toc-modified-id="Valgrind-4">Valgrind</a></span></li><li><span><a href="#Address-sanitizer" data-toc-modified-id="Address-sanitizer-5">Address sanitizer</a></span></li><li><span><a href="#Sonarqube" data-toc-modified-id="Sonarqube-6">Sonarqube</a></span></li><li><span><a href="#Tests" data-toc-modified-id="Tests-7">Tests</a></span><ul class="toc-item"><li><span><a href="#Boost-tests" data-toc-modified-id="Boost-tests-7.1">Boost tests</a></span></li><li><span><a href="#Catch2" data-toc-modified-id="Catch2-7.2">Catch2</a></span></li><li><span><a href="#Google-test" data-toc-modified-id="Google-test-7.3">Google test</a></span></li></ul></li><li><span><a href="#Build-system" data-toc-modified-id="Build-system-8">Build system</a></span></li><li><span><a href="#Code-formatters" data-toc-modified-id="Code-formatters-9">Code formatters</a></span></li><li><span><a href="#Doxygen" data-toc-modified-id="Doxygen-10">Doxygen</a></span></li><li><span><a href="#More..." data-toc-modified-id="More...-11">More...</a></span></li></ul></div>
Some tools are redundant, but they are complementary: the more you may be able to use the better. The constraint is time: it is not straightforward to use some of those, and even for the user-friendly ones there is a non neglictible set-up time. But for projects that are gaining traction it becomes a no-brainer at some point to set-up those properly once and for all - usually part of [continuous integration](https://gitlab.inria.fr/FormationIntegrationContinue/gitlabciintroduction) process.
I have used only [Coliru](http://coliru.stacked-crooked.com/) which provides an API to incorporate directly some interactive code in a Web page (disclaimer - I have not used that feature yet) and [Wandbox](http://melpon.org/wandbox) which may be useful in day-to-day work as you may try a snippet of code with many configurations. It's useful for instance when you intend to use a bleeding-edge feature to see which version of compilers support it or not.
[Valgrind](valgrind.org/) is mostly known as a leak checker, but is really a jack-of-all-trade tool; callgrind for instance may be used to profile your code and see where most of the computation time is spent. Some lesser-known tools are also incredibly useful: [Verrou](https://github.com/edf-hpc/verrou) for instance, developed at EDF, is a floating-point checker which helps you figure out if at some point some of your computations might be skewed by the way the computer approximates the real numbers.
Unfortunately, macOS support is scarse: sometimes they plainly say it is not up-to-date, but even when they say it works the outputs were never satisfactory for me (always check `valgrind ls` first as they recommend on their website...). So even if I develop mostly in macOS I always fire up valgrind in a Linux environment.
A [recent "concurrent"](https://github.com/google/sanitizers/wiki/AddressSanitizer) (once again use both if possible!) to Valgrind, which has the advantage of running with a much better runtime (Valgrind slows down your program tremendously). Might be integrated in some IDEs (it is in XCode on macOS).
[Sonarqube](https://www.sonarqube.org/) is a development platform which inspects your code and helps to figure out where there are issues. It enables integration of multiple tools such as cppcheck mentioned earlier. If you're Inria staff, an instance was set by our [Bordeaux colleagues](http://sed.bordeaux.inria.fr/) and is [available](https://sonarqube.inria.fr/) for you.
[doctest](https://github.com/onqtam/doctest) is a C++ testing framework but is by far the fastest both in compile times (by orders of magnitude) and runtime compared to other feature-rich alternatives. It brings the ability of compiled languages to have tests written directly in the production code thanks to a fast, transparent and flexible test runner with a clean interface.
It is rather easy to set up to easy task but may become a tad more difficult once you want to tackle more advanced features. Nonetheless it is the de-facto standard for C++ documentation and it's really something you should set up quite early if you're working on a project meant to stay for a while: it's really a hassle to spend countless hours providing after the fact such guidance in the code. As for compilers, you should strive to provide a documentation without any warning.