- started the documentation
- disabled the CI while I iterate on the markdown
diff --git a/.travis.yml b/.travis.yml
index c5f7d8f..bc3de2d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,341 +1,342 @@
-sudo: false
-language: c++
-
-notifications:
-  email:
-    on_success: change
-    on_failure: always
-  # gitter
-  webhooks:
-    urls: https://webhooks.gitter.im/e/10941dd1c67e5e967706
-    on_success: change
-    on_failure: always
-git:
-  depth: 5
-
-env:
-  global:
-    - CMAKE_OPTIONS_GLOBAL="-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
-  # Workaround for https://github.com/travis-ci/travis-ci/issues/4681
-  # "Defining the build matrix only with matrix.include leads to an additional, unwanted job"
-  matrix:
-    - TRAVIS_EMPTY_JOB_WORKAROUND=true
-
-# these apt sources will be referenced later (by using *name)
-addons:
-  apt:
-    sources: &apt_sources
-      - ubuntu-toolchain-r-test
-      - llvm-toolchain-precise-3.5
-      - llvm-toolchain-precise-3.6
-      - llvm-toolchain-precise-3.7
-      - llvm-toolchain-precise-3.8
-      - llvm-toolchain-precise
-
-compiler: clang
-os: linux
-
-matrix:
-  exclude:
-    - env: TRAVIS_EMPTY_JOB_WORKAROUND=true
-
-  include:
-    # coverage
-    - env: COMPILER=g++ COVERALLS_SERVICE_NAME=travis-ci
-      compiler: gcc
-      addons:
-        apt:
-          packages: ["lcov", "curl"]
-
-    # GCC 4.4
-    - env: COMPILER=g++-4.4
-      compiler: gcc
-      addons: &gcc44
-        apt:
-          packages: ["g++-4.4", "valgrind", "g++-4.4-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 4.5
-    - env: COMPILER=g++-4.5
-      compiler: gcc
-      addons: &gcc45
-        apt:
-          packages: ["g++-4.5", "valgrind", "g++-4.5-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 4.6
-    - env: COMPILER=g++-4.6
-      compiler: gcc
-      addons: &gcc46
-        apt:
-          packages: [           "valgrind", "g++-4.6-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 4.7
-    - env: COMPILER=g++-4.7
-      compiler: gcc
-      addons: &gcc47
-        apt:
-          packages: ["g++-4.7", "valgrind", "g++-4.7-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 4.8
-    - env: COMPILER=g++-4.8 HAS_ASAN_32=true HAS_ASAN_64=true
-      compiler: gcc
-      addons: &gcc48
-        apt:
-          packages: ["g++-4.8", "valgrind", "g++-4.8-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 4.9
-    - env: COMPILER=g++-4.9 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
-      compiler: gcc
-      addons: &gcc49
-        apt:
-          packages: ["g++-4.9", "valgrind", "g++-4.9-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 5
-    - env: COMPILER=g++-5 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
-      compiler: gcc
-      addons: &gcc5
-        apt:
-          packages: ["g++-5",   "valgrind", "g++-5-multilib",   "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-#    # GCC 6
-#    # released on 2016.04.27
-#    # wait for it to enter the whitelist - https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise
-#    # also with homebrew under OSX!!!
-#    - env: COMPILER=g++-6 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#sudo: false
+#language: c++
+#
+#notifications:
+#  email:
+#    on_success: change
+#    on_failure: always
+#  # gitter
+#  webhooks:
+#    urls: https://webhooks.gitter.im/e/10941dd1c67e5e967706
+#    on_success: change
+#    on_failure: always
+#git:
+#  depth: 5
+#
+#env:
+#  global:
+#    - CMAKE_OPTIONS_GLOBAL="-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
+#  # Workaround for https://github.com/travis-ci/travis-ci/issues/4681
+#  # "Defining the build matrix only with matrix.include leads to an additional, unwanted job"
+#  matrix:
+#    - TRAVIS_EMPTY_JOB_WORKAROUND=true
+#
+## these apt sources will be referenced later (by using *name)
+#addons:
+#  apt:
+#    sources: &apt_sources
+#      - ubuntu-toolchain-r-test
+#      - llvm-toolchain-precise-3.5
+#      - llvm-toolchain-precise-3.6
+#      - llvm-toolchain-precise-3.7
+#      - llvm-toolchain-precise-3.8
+#      - llvm-toolchain-precise
+#
+#compiler: clang
+#os: linux
+#
+#matrix:
+#  exclude:
+#    - env: TRAVIS_EMPTY_JOB_WORKAROUND=true
+#
+#  include:
+#    # coverage
+#    - env: COMPILER=g++ COVERALLS_SERVICE_NAME=travis-ci
 #      compiler: gcc
-#      addons: &gcc6
+#      addons:
 #        apt:
-#          packages: ["g++-6",   "valgrind", "g++-6-multilib",   "libc6-dbg", "libc6-dbg:i386"]
+#          packages: ["lcov", "curl"]
+#
+#    # GCC 4.4
+#    - env: COMPILER=g++-4.4
+#      compiler: gcc
+#      addons: &gcc44
+#        apt:
+#          packages: ["g++-4.4", "valgrind", "g++-4.4-multilib", "libc6-dbg", "libc6-dbg:i386"]
 #          sources: *apt_sources
-
-    # Clang 3.4
-    - env: COMPILER=clang++ HAS_ASAN_64=true HAS_UBSAN_64=true
-      addons: &clang
-        apt:
-          packages: [             "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # Clang 3.5
-    - env: COMPILER=clang++-3.5 HAS_ASAN_64=true HAS_UBSAN_64=true
-      addons: &clang35
-        apt:
-          packages: ["clang-3.5", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # Clang 3.6
-    - env: COMPILER=clang++-3.6 HAS_ASAN_64=true HAS_UBSAN_64=true
-      addons: &clang36
-        apt:
-          packages: ["clang-3.6", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # Clang 3.7
-    - env: COMPILER=clang++-3.7 # no sanitizers - not even for 64 bit - https://llvm.org/bugs/show_bug.cgi?id=22757
-      addons: &clang37
-        apt:
-          packages: ["clang-3.7", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # Clang 3.8
-    - env: COMPILER=clang++-3.8 # no sanitizers - not even for 64 bit - https://llvm.org/bugs/show_bug.cgi?id=22757
-      addons: &clang38
-        apt:
-          packages: ["clang-3.8", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # Xcode 6.1 Clang
-    - env: COMPILER=clang++
-      os: osx
-
-    # Xcode 6.2 Clang
-    - env: COMPILER=clang++
-      osx_image: beta-xcode6.2
-      os: osx
-
-    # Xcode 6.3 Clang
-    - env: COMPILER=clang++
-      osx_image: beta-xcode6.3
-      os: osx
-
-    # Xcode 6.4 Clang
-    - env: COMPILER=clang++
-      osx_image: xcode6.4
-      os: osx
-
-    # Xcode 7 Clang
-    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
-      osx_image: xcode7
-      os: osx
-
-    # Xcode 7.1 Clang
-    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
-      osx_image: xcode7.1
-      os: osx
-
-    # Xcode 7.2 Clang
-    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
-      osx_image: xcode7.2
-      os: osx
-
-    # Xcode 7.3 Clang
-    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
-      osx_image: xcode7.3
-      os: osx
-
-    # OSX GCC 4.4
-    - env: COMPILER=g++-4.4
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 4.5
-    - env: COMPILER=g++-4.5
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 4.6
-    - env: COMPILER=g++-4.6
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 4.7
-    - env: COMPILER=g++-4.7
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 4.8
-    - env: COMPILER=g++-4.8 HAS_ASAN_32=true HAS_ASAN_64=true
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 4.9
-    - env: COMPILER=g++-4.9 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 5
-    - env: COMPILER=g++-5 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
-      compiler: gcc
-      os: osx
-
-#    # OSX GCC 6
-#    - env: COMPILER=g++-6 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#
+#    # GCC 4.5
+#    - env: COMPILER=g++-4.5
+#      compiler: gcc
+#      addons: &gcc45
+#        apt:
+#          packages: ["g++-4.5", "valgrind", "g++-4.5-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # GCC 4.6
+#    - env: COMPILER=g++-4.6
+#      compiler: gcc
+#      addons: &gcc46
+#        apt:
+#          packages: [           "valgrind", "g++-4.6-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # GCC 4.7
+#    - env: COMPILER=g++-4.7
+#      compiler: gcc
+#      addons: &gcc47
+#        apt:
+#          packages: ["g++-4.7", "valgrind", "g++-4.7-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # GCC 4.8
+#    - env: COMPILER=g++-4.8 HAS_ASAN_32=true HAS_ASAN_64=true
+#      compiler: gcc
+#      addons: &gcc48
+#        apt:
+#          packages: ["g++-4.8", "valgrind", "g++-4.8-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # GCC 4.9
+#    - env: COMPILER=g++-4.9 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#      compiler: gcc
+#      addons: &gcc49
+#        apt:
+#          packages: ["g++-4.9", "valgrind", "g++-4.9-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # GCC 5
+#    - env: COMPILER=g++-5 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#      compiler: gcc
+#      addons: &gcc5
+#        apt:
+#          packages: ["g++-5",   "valgrind", "g++-5-multilib",   "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+##    # GCC 6
+##    # released on 2016.04.27
+##    # wait for it to enter the whitelist - https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise
+##    # also with homebrew under OSX!!!
+##    - env: COMPILER=g++-6 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+##      compiler: gcc
+##      addons: &gcc6
+##        apt:
+##          packages: ["g++-6",   "valgrind", "g++-6-multilib",   "libc6-dbg", "libc6-dbg:i386"]
+##          sources: *apt_sources
+#
+#    # Clang 3.4
+#    - env: COMPILER=clang++ HAS_ASAN_64=true HAS_UBSAN_64=true
+#      addons: &clang
+#        apt:
+#          packages: [             "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # Clang 3.5
+#    - env: COMPILER=clang++-3.5 HAS_ASAN_64=true HAS_UBSAN_64=true
+#      addons: &clang35
+#        apt:
+#          packages: ["clang-3.5", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # Clang 3.6
+#    - env: COMPILER=clang++-3.6 HAS_ASAN_64=true HAS_UBSAN_64=true
+#      addons: &clang36
+#        apt:
+#          packages: ["clang-3.6", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # Clang 3.7
+#    - env: COMPILER=clang++-3.7 # no sanitizers - not even for 64 bit - https://llvm.org/bugs/show_bug.cgi?id=22757
+#      addons: &clang37
+#        apt:
+#          packages: ["clang-3.7", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # Clang 3.8
+#    - env: COMPILER=clang++-3.8 # no sanitizers - not even for 64 bit - https://llvm.org/bugs/show_bug.cgi?id=22757
+#      addons: &clang38
+#        apt:
+#          packages: ["clang-3.8", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # Xcode 6.1 Clang
+#    - env: COMPILER=clang++
+#      os: osx
+#
+#    # Xcode 6.2 Clang
+#    - env: COMPILER=clang++
+#      osx_image: beta-xcode6.2
+#      os: osx
+#
+#    # Xcode 6.3 Clang
+#    - env: COMPILER=clang++
+#      osx_image: beta-xcode6.3
+#      os: osx
+#
+#    # Xcode 6.4 Clang
+#    - env: COMPILER=clang++
+#      osx_image: xcode6.4
+#      os: osx
+#
+#    # Xcode 7 Clang
+#    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
+#      osx_image: xcode7
+#      os: osx
+#
+#    # Xcode 7.1 Clang
+#    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
+#      osx_image: xcode7.1
+#      os: osx
+#
+#    # Xcode 7.2 Clang
+#    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
+#      osx_image: xcode7.2
+#      os: osx
+#
+#    # Xcode 7.3 Clang
+#    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
+#      osx_image: xcode7.3
+#      os: osx
+#
+#    # OSX GCC 4.4
+#    - env: COMPILER=g++-4.4
 #      compiler: gcc
 #      os: osx
-
-    # OSX LLVM-GCC
-    - env: COMPILER=g++
-      compiler: gcc
-      os: osx
-
-addons:
-  coverity_scan:
-    # COVERITY_SCAN_TOKEN added as env var in travis project
-    project:
-      name: onqtam/doctest
-    notification_email: vik.kirilov@gmail.com
-    build_command_prepend: cd examples/hello_world && cmake .
-    build_command: make
-    branch_pattern: coverity_scan
-
-before_install:
-  - |
-    if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
-      # update package list
-      brew update
-      # valgrind
-      brew install valgrind
-      # cmake
-      if brew list -1 | grep -q "^cmake\$"; then
-        brew outdated cmake || brew upgrade cmake
-      else
-        brew install cmake
-      fi
-      # gcc
-      if [[ "${COMPILER}" = "g++-4.4" ]]; then
-        brew install gcc44
-      fi
-      if [[ "${COMPILER}" = "g++-4.5" ]]; then
-        brew install gcc45
-      fi
-      if [[ "${COMPILER}" = "g++-4.6" ]]; then
-        brew install gcc46
-      fi
-      if [[ "${COMPILER}" = "g++-4.7" ]]; then
-        brew install gcc47
-      fi
-      if [[ "${COMPILER}" = "g++-4.8" ]]; then
-        brew outdated gcc48 || brew upgrade gcc48
-      fi
-      if [[ "${COMPILER}" = "g++-4.9" ]]; then
-        brew install gcc49
-      fi
-      if [[ "${COMPILER}" = "g++-5" ]]; then
-        brew install gcc5
-      fi
-      if [[ "${COMPILER}" = "g++-6" ]]; then
-        brew install gcc6
-      fi
-    fi
-  - git submodule update --init --recursive
-
-install:
-  - ${CXX} --version
-  - export CXX="${COMPILER}"
-  - ${CXX} --version
-
-script:
-  # coverage - do not continue with other build configurations after that
-  - |
-    if [[ "${COVERALLS_SERVICE_NAME}" = "travis-ci" ]]; then
-      cmake ${CMAKE_OPTIONS_GLOBAL} -DCMAKE_BUILD_TYPE=Debug .
-      make -j2 && make coveralls
-      exit
-    fi
-
-  # initial run with options
-  - cmake ${CMAKE_OPTIONS_GLOBAL} ${CMAKE_OPTIONS} .
-
-  # debug x86
-  - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-m32" .
-  - make clean && make -j2
-  # valgrind for 32bit under osx fails
-  - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure ; fi
-#  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
-  # debug x64
-  - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-m64" .
-  - make clean && make -j2
-  - cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure
-#  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
-  # release x86
-  - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32" .
-  - make clean && make -j2
-  # valgrind for 32bit under osx fails
-  - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure ; fi
-#  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
-  # release x64
-  - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64" .
-  - make clean && make -j2
-  - cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure
-#  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
-
-  # sanitizers - again 32/64 bit Debug/Release configs through address/undefined sanitizers
-  - cmake -DTEST_MODE=NORMAL .
-#  - cmake -DTEST_MODE=COMPARE .
-  # on separate commands because when something fails I want to see which one exactly
-  - if [[ "${HAS_ASAN_64}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m64 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_ASAN_32}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m32 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_ASAN_64}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_ASAN_32}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_UBSAN_64}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m64 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_UBSAN_32}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m32 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_UBSAN_64}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_UBSAN_32}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32 -fsanitize=undefined" . && make -j2 && ctest --output-on-failure ; fi
-
-after_script:
-  - cat compile_commands.json
+#
+#    # OSX GCC 4.5
+#    - env: COMPILER=g++-4.5
+#      compiler: gcc
+#      os: osx
+#
+#    # OSX GCC 4.6
+#    - env: COMPILER=g++-4.6
+#      compiler: gcc
+#      os: osx
+#
+#    # OSX GCC 4.7
+#    - env: COMPILER=g++-4.7
+#      compiler: gcc
+#      os: osx
+#
+#    # OSX GCC 4.8
+#    - env: COMPILER=g++-4.8 HAS_ASAN_32=true HAS_ASAN_64=true
+#      compiler: gcc
+#      os: osx
+#
+#    # OSX GCC 4.9
+#    - env: COMPILER=g++-4.9 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#      compiler: gcc
+#      os: osx
+#
+#    # OSX GCC 5
+#    - env: COMPILER=g++-5 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#      compiler: gcc
+#      os: osx
+#
+##    # OSX GCC 6
+##    - env: COMPILER=g++-6 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+##      compiler: gcc
+##      os: osx
+#
+#    # OSX LLVM-GCC
+#    - env: COMPILER=g++
+#      compiler: gcc
+#      os: osx
+#
+#addons:
+#  coverity_scan:
+#    # COVERITY_SCAN_TOKEN added as env var in travis project
+#    project:
+#      name: onqtam/doctest
+#    notification_email: vik.kirilov@gmail.com
+#    build_command_prepend: cd examples/hello_world && cmake .
+#    build_command: make
+#    branch_pattern: coverity_scan
+#
+#before_install:
+#  - |
+#    if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
+#      # update package list
+#      brew update
+#      # valgrind
+#      brew install valgrind
+#      # cmake
+#      if brew list -1 | grep -q "^cmake\$"; then
+#        brew outdated cmake || brew upgrade cmake
+#      else
+#        brew install cmake
+#      fi
+#      # gcc
+#      if [[ "${COMPILER}" = "g++-4.4" ]]; then
+#        brew install gcc44
+#      fi
+#      if [[ "${COMPILER}" = "g++-4.5" ]]; then
+#        brew install gcc45
+#      fi
+#      if [[ "${COMPILER}" = "g++-4.6" ]]; then
+#        brew install gcc46
+#      fi
+#      if [[ "${COMPILER}" = "g++-4.7" ]]; then
+#        brew install gcc47
+#      fi
+#      if [[ "${COMPILER}" = "g++-4.8" ]]; then
+#        brew outdated gcc48 || brew upgrade gcc48
+#      fi
+#      if [[ "${COMPILER}" = "g++-4.9" ]]; then
+#        brew install gcc49
+#      fi
+#      if [[ "${COMPILER}" = "g++-5" ]]; then
+#        brew install gcc5
+#      fi
+#      if [[ "${COMPILER}" = "g++-6" ]]; then
+#        brew install gcc6
+#      fi
+#    fi
+#  - git submodule update --init --recursive
+#
+#install:
+#  - ${CXX} --version
+#  - export CXX="${COMPILER}"
+#  - ${CXX} --version
+#
+#script:
+#  # coverage - do not continue with other build configurations after that
+#  - |
+#    if [[ "${COVERALLS_SERVICE_NAME}" = "travis-ci" ]]; then
+#      cmake ${CMAKE_OPTIONS_GLOBAL} -DCMAKE_BUILD_TYPE=Debug .
+#      make -j2 && make coveralls
+#      exit
+#    fi
+#
+#  # initial run with options
+#  - cmake ${CMAKE_OPTIONS_GLOBAL} ${CMAKE_OPTIONS} .
+#
+#  # debug x86
+#  - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-m32" .
+#  - make clean && make -j2
+#  # valgrind for 32bit under osx fails
+#  - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure ; fi
+##  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
+#  # debug x64
+#  - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-m64" .
+#  - make clean && make -j2
+#  - cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure
+##  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
+#  # release x86
+#  - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32" .
+#  - make clean && make -j2
+#  # valgrind for 32bit under osx fails
+#  - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure ; fi
+##  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
+#  # release x64
+#  - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64" .
+#  - make clean && make -j2
+#  - cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure
+##  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
+#
+#  # sanitizers - again 32/64 bit Debug/Release configs through address/undefined sanitizers
+#  - cmake -DTEST_MODE=NORMAL .
+##  - cmake -DTEST_MODE=COMPARE .
+#  # on separate commands because when something fails I want to see which one exactly
+#  - if [[ "${HAS_ASAN_64}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m64 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_ASAN_32}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m32 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_ASAN_64}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_ASAN_32}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_UBSAN_64}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m64 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_UBSAN_32}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m32 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_UBSAN_64}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_UBSAN_32}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32 -fsanitize=undefined" . && make -j2 && ctest --output-on-failure ; fi
+#
+#after_script:
+#  - cat compile_commands.json
+#
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 06b0da6..5be996f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
 # Change Log

 

-## [1.0.0](https://github.com/onqtam/doctest/tree/1.0.0) (2016-04-27)

+## [1.0.0](https://github.com/onqtam/doctest/tree/1.0.0) (2016-04-30)

 **Merged pull requests:**

 

 - Add a Gitter chat badge to README.md [\#1](https://github.com/onqtam/doctest/pull/1) ([gitter-badger](https://github.com/gitter-badger))

diff --git a/README.md b/README.md
index 5c2dea9..2d8399c 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,20 @@
-doctest

+DOCTEST - the lightest and feature rich C++ single header testing framework

 -------

 

-doctest is a lightweight single header C++ framework for writing tests that is inspired by the ```unittest``` functionality in the D programming and the docstrings in python - tests are a sort of documentation and should reside near the code they test.

+The library is inspired by the ```unittest``` functionality of the **D** programming language and the **docstrings** in python - tests can be considered a form of documentation and should be able to reside near the production code which they test.

 

-[![Donate to support](https://pledgie.com/campaigns/31280.png)](https://pledgie.com/campaigns/31280)

+- Check out [**features and design goals**](doc/markdown/features.md) to see why this library exists and how it is different from all the rest.

+- Check out the tutorial [**here**](doc/markdown/tutorial.md).

+- [![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](http://melpon.org/wandbox/permlink/xvF0y5DTzIDLN98f)

+- [![documentation](https://img.shields.io/badge/documentation-online-blue.svg)](doc/markdown/readme.md)

+- The latest version of the library can be downloaded from [**here**](https://raw.githubusercontent.com/onqtam/doctest/master/doctest/doctest.h).

 

-# LIBRARY NOT DONE YET! UNDER RAPID DEVELOPMENT! COME BACK LATER...

+This library was **strongly** influenced by [**Catch**](https://github.com/philsquared/Catch) and [**lest**](https://github.com/martinmoene/lest).

 

-[![documentation](https://img.shields.io/badge/documentation-online-blue.svg)](doc/markdown/)

 [![Language](https://img.shields.io/badge/language-C++-blue.svg)](https://isocpp.org/)

 [![Standard](https://img.shields.io/badge/c%2B%2B-98-blue.svg)](https://en.wikipedia.org/wiki/C%2B%2B#Standardization)

 [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)

 [![Version](https://badge.fury.io/gh/onqtam%2Fdoctest.svg)](https://github.com/onqtam/doctest/releases)

-[![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](http://melpon.org/wandbox/permlink/YFdMVB1DrGJkQpaJ)

 [![Join the chat at https://gitter.im/onqtam/doctest](https://badges.gitter.im/onqtam/doctest.svg)](https://gitter.im/onqtam/doctest?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

 

 Build status

@@ -24,3 +26,16 @@
 | Appveyor (Windows)    | [![Windows status](https://ci.appveyor.com/api/projects/status/j89qxtahyw1dp4gd/branch/master?svg=true)](https://ci.appveyor.com/project/onqtam/doctest/branch/master)| [![Windows status](https://ci.appveyor.com/api/projects/status/j89qxtahyw1dp4gd/branch/dev?svg=true)](https://ci.appveyor.com/project/onqtam/doctest/branch/dev)|

 | Unit Test Coverage    | [![Coverage Status](https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch=master)](https://coveralls.io/github/onqtam/doctest?branch=master)|[![Coverage Status](https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch=dev)](https://coveralls.io/github/onqtam/doctest?branch=dev)|

 | Static Analysis       | [![Static Analysis](https://scan.coverity.com/projects/7865/badge.svg)](https://scan.coverity.com/projects/onqtam-doctest)|   |

+

+Contributing

+------------

+

+Donations would be appreciated very much since I quit my job to write open source software.

+

+[![Donate to support](https://pledgie.com/campaigns/31280.png)](https://pledgie.com/campaigns/31280)

+

+Contributions in the form of issues and pull requests are welcome as well.

+

+For pull requests make sure the code is formatted with a recent-enough ```clang-format``` using the config file in the root of the repo (or I will format it after the merge) and that all the builds on travis and appveyor pass. Also before making a pull requrest you might want to make an issue about it for a discussion. This library has some design goals which must be kept.

+

+The ```master``` branch is the stable one with the latest release and the ```dev``` branch is on the bleeding edge. 
\ No newline at end of file
diff --git a/appveyor.yml b/appveyor.yml
index c337506..ab1e0fb 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,117 +1,118 @@
-# http://www.appveyor.com/docs/appveyor-yml

-

-notifications:

-  - provider: Email

-    to:

-      - vik.kirilov@gmail.com

-    on_build_status_changed: true

-    on_build_failure: true

-    on_build_success: false

-  # gitter

-  - provider: Webhook

-    url: https://webhooks.gitter.im/e/3a78202a235c0325e516

-    on_build_status_changed: true

-    on_build_failure: true

-    on_build_success: false

-

-clone_depth: 5

-branches:

-  except:

-    - gh-pages

-    - coverity_scan

-

-matrix:

-  fast_finish: false

-

-environment:

-  matrix:

-  - platform: x86

-    configuration: Debug

-    arch: "Win32"

-    VS_GEN: "Visual Studio 9 2008"

-  - platform: x86

-    configuration: Release

-    arch: "Win32"

-    VS_GEN: "Visual Studio 9 2008"

-## THE FOLLOWING ARE DISABLED BECAUSE CMAKE CANNOT FIND THE COMPILER FOR Win64

+## http://www.appveyor.com/docs/appveyor-yml

+#

+#notifications:

+#  - provider: Email

+#    to:

+#      - vik.kirilov@gmail.com

+#    on_build_status_changed: true

+#    on_build_failure: true

+#    on_build_success: false

+#  # gitter

+#  - provider: Webhook

+#    url: https://webhooks.gitter.im/e/3a78202a235c0325e516

+#    on_build_status_changed: true

+#    on_build_failure: true

+#    on_build_success: false

+#

+#clone_depth: 5

+#branches:

+#  except:

+#    - gh-pages

+#    - coverity_scan

+#

+#matrix:

+#  fast_finish: false

+#

+#environment:

+#  matrix:

+#  - platform: x86

+#    configuration: Debug

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 9 2008"

+#  - platform: x86

+#    configuration: Release

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 9 2008"

+### THE FOLLOWING ARE DISABLED BECAUSE CMAKE CANNOT FIND THE COMPILER FOR Win64

+##  - platform: x64

+##    configuration: Debug

+##    arch: "x64"

+##    VS_GEN: "Visual Studio 9 2008 Win64"

+##  - platform: x64

+##    configuration: Release

+##    arch: "x64"

+##    VS_GEN: "Visual Studio 9 2008 Win64"

+#  - platform: x86

+#    configuration: Debug

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 10 2010"

+#  - platform: x86

+#    configuration: Release

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 10 2010"

 #  - platform: x64

 #    configuration: Debug

 #    arch: "x64"

-#    VS_GEN: "Visual Studio 9 2008 Win64"

+#    VS_GEN: "Visual Studio 10 2010 Win64"

 #  - platform: x64

 #    configuration: Release

 #    arch: "x64"

-#    VS_GEN: "Visual Studio 9 2008 Win64"

-  - platform: x86

-    configuration: Debug

-    arch: "Win32"

-    VS_GEN: "Visual Studio 10 2010"

-  - platform: x86

-    configuration: Release

-    arch: "Win32"

-    VS_GEN: "Visual Studio 10 2010"

-  - platform: x64

-    configuration: Debug

-    arch: "x64"

-    VS_GEN: "Visual Studio 10 2010 Win64"

-  - platform: x64

-    configuration: Release

-    arch: "x64"

-    VS_GEN: "Visual Studio 10 2010 Win64"

-  - platform: x86

-    configuration: Debug

-    arch: "Win32"

-    VS_GEN: "Visual Studio 11 2012"

-  - platform: x86

-    configuration: Release

-    arch: "Win32"

-    VS_GEN: "Visual Studio 11 2012"

-  - platform: x64

-    configuration: Debug

-    arch: "x64"

-    VS_GEN: "Visual Studio 11 2012 Win64"

-  - platform: x64

-    configuration: Release

-    arch: "x64"

-    VS_GEN: "Visual Studio 11 2012 Win64"

-  - platform: x86

-    configuration: Debug

-    arch: "Win32"

-    VS_GEN: "Visual Studio 12 2013"

-  - platform: x86

-    configuration: Release

-    arch: "Win32"

-    VS_GEN: "Visual Studio 12 2013"

-  - platform: x64

-    configuration: Debug

-    arch: "x64"

-    VS_GEN: "Visual Studio 12 2013 Win64"

-  - platform: x64

-    configuration: Release

-    arch: "x64"

-    VS_GEN: "Visual Studio 12 2013 Win64"

-  - platform: x86

-    configuration: Debug

-    arch: "Win32"

-    VS_GEN: "Visual Studio 14 2015"

-  - platform: x86

-    configuration: Release

-    arch: "Win32"

-    VS_GEN: "Visual Studio 14 2015"

-  - platform: x64

-    configuration: Debug

-    arch: "x64"

-    VS_GEN: "Visual Studio 14 2015 Win64"

-  - platform: x64

-    configuration: Release

-    arch: "x64"

-    VS_GEN: "Visual Studio 14 2015 Win64"

-

-before_build:

-  - cmake . -G "%VS_GEN%"

-build_script:

-  - msbuild all.sln /p:Configuration=%Configuration%;Platform=%arch% /maxcpucount

-test_script:

-# temporarily disabled - output will change often so no need for this yet

-#  - cmake . -DTEST_MODE=COMPARE

-  - ctest -C %configuration% --output-on-failure
\ No newline at end of file
+#    VS_GEN: "Visual Studio 10 2010 Win64"

+#  - platform: x86

+#    configuration: Debug

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 11 2012"

+#  - platform: x86

+#    configuration: Release

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 11 2012"

+#  - platform: x64

+#    configuration: Debug

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 11 2012 Win64"

+#  - platform: x64

+#    configuration: Release

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 11 2012 Win64"

+#  - platform: x86

+#    configuration: Debug

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 12 2013"

+#  - platform: x86

+#    configuration: Release

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 12 2013"

+#  - platform: x64

+#    configuration: Debug

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 12 2013 Win64"

+#  - platform: x64

+#    configuration: Release

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 12 2013 Win64"

+#  - platform: x86

+#    configuration: Debug

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 14 2015"

+#  - platform: x86

+#    configuration: Release

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 14 2015"

+#  - platform: x64

+#    configuration: Debug

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 14 2015 Win64"

+#  - platform: x64

+#    configuration: Release

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 14 2015 Win64"

+#

+#before_build:

+#  - cmake . -G "%VS_GEN%"

+#build_script:

+#  - msbuild all.sln /p:Configuration=%Configuration%;Platform=%arch% /maxcpucount

+#test_script:

+## temporarily disabled - output will change often so no need for this yet

+##  - cmake . -DTEST_MODE=COMPARE

+#  - ctest -C %configuration% --output-on-failure

+#
\ No newline at end of file
diff --git a/doc/html_generated/features.html b/doc/html_generated/features.html
new file mode 100644
index 0000000..061cb93
--- /dev/null
+++ b/doc/html_generated/features.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>

+<html>

+<title>features</title>

+<xmp theme="united" style="display:none;">

+

+Features and design goals

+=======

+

+

+

+

+###extremely portable and bug free

+

+- c++98

+- Debug/Release

+- 32/64 bit

+- valgrind, address sanitizer, UB sanitizer, coverity (more static analysis coming soon)

+- tested with gcc under OSX/Linux

+    - 4.4

+    - 4.5

+    - 4.6

+    - 4.7

+    - 4.8

+    - 4.9

+    - 5

+- tested with clang under OSX/Linux

+    - 3.4

+    - 3.5

+    - 3.6

+    - 3.7

+    - 3.8

+- tested with Visual Studio

+    - VC++6 (yes - that 18 year old compiler from 1998)

+    - 2008

+    - 2010

+    - 2012

+    - 2013

+    - 2015

+

+###CI

+

+- 180 builds linux/osx

+- 18 builds windows

+

+###unintrusive:

+

+- everything testing-related can be removed from the binary executable with a global define

+- all macros have prefixes

+    - some by default have unprefixed versions as well but that can be turned off

+- 0 warnings even with the most aggresive flags

+- doesn't leave warnings disabled after itself

+- doesn't drag any headers with itself

+- everything is in doctest namespace

+    - implementation details are in a nested namespace

+- command line

+    - doesn't error on unrecognized options

+    - supports prefixed options that won't clash with user defines ones

+- can set options procedurally and not worry about the command line

+

+</xmp>

+<script src="strapdown.js/strapdown.js"></script>

+</html>

diff --git a/doc/html_generated/readme.html b/doc/html_generated/readme.html
index 58dbfa1..5984cde 100644
--- a/doc/html_generated/readme.html
+++ b/doc/html_generated/readme.html
@@ -3,9 +3,26 @@
 <title>readme</title>

 <xmp theme="united" style="display:none;">

 

-doctest

+Reference

 =======

 

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

 doctest is a c++ header only library for writing tests that is inspired by the unittest functionality in the D programming language and the docstrings in python - tests are documentation and should reside near the code they test.

 

 The library has automatic test discovery and is c++98 compatible.

@@ -115,12 +132,8 @@
 

 ##Notes

 

-- The library does not produce any warnings with GCC when compiled with ```-Wall -Wextra -pedantic -std=c++98 -m64```

-

 - The registration of test functions can be disabled by defining ```DOCTEST_GLOBAL_DISABLE``` before the inclusion of the **doctest.h** header. For large projects with tens of thousands of tests this may reduce the link time of the production build especially if lots of tests are registered in header files and will also reduce the binary size. See **disabled** from the examples folder.

 

-- The library by default includes its implementation which drags a dependency on **std::map**, the **cstring** header and the implementation of the library. This can be avoided by defining ```DOCTEST_DONT_INCLUDE_IMPLEMENTATION``` before the inclusion of **doctest.h** but then the user should include **doctest_impl.h** in one of his source files and have the ```DOCTEST_DONT_INCLUDE_IMPLEMENTATION``` macro defined before that as well. See **alternative_header_inclusion** from the examples folder.

-

 - Tests are registered from top to bottom of each processed cpp after the headers have been preprocessed and included but there is no ordering between cpp files.

 

 - Tests are registered globally within each shared object/executable. If a test is defined in a header and that header is used in an executable and in a shared object, then the test is registered in both places. To see how to invoke tests from a shared object check out **multi_dll** from the examples folder.

@@ -135,35 +148,6 @@
 

   - the **pragma once** directive - supporting the DRY principle

 

-##Workflow with examples

-

-The requirements for the examples are to have CMake 2.8 or higher.

-

-####Under Linux

-

-To build an example navigate to its folder and enter

-

-```

-cmake ./

-make

-./exe

-```

-

-####Under Windows

-

-You will need **MinGW w64** installed for Windows (or MSVC 2013 - hardcoded in the .bat files)

-

-You can get **MinGW w64** from http://sourceforge.net/projects/mingwbuilds/ (arch: "x64" threads: "posix" exceptions: "seh")

-

-Use the bat files in the examples folder to build (or atleast configure) each example - place them in the sub folder of an example and run them

-

-- **g.bat** - generates build files through cmake

-

-- **c.bat** - invokes mingw32-make on the makefile target

-

-- **r.bat** - runs the exe

-

-

 </xmp>

 <script src="strapdown.js/strapdown.js"></script>

 </html>

diff --git a/doc/html_generated/todo.html b/doc/html_generated/todo.html
index b851c3e..1431aa1 100644
--- a/doc/html_generated/todo.html
+++ b/doc/html_generated/todo.html
@@ -3,16 +3,12 @@
 <title>todo</title>

 <xmp theme="united" style="display:none;">

 

-## TODO FOR FIRST RELEASE

 

 

 

-look at catch command line options (also lest)

-- version (also add a step in the .txt file for updating the library - or even make it automatic!)

-- randomization of test order

-- detect floating point exceptions

-- colors

 

+- look at catch command line options (also lest)

+- sorting the test order (also RAND! and SEED!) (by file, by test suite, or both, ASC/DESC...)

 

 - signal handling for unix: http://www.cplusplus.com/reference/csignal/signal/

 (signals on *NIX platforms or structured exceptions on Windows)

@@ -24,25 +20,47 @@
 - xml reporter (jUnit compatible, etc.)

 

 - think about the expression decomposition static asserts

-- example of stringify-ing common stl stuff like containers

-- test coverage

-- help and version flags!

-- fixing warnings gcc/clang/msvc (and add more stuff in the disabled example)

+- kosta - test pledgie

 

-GCC 4.8/5.0 -Wstrict-overflow NONSENSE

-

-gcc 4.5/4.6 under osx - weird stuff

-/Users/travis/build/onqtam/doctest/examples/hello_world/main.cpp:8:1: warning: offset outside bounds of constant string

-

+- the help!

+- examples and test coverage

+- enabling COMPARE in tests

 - test for warnings with -std=c++03/11/14/1z

-- benchmark

+- benchmark (assimp and empty files - or maybe just empty files)

 - documentation

 - CONTRIBUTING.md - pull requests, travis, formatting, etc.

 - pledgie campaign - more info

 

-## Spreading the word after 1.0.0 is released

+## FUTURE

+- gcc 6

+- pool allocator for String class

+- floating point comparison support

+- Bitwise() class that has overloaded operators for comparison - to be used to check objects bitwise against each other

+- timing reports of tests, duration restrictions, kill of longer than (will perhaps require threading), etc...

+- test execution in separate processes - UNIX only with fork() (but windows has some .dll which could help)

+- matchers?

+- detect floating point exceptions

+- [CI] static analysis: msvc, clang, cppcheck

+- [CI] mingw-w64 on appveyor

 

-- bringing the unittest functionality of D into C++

+## UNSURE

+

+- BDD based on the subtests - like Catch

+- tagging? also see this: https://github.com/philsquared/Catch/blob/master/docs/test-cases-and-sections.md#special-tags

+- utf8?

+- a message macro (also tracepoint/passpoint/info/context and whatever - like in boost.test) (ALSO ERROR/FAIL - like boost)

+- add WARN as third option to CHECK/REQUIRE versions of assertions

+- hierarchical test suites? using a stack for the pushed states - should be easy

+- ability to re-run only newly compiled tests - based on timestamps of the __FILE__ in which they are - and stored in some file

+- put internals in anonymous namespace (even if already in detail) - even though clang-format will make everything more indented

+- wchar stuff in stringify and whatever - see <wchar.h>

+- progress of tests being executed (and an option for it)

+- think about adding support for std::exception and others

+- think about parameterising the output alignment to 80 or some other column limit

+- think about the ability to mix different versions of the library within the same executable (like stb libraries)

+- ability to transfer/copy registered functions from one dll to another so they are put in one set and duplicates are filtered

+

+## Spreading the word after 1.0.0 is released

 

 - reddit cpp/programming/gamedev/other

 - boost mailing list

@@ -50,6 +68,7 @@
 - comp.std.c++

 - hackernews

 - hora ot cg

+- code project site!!! :D

 - bg podcast? like bobi?

 - gamedev/programming/c++ forums

 - https://github.com/fffaraz/awesome-cpp

@@ -66,42 +85,62 @@
 - https://www.google.bg/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=list%20of%20testing%20frameworks%20c%2B%2B

 - http://stackoverflow.com/a/33925554/3162383

 

-## FUTURE

-- [core] timing reports of tests, duration restrictions, kill of longer than, etc...

-- [core] test execution in separate processes - UNIX only with fork() (but windows has some .dll which could help)

-- [CI] test with VC6 (and maybe get it somehow on a zip install for appveyor)

-- [CI] try building with VS 2008/2010/2012/2013 also on appveyor - http://www.appveyor.com/docs/installed-software

-- [CI] mingw-w64 on appveyor

-- [CI] static analysis: msvc, clang, cppcheck

-- [easy] hierarchical test suites? using a stack for the pushed states

-- [easy] sorting the test order (by file, by test suite, or both, ASC/DESC...)

-- [easy] error checking of parameters (if the range is valid (first <= last), etc)

-- [easy] pool allocator for String class

-- [unsure] ability to re-run only newly compiled tests - based on timestamps of the __FILE__ in which they are - and stored in some file

-- [unsure] Bitwise() class that has overloaded operators for comparison - to be used to check objects bitwise against each other

-- [unsure] add WARN as third option to CHECK/REQUIRE versions of assertions

-- [unsure] floating point comparison support

-- [unsure] ability to stop a test after it exceeds a time limit (will perhaps require threading)

-- [unsure] BDD based on the subtests - like Catch

-- [unsure] matchers?

-- [unsure] put internals in anonymous namespace (even if already in detail) - even though clang-format will make everything more indented

-- [unsure] silencing warnings - take into account when a compiler (which version) accuires a pragma/attribute/warning (for gcc use -Wno-unknown-warning)

-- [unsure] ability to transfer/copy registered functions from one dll to another so they are put in one set and duplicates are filtered

-- [unsure] progress of tests being executed (and an option for it)

-- [unsure] wchar stuff in stringify and whatever - see <wchar.h>

-- [unsure] tagging? also see this: https://github.com/philsquared/Catch/blob/master/docs/test-cases-and-sections.md#special-tags

-- [unsure] utf8?

-- [unsure] think about adding support for std::exception and others

-- [unsure] think about parameterising the output alignment to 80 or some other column limit

-- [unsure] a message macro (also tracepoint/passpoint/info/context and whatever - like in boost.test) (ALSO ERROR/FAIL - like boost)

-- think about the ability to mix different versions of the library within the same executable (like stb libraries)

-

 ## DOCUMENTATION

 

 "the latest and greatest in unit testing in c++"

 

 180 builds linux/osx (+12 if clang 3.4/3.5/3.6 get the 32 bit sanitizer stuff)

-4 builds windows

+18 builds windows

+

+VC6 subcases not working - set a bounty on this:

+http://stackoverflow.com/questions/36940730/preprocessor-problems-with-vc6

+VC6 - templated stringify() overloads will not compile

+

+extremely portable and bug free

+- c++98

+- Debug/Release

+- 32/64 bit

+- valgrind, address sanitizer, UB sanitizer, coverity (more static analysis coming soon)

+- tested with gcc under OSX/Linux

+    - 4.4

+    - 4.5

+    - 4.6

+    - 4.7

+    - 4.8

+    - 4.9

+    - 5

+- tested with clang under OSX/Linux

+    - 3.4

+    - 3.5

+    - 3.6

+    - 3.7

+    - 3.8

+- tested with Visual Studio

+    - VC++6 (yes - that 18 year old compiler from 1998)

+    - 2008

+    - 2010

+    - 2012

+    - 2013

+    - 2015

+CI:

+- 180 builds linux/osx

+- 18 builds windows

+

+unintrusive

+- everything testing-related can be removed from the binary executable with a global define

+- all macros have prefixes

+    - some by default have unprefixed versions as well but that can be turned off

+- 0 warnings even with the most aggresive flags

+- doesn't leave warnings disabled after itself

+- doesn't drag any headers with itself

+- everything is in doctest namespace

+    - implementation details are in a nested namespace

+- command line

+    - doesn't error on unrecognized options

+    - supports prefixed options that won't clash with user defines ones

+- can set options procedurally and not worry about the command line

+

+

 

 - mimic catch front page - tutorial link, what is different link, documentation link.

 - profile doctest vs Catch (compile/startup)

diff --git a/doc/markdown/features.md b/doc/markdown/features.md
new file mode 100644
index 0000000..5caba9b
--- /dev/null
+++ b/doc/markdown/features.md
@@ -0,0 +1,53 @@
+Features and design goals
+=======
+
+
+
+
+###extremely portable and bug free
+
+- c++98
+- Debug/Release
+- 32/64 bit
+- valgrind, address sanitizer, UB sanitizer, coverity (more static analysis coming soon)
+- tested with gcc under OSX/Linux
+    - 4.4
+    - 4.5
+    - 4.6
+    - 4.7
+    - 4.8
+    - 4.9
+    - 5
+- tested with clang under OSX/Linux
+    - 3.4
+    - 3.5
+    - 3.6
+    - 3.7
+    - 3.8
+- tested with Visual Studio
+    - VC++6 (yes - that 18 year old compiler from 1998)
+    - 2008
+    - 2010
+    - 2012
+    - 2013
+    - 2015

+
+###CI
+
+- 180 builds linux/osx
+- 18 builds windows
+
+###unintrusive:
+
+- everything testing-related can be removed from the binary executable with a global define
+- all macros have prefixes
+    - some by default have unprefixed versions as well but that can be turned off
+- 0 warnings even with the most aggresive flags
+- doesn't leave warnings disabled after itself
+- doesn't drag any headers with itself
+- everything is in doctest namespace
+    - implementation details are in a nested namespace
+- command line
+    - doesn't error on unrecognized options
+    - supports prefixed options that won't clash with user defines ones
+- can set options procedurally and not worry about the command line
\ No newline at end of file
diff --git a/doc/markdown/readme.md b/doc/markdown/readme.md
index 9b6e359..e0ffa11 100644
--- a/doc/markdown/readme.md
+++ b/doc/markdown/readme.md
@@ -1,6 +1,23 @@
-doctest
+Reference
 =======
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 doctest is a c++ header only library for writing tests that is inspired by the unittest functionality in the D programming language and the docstrings in python - tests are documentation and should reside near the code they test.
 
 The library has automatic test discovery and is c++98 compatible.
@@ -110,12 +127,8 @@
 
 ##Notes
 
-- The library does not produce any warnings with GCC when compiled with ```-Wall -Wextra -pedantic -std=c++98 -m64```
-
 - The registration of test functions can be disabled by defining ```DOCTEST_GLOBAL_DISABLE``` before the inclusion of the **doctest.h** header. For large projects with tens of thousands of tests this may reduce the link time of the production build especially if lots of tests are registered in header files and will also reduce the binary size. See **disabled** from the examples folder.
 
-- The library by default includes its implementation which drags a dependency on **std::map**, the **cstring** header and the implementation of the library. This can be avoided by defining ```DOCTEST_DONT_INCLUDE_IMPLEMENTATION``` before the inclusion of **doctest.h** but then the user should include **doctest_impl.h** in one of his source files and have the ```DOCTEST_DONT_INCLUDE_IMPLEMENTATION``` macro defined before that as well. See **alternative_header_inclusion** from the examples folder.
-
 - Tests are registered from top to bottom of each processed cpp after the headers have been preprocessed and included but there is no ordering between cpp files.
 
 - Tests are registered globally within each shared object/executable. If a test is defined in a header and that header is used in an executable and in a shared object, then the test is registered in both places. To see how to invoke tests from a shared object check out **multi_dll** from the examples folder.
@@ -128,32 +141,4 @@
 
   - the **__COUNTER__** macro, but all major compilers support it (if it is not found, **__LINE__** is used and then there are some corner cases with the macro codegen and a test may be registered twice)
 
-  - the **pragma once** directive - supporting the DRY principle
-
-##Workflow with examples
-
-The requirements for the examples are to have CMake 2.8 or higher.
-
-####Under Linux
-
-To build an example navigate to its folder and enter
-
-```
-cmake ./
-make
-./exe
-```
-
-####Under Windows
-
-You will need **MinGW w64** installed for Windows (or MSVC 2013 - hardcoded in the .bat files)
-
-You can get **MinGW w64** from http://sourceforge.net/projects/mingwbuilds/ (arch: "x64" threads: "posix" exceptions: "seh")
-
-Use the bat files in the examples folder to build (or atleast configure) each example - place them in the sub folder of an example and run them
-
-- **g.bat** - generates build files through cmake
-
-- **c.bat** - invokes mingw32-make on the makefile target
-
-- **r.bat** - runs the exe
+  - the **pragma once** directive - supporting the DRY principle
\ No newline at end of file
diff --git a/doc/markdown/todo.md b/doc/markdown/todo.md
index fb8f465..24fe382 100644
--- a/doc/markdown/todo.md
+++ b/doc/markdown/todo.md
@@ -3,8 +3,6 @@
 

 

 - look at catch command line options (also lest)

-- detect floating point exceptions

-- colors

 - sorting the test order (also RAND! and SEED!) (by file, by test suite, or both, ASC/DESC...)

 

 - signal handling for unix: http://www.cplusplus.com/reference/csignal/signal/

@@ -17,10 +15,11 @@
 - xml reporter (jUnit compatible, etc.)

 

 - think about the expression decomposition static asserts

-- test coverage

-- enabling COMPARE in tests

-- the help!

 - kosta - test pledgie

+

+- the help!

+- examples and test coverage

+- enabling COMPARE in tests

 - test for warnings with -std=c++03/11/14/1z

 - benchmark (assimp and empty files - or maybe just empty files)

 - documentation

@@ -30,12 +29,12 @@
 ## FUTURE

 - gcc 6

 - pool allocator for String class

-- Bitwise() class that has overloaded operators for comparison - to be used to check objects bitwise against each other

 - floating point comparison support

 - Bitwise() class that has overloaded operators for comparison - to be used to check objects bitwise against each other

 - timing reports of tests, duration restrictions, kill of longer than (will perhaps require threading), etc...

 - test execution in separate processes - UNIX only with fork() (but windows has some .dll which could help)

 - matchers?

+- detect floating point exceptions

 - [CI] static analysis: msvc, clang, cppcheck

 - [CI] mingw-w64 on appveyor

 

@@ -54,10 +53,8 @@
 - think about adding support for std::exception and others

 - think about parameterising the output alignment to 80 or some other column limit

 - think about the ability to mix different versions of the library within the same executable (like stb libraries)

-- silencing warnings - take into account when a compiler (which version) accuires a pragma/attribute/warning (for gcc use -Wno-unknown-warning)

 - ability to transfer/copy registered functions from one dll to another so they are put in one set and duplicates are filtered

 

-

 ## Spreading the word after 1.0.0 is released

 

 - reddit cpp/programming/gamedev/other

@@ -125,6 +122,7 @@
 - 18 builds windows

 

 unintrusive

+- everything testing-related can be removed from the binary executable with a global define

 - all macros have prefixes

     - some by default have unprefixed versions as well but that can be turned off

 - 0 warnings even with the most aggresive flags

diff --git a/scripts/update.py b/scripts/update.py
index 078504b..6316ff5 100644
--- a/scripts/update.py
+++ b/scripts/update.py
@@ -78,8 +78,8 @@
 
 readme_contents = ""
 for line in fileinput.input(["../README.md"]):
-    if line.startswith("[![Try it online]"):
-        readme_contents += "[![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](" + url + ")\n"
+    if line.startswith("- [![Try it online]"):
+        readme_contents += "- [![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](" + url + ")\n"
     else:
         readme_contents += line