text: // This file is part of CRAAM, a C++ library for solving plain
  // and robust Markov decision processes.
  //
  // MIT License
  //
  // Permission is hereby granted, free of charge, to any person obtaining a copy
  // of this software and associated documentation files (the "Software"), to deal
  // in the Software without restriction, including without limitation the rights
  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  // copies of the Software, and to permit persons to whom the Software is
  // furnished to do so, subject to the following conditions:
  //
  // The above copyright notice and this permission notice shall be included in
  // all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  // SOFTWARE.
  
  // compilation:
  // g++ -fopenmp -Wnon-virtual-dtor -Wunreachable-code -Wfloat-equal -Wextra
  // -Wall -Weffc++ -pedantic -pedantic-errors  -I ../  --std=c++14 test.cpp
  // -lboost_unit_test_framework clang++ -fopenmp -Wnon-virtual-dtor
  // -Wunreachable-code -Wfloat-equal -Wextra -Wall -Weffc++ -pedantic
  // -pedantic-errors  -I ../  --std=c++14 test.cpp -lboost_unit_test_framework
  #include <cmath>
  #include <iostream>
  #include <numeric>
  #include <sstream>
  #include <utility>
  
  #define BOOST_TEST_DYN_LINK
  #define BOOST_TEST_MAIN
  
  #define CHECK_CLOSE_COLLECTION(aa, bb, tolerance)                              \
    {                                                                            \
      using std::distance;                                                       \
      using std::begin;                                                          \
      using std::end;                                                            \
      auto a = begin(aa), ae = end(aa);                                          \
      auto b = begin(bb);                                                        \
      BOOST_REQUIRE_EQUAL(distance(a, ae), distance(b, end(bb)));                \
      for (; a != ae; ++a, ++b) {                                                \
        BOOST_CHECK_CLOSE(*a, *b, tolerance);                                    \
      }                                                                          \
    }
  
  #define BOOST_TEST_MODULE MainModule
  #include <boost/test/unit_test.hpp>
  
  #include "core_tests.hpp"
  #include "implementable_tests.hpp"
  #include "simulation_tests.hpp"
  