switch to doctest for unit testing

thanks to Nico Werner, who did most of the porting work
java_describe
Hubert Chathi 2021-12-22 13:45:33 -05:00
parent e197cd76d6
commit 8475061136
297 changed files with 40291 additions and 568 deletions

82
lib/doctest/.clang-format Normal file
View File

@ -0,0 +1,82 @@
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
DisableFormat: false
Language: Cpp
Standard: Cpp11
IndentWidth: 4
TabWidth: 4
UseTab: Never
ColumnLimit: 100
ReflowComments: false
SortIncludes: false
AlignConsecutiveAssignments: true
AlignConsecutiveDeclarations: true
AlignEscapedNewlinesLeft: false
AlignOperands: true
AlignTrailingComments: true
AlignAfterOpenBracket: true
DerivePointerAlignment: false
PointerAlignment: Left
IndentCaseLabels: true
ContinuationIndentWidth: 8
NamespaceIndentation: Inner
CompactNamespaces: true
FixNamespaceComments: true
AccessModifierOffset: -4
SpaceAfterControlStatementKeyword: false
SpaceAfterCStyleCast: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: Never
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Cpp11BracedListStyle: true
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 1
BinPackArguments: true
BinPackParameters: true
AlwaysBreakAfterReturnType: None
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakTemplateDeclarations: true
BreakConstructorInitializersBeforeComma: true
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 8
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AllowShortBlocksOnASingleLine: true
AllowShortCaseLabelsOnASingleLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortFunctionsOnASingleLine: All
BreakBeforeBinaryOperators: false
BreakBeforeTernaryOperators: false
BreakStringLiterals: true
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterEnum: true
AfterNamespace: false
AfterStruct: true
AfterUnion: true
BeforeCatch: false
BeforeElse: false
IndentBraces: false
AfterFunction: false
AfterControlStatement: false
# penalties not thought of yet
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 60
PenaltyBreakString: 1000
PenaltyBreakFirstLessLess: 120
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 1000

12
lib/doctest/.editorconfig Normal file
View File

@ -0,0 +1,12 @@
root = true
[*]
charset = utf-8
trim_trailing_whitespace = true
end_of_line = lf
indent_style = space
indent_size = 4
insert_final_newline = true
[*.yml]
indent_size = 2

1
lib/doctest/.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
* text=auto

4
lib/doctest/.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,4 @@
github: onqtam
patreon: onqtam
custom: https://www.paypal.me/onqtam/10

29
lib/doctest/.github/issue_template.md vendored Normal file
View File

@ -0,0 +1,29 @@
## Description
<!--
If your issue is a bugreport, this means describing what you did,
what did you want to happen and what actually did happen.
If your issue is a feature request, describe the feature and why do you
want it.
-->
### Steps to reproduce
<!--
This is only relevant for bug reports, but if you do have one,
please provide a minimal set of steps to reproduce the problem.
Usually this means providing a small and self-contained code using doctest
and specifying compiler flags/tools used if relevant.
-->
### Extra information
<!--
Fill in any extra information that might be important for your issue.
If your issue is a bugreport, definitely fill out at least the following.
-->
* doctest version: **v42.42.42**
* Operating System: **Joe's discount operating system**
* Compiler+version: **Hidden Dragon v1.2.3**

View File

@ -0,0 +1,26 @@
<!--
Make sure the PR is against the dev branch and not master which contains
the latest stable release. Also make sure to have read CONTRIBUTING.md.
Please do not submit pull requests changing the single-include `doctest.h`
file, it is generated from the 2 files in the doctest/parts/ folder.
-->
## Description
<!--
Describe the what and the why of your pull request. Remember that these two
are usually a bit different. As an example, if you have made various changes
to decrease the number of new strings allocated, that's what. The why probably
was that you have a large set of tests and found that this speeds them up.
-->
## GitHub Issues
<!--
If this PR was motivated by some existing issues, reference them here.
If it is a simple bug-fix, please also add a line like 'Closes #123'
to your commit message, so that it is automatically closed.
If it is not, don't, as it might take several iterations for a feature
to be done properly. If in doubt, leave it open and reference it in the
PR itself, so that maintainers can decide.
-->

View File

@ -0,0 +1,67 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '38 1 * * *'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'cpp' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

490
lib/doctest/.github/workflows/main.yml vendored Normal file
View File

@ -0,0 +1,490 @@
name: CI
on: [push, pull_request]
jobs:
ci:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
env:
CMAKE_GENERATOR: Ninja
ASAN_OPTIONS: strict_string_checks=true:detect_odr_violation=2:detect_stack_use_after_return=true:check_initialization_order=true:strict_init_order=true
TSAN_OPTIONS: force_seq_cst_atomics=1
CTEST_OUTPUT_ON_FAILURE: ON
CTEST_PARALLEL_LEVEL: 2
ACTIONS_ALLOW_UNSECURE_COMMANDS: true # because of the set-env calls
strategy:
fail-fast: false
matrix:
# Github Actions requires a single row to be added to the build matrix.
# See https://help.github.com/en/articles/workflow-syntax-for-github-actions.
name: [
ubuntu-18.04-gcc-4.8,
ubuntu-18.04-gcc-4.9,
ubuntu-18.04-gcc-5,
ubuntu-18.04-gcc-6,
ubuntu-18.04-gcc-7,
ubuntu-18.04-gcc-8,
ubuntu-18.04-gcc-9,
ubuntu-latest-gcc-10,
ubuntu-18.04-clang-3.5,
ubuntu-18.04-clang-3.6,
ubuntu-18.04-clang-3.7,
ubuntu-18.04-clang-3.8,
ubuntu-18.04-clang-3.9,
ubuntu-18.04-clang-4.0,
ubuntu-18.04-clang-5.0,
ubuntu-18.04-clang-6.0,
ubuntu-18.04-clang-7,
ubuntu-18.04-clang-8,
# ubuntu-latest-clang-9,
ubuntu-latest-clang-10,
# ubuntu-latest-clang-11,
windows-2016-cl,
windows-2016-clang-cl,
windows-2016-clang,
# windows-2016-gcc,
windows-2019-cl,
windows-2019-clang-cl,
windows-2019-clang,
# windows-2019-gcc,
macOS-latest-xcode-11.3,
]
include:
- name: ubuntu-18.04-gcc-4.8
os: ubuntu-18.04
compiler: gcc
version: "4.8"
- name: ubuntu-18.04-gcc-4.9
os: ubuntu-18.04
compiler: gcc
version: "4.9"
- name: ubuntu-18.04-gcc-5
os: ubuntu-18.04
compiler: gcc
version: "5"
- name: ubuntu-18.04-gcc-6
os: ubuntu-18.04
compiler: gcc
version: "6"
- name: ubuntu-18.04-gcc-7
os: ubuntu-18.04
compiler: gcc
version: "7"
- name: ubuntu-18.04-gcc-8
os: ubuntu-18.04
compiler: gcc
version: "8"
- name: ubuntu-18.04-gcc-9
os: ubuntu-18.04
compiler: gcc
version: "9"
- name: ubuntu-latest-gcc-10
os: ubuntu-latest
compiler: gcc
version: "10"
- name: ubuntu-18.04-clang-3.5
os: ubuntu-18.04
compiler: clang
version: "3.5"
- name: ubuntu-18.04-clang-3.6
os: ubuntu-18.04
compiler: clang
version: "3.6"
- name: ubuntu-18.04-clang-3.7
os: ubuntu-18.04
compiler: clang
version: "3.7"
- name: ubuntu-18.04-clang-3.8
os: ubuntu-18.04
compiler: clang
version: "3.8"
- name: ubuntu-18.04-clang-3.9
os: ubuntu-18.04
compiler: clang
version: "3.9"
- name: ubuntu-18.04-clang-4.0
os: ubuntu-18.04
compiler: clang
version: "4.0"
- name: ubuntu-18.04-clang-5.0
os: ubuntu-18.04
compiler: clang
version: "5.0"
- name: ubuntu-18.04-clang-6.0
os: ubuntu-18.04
compiler: clang
version: "6.0"
- name: ubuntu-18.04-clang-7
os: ubuntu-18.04
compiler: clang
version: "7"
- name: ubuntu-18.04-clang-8
os: ubuntu-18.04
compiler: clang
version: "8"
# fails like this: https://github.com/onqtam/doctest/runs/1562896476?check_suite_focus=true
# - name: ubuntu-latest-clang-9
# os: ubuntu-latest
# compiler: clang
# version: "9"
- name: ubuntu-latest-clang-10
os: ubuntu-latest
compiler: clang
version: "10"
# fails like this: https://github.com/onqtam/doctest/runs/1562896512?check_suite_focus=true
# - name: ubuntu-latest-clang-11
# os: ubuntu-latest
# compiler: clang
# version: "11"
- name: windows-2016-cl
os: windows-2016
compiler: cl
- name: windows-2016-clang-cl
os: windows-2016
compiler: clang-cl
- name: windows-2016-clang
os: windows-2016
compiler: clang
- name: windows-2019-cl
os: windows-2019
compiler: cl
# fails to install it...
# - name: windows-2016-gcc
# os: windows-2016
# compiler: gcc
- name: windows-2019-clang-cl
os: windows-2019
compiler: clang-cl
- name: windows-2019-clang
os: windows-2019
compiler: clang
# fails to install it...
# - name: windows-2019-gcc
# os: windows-2019
# compiler: gcc
- name: macOS-latest-xcode-11.3
os: macOS-10.15
compiler: xcode
version: "11.3"
steps:
- uses: actions/checkout@v1
- name: Install (Linux)
if: runner.os == 'Linux'
run: |
# CMake 3.15 allows specifying the generator using the CMAKE_GENERATOR
# environment variable.
curl -sSL https://github.com/Kitware/CMake/releases/download/v3.15.4/cmake-3.15.4-Linux-x86_64.tar.gz -o cmake.tar.gz
sudo tar xf cmake.tar.gz --strip 1 -C /usr/local
# Required for libc6-dbg:i386 and g++-multilib packages which are
# needed for x86 builds.
sudo dpkg --add-architecture i386
# clang-3.7 and earlier are not available in Bionic anymore so we get
# them from the Xenial repositories instead.
sudo add-apt-repository "deb http://dk.archive.ubuntu.com/ubuntu/ xenial main"
sudo add-apt-repository "deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe"
# LLVM 9 is not in Bionic's repositories so we add the official LLVM repository.
if [ "${{ matrix.compiler }}" = "clang" ] && [ "${{ matrix.version }}" = "9" ]; then
sudo add-apt-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main"
fi
sudo apt-get update
# sudo apt-get install libopenmpi-dev
# sudo apt-get install openmpi-bin
# libc6-dbg:i386 is required for running valgrind on x86.
sudo apt-get install -y ninja-build valgrind libc6-dbg:i386
if [ "${{ matrix.compiler }}" = "gcc" ]; then
sudo apt-get install -y g++-${{ matrix.version }} g++-${{ matrix.version }}-multilib
echo "::set-env name=CC::gcc-${{ matrix.version }}"
echo "::set-env name=CXX::g++-${{ matrix.version }}"
else
sudo apt-get install -y clang-${{ matrix.version }} g++-multilib
echo "::set-env name=CC::clang-${{ matrix.version }}"
echo "::set-env name=CXX::clang++-${{ matrix.version }}"
fi
- name: Install (macOS)
if: runner.os == 'macOS'
run: |
brew install cmake ninja
if [ "${{ matrix.compiler }}" = "gcc" ]; then
brew install gcc@${{ matrix.version }}
echo "::set-env name=CC::gcc-${{ matrix.version }}"
echo "::set-env name=CXX::g++-${{ matrix.version }}"
else
ls -ls /Applications/
sudo xcode-select -switch /Applications/Xcode_${{ matrix.version }}.app
echo "::set-env name=CC::clang"
echo "::set-env name=CXX::clang++"
fi
- name: Install (Windows)
if: runner.os == 'Windows'
shell: powershell
run: |
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
scoop install ninja --global
if ("${{ matrix.compiler }}".StartsWith("clang")) {
scoop install llvm --global
}
if ("${{ matrix.compiler }}" -eq "gcc") {
# Chocolatey GCC is broken on the windows-2019 image.
# See: https://github.com/DaanDeMeyer/doctest/runs/231595515
# See: https://github.community/t5/GitHub-Actions/Something-is-wrong-with-the-chocolatey-installed-version-of-gcc/td-p/32413
scoop install gcc --global
echo "::set-env name=CC::gcc"
echo "::set-env name=CXX::g++"
} elseif ("${{ matrix.compiler }}" -eq "clang") {
echo "::set-env name=CC::clang"
echo "::set-env name=CXX::clang++"
} else {
echo "::set-env name=CC::${{ matrix.compiler }}"
echo "::set-env name=CXX::${{ matrix.compiler }}"
}
# Scoop modifies the PATH so we make the modified PATH global.
echo "::set-env name=PATH::$env:PATH"
- name: Configure ASAN/UBSAN
if: runner.os == 'Linux' || runner.os == 'macOS'
run: |
# https://stackoverflow.com/a/37939589/11900641
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
# Disable sanitizers in configurations where we know they are buggy.
# TODO: Move these conditions to the if clause if Github Actions ever
# adds support for comparing versions.
# See: https://github.community/t5/GitHub-Actions/Allow-comparing-versions-in-if-conditions/m-p/33912#M1710
if [ "${{ runner.os }}" = "Linux" ] && \
[ "${{ matrix.compiler }}" = "gcc" ] && \
[ $(version ${{ matrix.version }}) -le $(version "5.0") ]; then
exit 0
fi
if [ "${{ runner.os }}" = "Linux" ] && \
[ "${{ matrix.compiler }}" = "clang" ] && \
[ $(version ${{ matrix.version }}) -le $(version "6.0") ]; then
exit 0
fi
if [ "${{ runner.os }}" = "macOS" ] && \
[ "${{ matrix.compiler }}" = "xcode" ] && \
[ $(version ${{ matrix.version }}) -le $(version "9.4.1") ]; then
exit 0
fi
if [ "${{ runner.os }}" = "macOS" ] && \
[ "${{ matrix.compiler }}" = "gcc" ]; then
exit 0
fi
ASAN_UBSAN_FLAGS="-fsanitize=address,undefined -fno-omit-frame-pointer"
# Link statically against ASAN libraries because dynamically linking
# against ASAN libraries causes problems when using dlopen on Ubuntu.
# See: https://github.com/DaanDeMeyer/doctest/runs/249002713
if [ "${{ runner.os }}" = "Linux" ] && [ "${{ matrix.compiler }}" = "gcc" ]; then
ASAN_UBSAN_FLAGS="$ASAN_UBSAN_FLAGS -static-libasan"
fi
# Compiling in bash on Windows doesn't work and powershell doesn't
# exit on non-zero exit codes so we're forced to use cmd which means
# we don't have a cross platform way to access environment variables.
# To circumvent this, we put the sanitizer flags in an environment
# variable that is automatically picked up by CMake.
echo "::set-env name=CXXFLAGS::$ASAN_UBSAN_FLAGS"
- name: Configure TSAN
if: runner.os == 'Linux' || runner.os == 'macOS'
run: |
# https://stackoverflow.com/a/37939589/11900641
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
if [ "${{ runner.os }}" = "Linux" ] && \
[ "${{ matrix.compiler }}" = "gcc" ] && \
[ $(version ${{ matrix.version }}) -le $(version "6.0") ]; then
exit 0
fi
if [ "${{ runner.os }}" = "Linux" ] && \
[ "${{ matrix.compiler }}" = "clang" ] && \
[ $(version ${{ matrix.version }}) -le $(version "3.9") ]; then
exit 0
fi
if [ "${{ runner.os }}" = "macOS" ] && \
[ "${{ matrix.compiler }}" = "gcc" ]; then
exit 0
fi
TSAN_FLAGS="-fsanitize=thread -pie -fPIE"
if [ "${{ runner.os }}" = "Linux" ] && [ "${{ matrix.compiler }}" = "gcc" ]; then
TSAN_FLAGS="$TSAN_FLAGS -static-libtsan"
fi
# The thread sanitizers build does not run on Windows so we can just
# use bash syntax to access the TSAN flags in the thread sanitizers
# build step.
echo "::set-env name=TSAN_FLAGS::$TSAN_FLAGS"
- name: Configure x64
if: runner.os == 'Windows'
run: .github\workflows\vsenv.bat -arch=x64 -host_arch=x64
- name: Build & Test Debug x64
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug -DDOCTEST_TEST_MODE=COMPARE
cmake --build build
cd build
ctest
- name: Build & Test Release x64
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DDOCTEST_TEST_MODE=COMPARE
cmake --build build
cd build
ctest
# Valgrind doesn't support the latest macOS versions.
# `-DCMAKE_CXX_FLAGS=""` overrides CXXFLAGS (disables sanitizers).
- name: Build & Test Debug x64 Valgrind
if: runner.os == 'Linux'
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="" -DDOCTEST_TEST_MODE=VALGRIND
cmake --build build
cd build
ctest
- name: Build & Test Release x64 Valgrind
if: runner.os == 'Linux'
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="" -DDOCTEST_TEST_MODE=VALGRIND
cmake --build build
cd build
ctest
- name: Build & Test Debug x64 Thread Sanitizers
if: runner.os == 'Linux' || runner.os == 'macOS'
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="$TSAN_FLAGS" -DDOCTEST_TEST_MODE=COMPARE
cmake --build build
cd build
ctest
- name: Build & Test Debug x64 without RTTI
if: runner.os == 'Linux' || runner.os == 'macOS'
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fno-rtti" -DDOCTEST_TEST_MODE=COMPARE
cmake --build build
cd build
ctest
- name: Build x64 Debug without exceptions
if: runner.os == 'Linux' || runner.os == 'macOS'
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fno-exceptions -DDOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS"
cmake --build build
# MinGW x86 tests fail on Windows: https://github.com/DaanDeMeyer/doctest/runs/240600881.
# MacOS doesn't support x86 from Xcode 10 onwards.
- name: Configure x86
shell: pwsh
if: (runner.os == 'Windows' && matrix.compiler != 'gcc') || runner.os == 'Linux'
run: |
if ("${{ runner.os }}" -eq "Windows") {
& .github\workflows\vsenv.bat -arch=x86 -host_arch=x64
}
if ("${{ matrix.compiler }}" -notcontains "cl") {
echo "::set-env name=CXXFLAGS::$env:CXXFLAGS -m32"
}
- name: Build & Test Debug x86
if: (runner.os == 'Windows' && matrix.compiler != 'gcc') || runner.os == 'Linux'
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug -DDOCTEST_TEST_MODE=COMPARE
cmake --build build
cd build
ctest
- name: Build & Test Release x86
if: (runner.os == 'Windows' && matrix.compiler != 'gcc') || runner.os == 'Linux'
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DDOCTEST_TEST_MODE=COMPARE
cmake --build build
cd build
ctest
- name: Build & Test Debug x86 Valgrind
if: runner.os == 'Linux'
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-m32" -DDOCTEST_TEST_MODE=VALGRIND
cmake --build build
cd build
ctest
- name: Build & Test Release x86 Valgrind
if: runner.os == 'Linux'
run: |
cmake -E remove_directory build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32" -DDOCTEST_TEST_MODE=VALGRIND
cmake --build build
cd build
ctest

17
lib/doctest/.github/workflows/vsenv.bat vendored Normal file
View File

@ -0,0 +1,17 @@
@echo off
SET VSWHERE="C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere"
:: See https://github.com/microsoft/vswhere/wiki/Find-VC
for /f "usebackq delims=*" %%i in (`%VSWHERE% -latest -property installationPath`) do (
call "%%i"\Common7\Tools\vsdevcmd.bat %*
)
:: Loop over all environment variables and make them global using set-env.
:: See: https://help.github.com/en/articles/development-tools-for-github-actions#set-an-environment-variable-set-env
:: See: https://stackoverflow.com/questions/39183272/loop-through-all-environmental-variables-and-take-actions-depending-on-prefix
setlocal
for /f "delims== tokens=1,2" %%a in ('set') do (
echo ::set-env name=%%a::%%b
)
endlocal

40
lib/doctest/.gitignore vendored Normal file
View File

@ -0,0 +1,40 @@
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
# Text garbage
*.ii
*.s
# My garbage :)
Win32/
x64/
doctest_with_main.dir/
scripts/bench/project/*
scripts/bench/catch*.hpp
scripts/bench/results.txt
build/
build-mingw/
*.pyc
*vscode*
.idea/
cmake-build-*/
bazel-*

413
lib/doctest/.travis.yml Normal file
View File

@ -0,0 +1,413 @@
# # this file is HEAVILY influenced by https://github.com/boostorg/hana/blob/master/.travis.yml
# dist: trusty
# language: c++
# notifications:
# email: false
# # gitter
# webhooks:
# urls: https://webhooks.gitter.im/e/10941dd1c67e5e967706
# on_success: change
# on_failure: always
# git:
# depth: 500
# # both apt and ccache make the builds slower...
# #cache:
# # - apt
# # - ccache
# env:
# global:
# # - USE_CCACHE=1
# # - CCACHE_SLOPPINESS=pch_defines,time_macros
# # - CCACHE_COMPRESS=1
# # - CCACHE_MAXSIZE=200M
# # - CCACHE_CPP2=1
# - CMAKE_OPTIONS_GLOBAL="-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
# 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: clang++ scripts/hello_world.cpp -I doctest
# branch_pattern: coverity_scan
# # these apt sources will be referenced later (by using *name)
# apt:
# sources: &apt_sources
# - ubuntu-toolchain-r-test
# - llvm-toolchain-trusty
# - llvm-toolchain-precise-3.7
# - llvm-toolchain-trusty-3.9
# - llvm-toolchain-trusty-4.0
# - llvm-toolchain-trusty-5.0
# - llvm-toolchain-trusty-6.0
# - llvm-toolchain-trusty-7
# - llvm-toolchain-trusty-8
# - llvm-toolchain-trusty-9
# - llvm-toolchain-trusty-10
# compiler: clang
# os: linux
# matrix:
# include:
# # coverage
# - env: COMPILER=g++ CODE_COVERAGE=true
# compiler: gcc
# addons:
# apt:
# packages: ["lcov"]
# # static code analysis
# - env: COMPILER=clang++-4.0 STATIC_CODE_ANALYSIS=true
# addons: &static_analysis
# apt:
# packages: ["clang-4.0", "clang-tidy-4.0", "cppcheck"]
# sources: *apt_sources
# # GCC 4.8
# - env: COMPILER=g++-4.8 HAS_ASAN=true SANITIZER_CXX_FLAGS="-fuse-ld=gold -static-libasan" TSAN_CXX_FLAGS="-ltsan" # TSAN broken for some time - seg faults
# compiler: gcc
# addons: &gcc48
# apt:
# packages: ["g++-4.8", "valgrind", "libc6-dbg", "linux-libc-dev"]
# sources: *apt_sources
# # GCC 4.9
# - env: COMPILER=g++-4.9 HAS_ASAN=true HAS_UBSAN=true SANITIZER_CXX_FLAGS="-fuse-ld=gold -static-libasan" TSAN_CXX_FLAGS="-ltsan" # TSAN broken for some time - seg faults
# compiler: gcc
# addons: &gcc49
# apt:
# packages: ["g++-4.9", "valgrind", "libc6-dbg", "linux-libc-dev"]
# sources: *apt_sources
# # GCC 5
# - env: COMPILER=g++-5 HAS_ASAN=true HAS_UBSAN=true SANITIZER_CXX_FLAGS="-fuse-ld=gold -static-libasan" TSAN_CXX_FLAGS="-ltsan" # TSAN broken for some time - seg faults
# compiler: gcc
# addons: &gcc5
# apt:
# packages: ["g++-5", "valgrind", "libc6-dbg", "linux-libc-dev"]
# sources: *apt_sources
# # GCC 6
# - env: COMPILER=g++-6 HAS_ASAN=true HAS_UBSAN=true SANITIZER_CXX_FLAGS="-fuse-ld=gold -static-libasan" TSAN_CXX_FLAGS="-ltsan" # TSAN broken for some time - seg faults
# compiler: gcc
# addons: &gcc6
# apt:
# packages: ["g++-6", "valgrind", "libc6-dbg", "linux-libc-dev"]
# sources: *apt_sources
# # GCC 7
# - env: COMPILER=g++-7 HAS_ASAN=true HAS_UBSAN=true SANITIZER_CXX_FLAGS="-fuse-ld=gold -static-libasan" TSAN_CXX_FLAGS="-ltsan" # TSAN broken for some time - seg faults
# compiler: gcc
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &gcc7
# apt:
# packages: ["g++-7", "valgrind", "libc6-dbg", "linux-libc-dev"]
# sources: *apt_sources
# # GCC 8
# - env: COMPILER=g++-8 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true SANITIZER_CXX_FLAGS="-fuse-ld=gold -static-libasan" TSAN_CXX_FLAGS="-ltsan"
# compiler: gcc
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &gcc8
# apt:
# packages: ["g++-8", "valgrind", "libc6-dbg", "linux-libc-dev"]
# sources: *apt_sources
# # GCC 9
# - env: COMPILER=g++-9 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true SANITIZER_CXX_FLAGS="-fuse-ld=gold -static-libasan" TSAN_CXX_FLAGS="-ltsan"
# compiler: gcc
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &gcc9
# apt:
# packages: ["g++-9", "valgrind", "libc6-dbg", "linux-libc-dev"]
# sources: *apt_sources
# # GCC 10
# - env: COMPILER=g++-10 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true SANITIZER_CXX_FLAGS="-fuse-ld=gold -static-libasan" TSAN_CXX_FLAGS="-ltsan"
# compiler: gcc
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &gcc10
# apt:
# packages: ["g++-10", "valgrind", "libc6-dbg", "linux-libc-dev"]
# sources: *apt_sources
# # Clang 3.5
# - env: COMPILER=clang++-3.5 HAS_ASAN=true HAS_UBSAN=true # no HAS_TSAN - see errors: https://travis-ci.org/onqtam/doctest/builds/417926743
# addons: &clang35
# apt:
# packages: ["clang-3.5", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 3.6
# - env: COMPILER=clang++-3.6 HAS_ASAN=true HAS_UBSAN=true # no HAS_TSAN - see errors: https://travis-ci.org/onqtam/doctest/builds/417926743
# addons: &clang36
# apt:
# packages: ["clang-3.6", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 3.7
# - env: COMPILER=clang++-3.7
# addons: &clang37
# apt:
# packages: ["clang-3.7", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 3.8
# - env: COMPILER=clang++-3.8 HAS_ASAN=true HAS_UBSAN=true # no HAS_TSAN - see errors: https://travis-ci.org/onqtam/doctest/builds/417926743
# addons: &clang38
# apt:
# packages: ["clang-3.8", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 3.9
# - env: COMPILER=clang++-3.9 # no HAS_ASAN/HAS_UBSAN - see errors: https://travis-ci.org/onqtam/doctest/jobs/386263910
# addons: &clang39
# apt:
# packages: ["clang-3.9", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 4.0
# - env: COMPILER=clang++-4.0 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &clang40
# apt:
# packages: ["clang-4.0", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 5.0
# - env: COMPILER=clang++-5.0 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &clang50
# apt:
# packages: ["clang-5.0", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 6.0
# - env: COMPILER=clang++-6.0 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &clang60
# apt:
# packages: ["clang-6.0", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 7
# - env: COMPILER=clang++-7 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &clang7
# apt:
# packages: ["clang-7", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 8
# - env: COMPILER=clang++-8 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &clang8
# apt:
# packages: ["clang-8", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 9
# - env: COMPILER=clang++-9 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &clang9
# apt:
# packages: ["clang-9", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Clang 10
# - env: COMPILER=clang++-10 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# sudo: required # see this issue for more details: https://github.com/travis-ci/travis-ci/issues/9033
# addons: &clang9
# apt:
# packages: ["clang-10", "valgrind", "libc6-dbg", "g++-6"]
# sources: *apt_sources
# # Xcode 9.4 Clang
# - env: COMPILER=clang++ HAS_UBSAN=true HAS_TSAN=true # no HAS_ASAN - errors since using thread_local even in single-threaded cases - see errors: https://travis-ci.org/onqtam/doctest/builds/417181981
# osx_image: xcode9.4
# os: osx
# # Xcode 10.0 Clang
# - env: COMPILER=clang++ HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# osx_image: xcode10
# os: osx
# # Xcode 10.2 Clang
# - env: COMPILER=clang++ HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# osx_image: xcode10.2
# os: osx
# # Xcode 11.2 Clang
# - env: COMPILER=clang++ HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# osx_image: xcode11.2
# os: osx
# # OSX LLVM-GCC
# - env: COMPILER=g++ HAS_ASAN=true HAS_TSAN=true
# compiler: gcc
# osx_image: xcode10
# os: osx
# allow_failures:
# # static code analysis
# - env: COMPILER=clang++-4.0 STATIC_CODE_ANALYSIS=true
# # seems to not be present yet: https://travis-ci.org/github/onqtam/doctest/jobs/688097537
# # GCC 10
# - env: COMPILER=g++-10 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true SANITIZER_CXX_FLAGS="-fuse-ld=gold -static-libasan" TSAN_CXX_FLAGS="-ltsan"
# compiler: gcc
# sudo: required
# # Clang 10
# - env: COMPILER=clang++-10 HAS_ASAN=true HAS_UBSAN=true HAS_TSAN=true
# sudo: required
# install:
# - if [[ "${CODE_COVERAGE}" == "true" ]]; then gem install coveralls-lcov ; fi
# ############################################################################
# # All the dependencies are installed in ${TRAVIS_BUILD_DIR}/deps/
# ############################################################################
# # Make a dir for all
# - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
# - mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR}
# # Install a recent CMake
# - |
# if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
# CMAKE_URL="http://www.cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz"
# mkdir cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake
# export PATH=${DEPS_DIR}/cmake/bin:${PATH}
# fi
# # Install OCLint
# - |
# if [[ "${STATIC_CODE_ANALYSIS}" = "true" ]]; then
# OCLINT_URL="https://github.com/oclint/oclint/releases/download/v0.12/oclint-0.12-x86_64-linux-3.13.0-112-generic.tar.gz"
# mkdir oclint && travis_retry wget --no-check-certificate --quiet -O - ${OCLINT_URL} | tar --strip-components=1 -xz -C oclint
# export PATH=${DEPS_DIR}/oclint/bin:${PATH}
# fi
# # Go back to ${TRAVIS_BUILD_DIR}
# - cd ${TRAVIS_BUILD_DIR}
# ############################################################################
# # Install stuff with homebrew under OSX
# ############################################################################
# - |
# if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
# brew update
# # brew install ccache
# # brew install valgrind
# # cmake
# if brew list -1 | grep -q "^cmake\$"; then
# brew outdated cmake || brew upgrade cmake
# else
# brew install cmake
# fi
# fi
# - export CXX="${COMPILER}"
# # - export CXX="ccache ${COMPILER}"
# # - ccache -s
# before_script:
# - ${CXX} --version
# script:
# # coverage
# - |
# if [[ "${CODE_COVERAGE}" = "true" ]]; then
# cmake ${CMAKE_OPTIONS_GLOBAL} ${CMAKE_OPTIONS} -DCMAKE_CXX_COMPILER=${CXX} -DCMAKE_CXX_FLAGS="-fprofile-arcs -ftest-coverage -std=c++0x" -DCMAKE_BUILD_TYPE=Debug . || exit 1
# make -k -j2 || exit 1
# ctest -j2 --output-on-failure || exit 1
# lcov -d . -c -o coverage.info # parse coverage data
# lcov -r coverage.info "/usr*" -o coverage.info # remove data for system headers
# lcov -r coverage.info "$(readlink -f examples)/*" -o coverage.info # remove data for .cpp files
# lcov -r coverage.info "$(readlink -f scripts)/*" -o coverage.info # remove data for .cpp files
# lcov -l coverage.info # just list a short summary of the results
# coveralls-lcov --repo-token=${COVERALLS_REPO_TOKEN} coverage.info # upload results
# # do not continue with other build configurations after that
# exit
# fi
# # static code analysis
# - |
# if [[ "${STATIC_CODE_ANALYSIS}" = "true" ]]; then
# # setup a test file "doctest.cpp" that is the header + a test case at the end
# echo "#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN\n" >> doctest.cpp
# cat doctest/doctest.h >> doctest.cpp
# echo -e "TEST_CASE(\"\") {\n\tint a = 6;\n\tSUBCASE(\"\") a = 5;\n\tCAPTURE(a);\n\tCHECK(a == 6);\n}\n" >> doctest.cpp
# # cppcheck
# cppcheck doctest.cpp --enable=all --suppress=unmatchedSuppression --suppress=missingIncludeSystem --suppress=unusedFunction --suppress=functionConst --inline-suppr --platform=unix64 --inconclusive --std=posix --inconclusive -v --error-exitcode=1 --template "{file}({line}): {severity} ({id}): {message}"
# # oclint
# oclint doctest.cpp -disable-rule=ShortVariableName -disable-rule=LongLine -disable-rule=LongMethod -disable-rule=HighNcssMethod -disable-rule=LongVariableName -disable-rule=HighCyclomaticComplexity -disable-rule=HighNPathComplexity -disable-rule=UnusedLocalVariable -disable-rule=DoubleNegative -disable-rule=MultipleUnaryOperator -disable-rule=DeepNestedBlock || exit 1
# # clang-tidy
# cd scripts/playground
# cmake ${CMAKE_OPTIONS_GLOBAL} ${CMAKE_OPTIONS} -DCMAKE_CXX_COMPILER=${CXX} . || exit 1
# clang-tidy-4.0 -std=c++11 -p=. *.cpp -header-filter=.* -warnings-as-errors=* -checks='*,-misc-misplaced-widening-cast,-misc-macro-parentheses,-misc-definitions-in-headers,-misc-unused-parameters,-llvm-header-guard,-llvm-include-order,-google-readability-braces-around-statements,-google-runtime-references,-google-readability-todo,-google-build-using-namespace,-google-explicit-constructor,-cert-err58-cpp,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-special-member-functions,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-pro-type-member-init,-cppcoreguidelines-pro-type-union-access,-clang-analyzer-security.insecureAPI.strcpy,-modernize-loop-convert,-modernize-use-auto,-modernize-use-bool-literals,-readability-braces-around-statements,-readability-named-parameter,-readability-else-after-return,-readability-redundant-declaration,-readability-implicit-bool-cast,-clang-diagnostic-variadic-macros,-clang-diagnostic-c++11-compat' || exit 1
# # do not continue with other build configurations after that
# exit
# fi
# # initial run with options
# - cmake ${CMAKE_OPTIONS_GLOBAL} ${CMAKE_OPTIONS} -DCMAKE_CXX_COMPILER=${CXX} .
# # set the common CXX flags
# - export CXX_FLAGS="${CXX_FLAGS} -std=c++0x"
# # debug
# - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="${CXX_FLAGS}" .
# - make clean && make -k -j2
# - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then cmake -DDOCTEST_TEST_MODE=VALGRIND . && ctest -j2 --output-on-failure ; fi
# - cmake -DDOCTEST_TEST_MODE=COMPARE . && ctest -j2 --output-on-failure
# # release
# - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="${CXX_FLAGS}" .
# - make clean && make -k -j2
# - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then cmake -DDOCTEST_TEST_MODE=VALGRIND . && ctest -j2 --output-on-failure ; fi
# - cmake -DDOCTEST_TEST_MODE=COMPARE . && ctest -j2 --output-on-failure
# # sanitizers - again Debug/Release configs through address/undefined/thread sanitizers
# # on separate commands because when something fails I want to see which one exactly
# - cmake -DDOCTEST_TEST_MODE=NORMAL .
# - export ASAN_OPTIONS=verbosity=2:strict_string_checks=true:detect_odr_violation=2:detect_stack_use_after_return=true:check_initialization_order=true:strict_init_order=true
# - if [[ "${HAS_ASAN}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="${CXX_FLAGS} ${SANITIZER_CXX_FLAGS} -g -fno-omit-frame-pointer -fsanitize=address" . && make clean && make -k -j2 && ctest -j2 --output-on-failure ; fi
# - if [[ "${HAS_ASAN}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="${CXX_FLAGS} ${SANITIZER_CXX_FLAGS} -g -fno-omit-frame-pointer -fsanitize=address" . && make clean && make -k -j2 && ctest -j2 --output-on-failure ; fi
# - export UBSAN_OPTIONS=verbosity=2
# - if [[ "${HAS_UBSAN}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="${CXX_FLAGS} ${SANITIZER_CXX_FLAGS} -g -fno-omit-frame-pointer -fsanitize=undefined" . && make clean && make -k -j2 && ctest -j2 --output-on-failure ; fi
# - if [[ "${HAS_UBSAN}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="${CXX_FLAGS} ${SANITIZER_CXX_FLAGS} -g -fno-omit-frame-pointer -fsanitize=undefined" . && make clean && make -k -j2 && ctest -j2 --output-on-failure ; fi
# - export TSAN_OPTIONS=verbosity=2:force_seq_cst_atomics=1
# - if [[ "${HAS_TSAN}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="${CXX_FLAGS} ${SANITIZER_CXX_FLAGS} -g -fno-omit-frame-pointer -fsanitize=thread -pie -fPIE ${TSAN_CXX_FLAGS}" . && make clean && make -k -j2 && ctest -j2 --output-on-failure ; fi
# - if [[ "${HAS_TSAN}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="${CXX_FLAGS} ${SANITIZER_CXX_FLAGS} -g -fno-omit-frame-pointer -fsanitize=thread -pie -fPIE ${TSAN_CXX_FLAGS}" . && make clean && make -k -j2 && ctest -j2 --output-on-failure ; fi
# # test without rtti - just Debug
# - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="${CXX_FLAGS} -fno-rtti" .
# - make clean && make -k -j2
# - cmake -DDOCTEST_TEST_MODE=COMPARE . && ctest -j2 --output-on-failure
# # test only compilation without exceptions - just Debug
# - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="${CXX_FLAGS} -fno-exceptions -DDOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS" .
# - make clean && make -k -j2
# # - ccache -s
# #after_script:
# # - cat compile_commands.json

743
lib/doctest/CHANGELOG.md Normal file
View File

@ -0,0 +1,743 @@
# Change Log
## [2.4.7](https://github.com/doctest/doctest/tree/2.4.7) (2021-12-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.6...2.4.7)
**Implemented enhancements:**
- Add a default Bazel BUILD file [\#433](https://github.com/doctest/doctest/issues/433)
**Fixed bugs:**
- Stack-buffer-overflow probably because char array is viewed as NULL terminated string [\#476](https://github.com/doctest/doctest/issues/476)
**Closed issues:**
- "C4834: discarding return value" with REQUIRE\_THROWS [\#549](https://github.com/doctest/doctest/issues/549)
- Xcode 11.3 is gone from macOS-latest \(=macOS-11\) [\#547](https://github.com/doctest/doctest/issues/547)
- is it possible to define dependency for CHECKs [\#545](https://github.com/doctest/doctest/issues/545)
- Output summary explanation [\#541](https://github.com/doctest/doctest/issues/541)
- compiler errors in doctest.h using cmake in CLion [\#540](https://github.com/doctest/doctest/issues/540)
- Fails to build in VS2013 because of constexpr [\#539](https://github.com/doctest/doctest/issues/539)
- -Wreserved-identifier warnings with Clang 13.0.0 [\#536](https://github.com/doctest/doctest/issues/536)
- Build fails with latest MSVC 2019 \(v16.11\) due to /WX [\#535](https://github.com/doctest/doctest/issues/535)
- VS 16.11 warning about unreferenced function with internal linkage [\#533](https://github.com/doctest/doctest/issues/533)
- Faq googletest mocking dead link [\#532](https://github.com/doctest/doctest/issues/532)
- FR: Documentation: FAQ: Add sectoin 'multiple files' [\#526](https://github.com/doctest/doctest/issues/526)
- CMAKE: doctest\_discover\_tests\(\) error when ADD\_LABELS is not specified [\#524](https://github.com/doctest/doctest/issues/524)
- Register tests based on test data available [\#521](https://github.com/doctest/doctest/issues/521)
- naming override in different testcase files [\#517](https://github.com/doctest/doctest/issues/517)
- Segmentation fault during the compilation without the copy elision optimization [\#515](https://github.com/doctest/doctest/issues/515)
- Compiler warnings on Xcode 12.5 [\#514](https://github.com/doctest/doctest/issues/514)
- Using filter `-sc` does not work properly? [\#513](https://github.com/doctest/doctest/issues/513)
- \[question\] Example of tests in production code & DLLs & shared libraries? [\#511](https://github.com/doctest/doctest/issues/511)
- Dumping fixture state to disk on error [\#509](https://github.com/doctest/doctest/issues/509)
- Macros construct reserved identifiers [\#507](https://github.com/doctest/doctest/issues/507)
- Running doctest on embedded ARM Cortex µCs [\#506](https://github.com/doctest/doctest/issues/506)
- Asserts Outside of Tests Example Does Not Link [\#504](https://github.com/doctest/doctest/issues/504)
- \[FEATURE REQUEST\] Quiet flag [\#503](https://github.com/doctest/doctest/issues/503)
- Compile error on Intel C++ Classic Compilers [\#502](https://github.com/doctest/doctest/issues/502)
- compiling doctest in 32-bit with \_\_stdcall calling convention fails [\#500](https://github.com/doctest/doctest/issues/500)
- Duplicate 'const' compilation error from TEST\_CASE\_CLASS macro [\#498](https://github.com/doctest/doctest/issues/498)
- Packed fields can't be accessed in 2.4.6 [\#495](https://github.com/doctest/doctest/issues/495)
- Dangling pointers with .str\(\).c\_str\(\) [\#494](https://github.com/doctest/doctest/issues/494)
- Automatic adding of TEST\_SUITE labels to discovered tests fails if ADD\_LABELS not set [\#489](https://github.com/doctest/doctest/issues/489)
- Adding a bunch of REQUIRE/CHECK utilities [\#487](https://github.com/doctest/doctest/issues/487)
- Warning C4114 in MSVC [\#485](https://github.com/doctest/doctest/issues/485)
- Own repository [\#410](https://github.com/doctest/doctest/issues/410)
- Linking problem with Clang 10 on Windows [\#362](https://github.com/doctest/doctest/issues/362)
- Add option not to print the intro text [\#342](https://github.com/doctest/doctest/issues/342)
- \[Feature\] Better integration with tools \(VS Code Test Adapter Extension\) [\#320](https://github.com/doctest/doctest/issues/320)
- vscode test explorer [\#303](https://github.com/doctest/doctest/issues/303)
- Want an option not to print any intro [\#245](https://github.com/doctest/doctest/issues/245)
- Add way to disable printing of intro [\#181](https://github.com/doctest/doctest/issues/181)
**Merged pull requests:**
- Make String::operator+ non-member [\#564](https://github.com/doctest/doctest/pull/564) ([Saalvage](https://github.com/Saalvage))
- Add -minimal flag [\#562](https://github.com/doctest/doctest/pull/562) ([Saalvage](https://github.com/Saalvage))
- Quiet flag [\#561](https://github.com/doctest/doctest/pull/561) ([Saalvage](https://github.com/Saalvage))
- Fix redefinition error while using double time DOCTEST\_ANONYMOUS\(DOCTEST\_CAPTURE\_\) [\#557](https://github.com/doctest/doctest/pull/557) ([isaevil](https://github.com/isaevil))
- Fix error: missing initializer for member doctest::detail::TestSuite [\#556](https://github.com/doctest/doctest/pull/556) ([isaevil](https://github.com/isaevil))
- Xcode 11.3 with macos 10.15 [\#548](https://github.com/doctest/doctest/pull/548) ([jsoref](https://github.com/jsoref))
- Spelling [\#546](https://github.com/doctest/doctest/pull/546) ([jsoref](https://github.com/jsoref))
- Fix build with -Wunused-but-set-variable [\#543](https://github.com/doctest/doctest/pull/543) ([jktjkt](https://github.com/jktjkt))
- build\(meson\): use `override\_dependency` if supported [\#538](https://github.com/doctest/doctest/pull/538) ([Tachi107](https://github.com/Tachi107))
- Fix google death test URL [\#528](https://github.com/doctest/doctest/pull/528) ([emrecil](https://github.com/emrecil))
- Fixing issue with doctestAddTests.cmake [\#527](https://github.com/doctest/doctest/pull/527) ([jharmer95](https://github.com/jharmer95))
- Replace gendered pronouns [\#525](https://github.com/doctest/doctest/pull/525) ([mletterle](https://github.com/mletterle))
- Fixed intel compiler parser bug. Should fix \#502 [\#523](https://github.com/doctest/doctest/pull/523) ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- specifying working directory for execute\_process in doctest\_discover\_tests [\#518](https://github.com/doctest/doctest/pull/518) ([philbucher](https://github.com/philbucher))
- Fix the logic that depends on optional copy elision optimization [\#516](https://github.com/doctest/doctest/pull/516) ([ivankochin](https://github.com/ivankochin))
- Fix reserved identifiers [\#510](https://github.com/doctest/doctest/pull/510) ([ts826848](https://github.com/ts826848))
- Fix build with GCC 11 [\#505](https://github.com/doctest/doctest/pull/505) ([jktjkt](https://github.com/jktjkt))
- minor fixes in MPI docs [\#499](https://github.com/doctest/doctest/pull/499) ([philbucher](https://github.com/philbucher))
- Add a minimal bazel config [\#497](https://github.com/doctest/doctest/pull/497) ([elliottt](https://github.com/elliottt))
- Handle escaped commas in parsed arguments [\#493](https://github.com/doctest/doctest/pull/493) ([friendlyanon](https://github.com/friendlyanon))
- Fixes Issue 476 . When running executables with "-s" stringifyBinaryE… [\#491](https://github.com/doctest/doctest/pull/491) ([navinp0304](https://github.com/navinp0304))
- Set variable to 0 if not set [\#490](https://github.com/doctest/doctest/pull/490) ([shivupa](https://github.com/shivupa))
## [2.4.6](https://github.com/doctest/doctest/tree/2.4.6) (2021-03-22)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.5...2.4.6)
**Fixed bugs:**
- REQUIRE does not compile when operator== in different namespace [\#443](https://github.com/doctest/doctest/issues/443)
- Using templated operator== inside TEST\_CASE changes deduced types of forwarding references [\#399](https://github.com/doctest/doctest/issues/399)
**Closed issues:**
- CMake doesn't link package [\#483](https://github.com/doctest/doctest/issues/483)
- Assertions are slow when running on Windows with a debugger attached [\#481](https://github.com/doctest/doctest/issues/481)
- Get list of registered test-case names [\#479](https://github.com/doctest/doctest/issues/479)
- Can't compile with glibc master \(future 2.34\): SIGSTKSZ is no longer a constant [\#473](https://github.com/doctest/doctest/issues/473)
- How to use Doctest with Github Actions [\#472](https://github.com/doctest/doctest/issues/472)
- Link error \(multiple definition...\) in simple project [\#470](https://github.com/doctest/doctest/issues/470)
- INFO does not compile when used like a function call [\#469](https://github.com/doctest/doctest/issues/469)
- std::uncaught\_exceptions is only available if compiling for macOS 10.12 or above [\#466](https://github.com/doctest/doctest/issues/466)
- Compile failure with WinRT on 2.4.5 [\#465](https://github.com/doctest/doctest/issues/465)
**Merged pull requests:**
- Improve speed with attached debugger \(Windows\) [\#482](https://github.com/doctest/doctest/pull/482) ([pgroke](https://github.com/pgroke))
- Convert to bool by casting, rather than double negation [\#480](https://github.com/doctest/doctest/pull/480) ([kitegi](https://github.com/kitegi))
- Fix compile error when targeting macOS version earlier and macOS 10.12 [\#478](https://github.com/doctest/doctest/pull/478) ([SamWindell](https://github.com/SamWindell))
- Fix MSVC linter warning about uninitialized TestSuite variables [\#471](https://github.com/doctest/doctest/pull/471) ([Reedbeta](https://github.com/Reedbeta))
- REQUIRE does not compile when operator== in different namespace \#443 . [\#468](https://github.com/doctest/doctest/pull/468) ([navinp0304](https://github.com/navinp0304))
- Automatically add TEST\_SUITE labels to discovered tests [\#464](https://github.com/doctest/doctest/pull/464) ([shivupa](https://github.com/shivupa))
## [2.4.5](https://github.com/doctest/doctest/tree/2.4.5) (2021-02-02)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.4...2.4.5)
**Closed issues:**
- Stack buffer overflow in `String` constructor [\#460](https://github.com/doctest/doctest/issues/460)
- Suppress warnings from clang-tidy [\#459](https://github.com/doctest/doctest/issues/459)
- compilation issue in MSVC when defining DOCTEST\_THREAD\_LOCAL to static [\#458](https://github.com/doctest/doctest/issues/458)
- nvcc compiler warning; doctest.h\(4138\): warning : expression has no effect [\#454](https://github.com/doctest/doctest/issues/454)
- Use of std::atomic can slow down multithreaded tests [\#452](https://github.com/doctest/doctest/issues/452)
**Merged pull requests:**
- Fix compilation on case-sensitive filesystems [\#463](https://github.com/doctest/doctest/pull/463) ([jhasse](https://github.com/jhasse))
- Use function-like macros for prefixless macro names [\#462](https://github.com/doctest/doctest/pull/462) ([tbleher](https://github.com/tbleher))
- Implement a multi lane atomic for assertion counts [\#453](https://github.com/doctest/doctest/pull/453) ([martinus](https://github.com/martinus))
## [2.4.4](https://github.com/doctest/doctest/tree/2.4.4) (2020-12-25)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.3...2.4.4)
**Closed issues:**
- 2.4.2: build fails [\#450](https://github.com/doctest/doctest/issues/450)
- combine the same tests for different build configurations from multiple shared objects without having symbol clashes [\#436](https://github.com/doctest/doctest/issues/436)
- Issue with GitHub Security Scanning: gmtime [\#423](https://github.com/doctest/doctest/issues/423)
## [2.4.3](https://github.com/doctest/doctest/tree/2.4.3) (2020-12-16)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.2...2.4.3)
## [2.4.2](https://github.com/doctest/doctest/tree/2.4.2) (2020-12-15)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.1...2.4.2)
**Closed issues:**
- DOCTEST\_CHECK\_THROWS\_WITH\_AS fails to work with dependant exception type [\#447](https://github.com/doctest/doctest/issues/447)
- MSVC warnings: narrowing conversion, signed/unsigned mismatch [\#446](https://github.com/doctest/doctest/issues/446)
- log contexts for failures in JUnit reporter [\#441](https://github.com/doctest/doctest/issues/441)
- MinGW "'mutex' in namespace 'std' does not name a type" error. [\#438](https://github.com/doctest/doctest/issues/438)
- Test runner thread initialization [\#435](https://github.com/doctest/doctest/issues/435)
- PLATFORM is misdetected on MacOSX Big Sur [\#415](https://github.com/doctest/doctest/issues/415)
- CHECK\_EQ with enum values [\#276](https://github.com/doctest/doctest/issues/276)
**Merged pull requests:**
- Squash MSVC warnings when including ntstatus.h [\#449](https://github.com/doctest/doctest/pull/449) ([nickhutchinson](https://github.com/nickhutchinson))
- Add MAIN\_PROJECT check for test option [\#445](https://github.com/doctest/doctest/pull/445) ([globberwops](https://github.com/globberwops))
- Suppress clang-analyzer-cplusplus.NewDeleteLeaks [\#444](https://github.com/doctest/doctest/pull/444) ([ncihnegn](https://github.com/ncihnegn))
- log contexts for failures in JUnit reporter [\#442](https://github.com/doctest/doctest/pull/442) ([runave](https://github.com/runave))
- Fix 32bit support on macOS [\#440](https://github.com/doctest/doctest/pull/440) ([AlexanderLanin](https://github.com/AlexanderLanin))
## [2.4.1](https://github.com/doctest/doctest/tree/2.4.1) (2020-11-04)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.0...2.4.1)
**Closed issues:**
- Avoid old C-style casts [\#424](https://github.com/doctest/doctest/issues/424)
- Segfault in unwind [\#422](https://github.com/doctest/doctest/issues/422)
- Inspect exception with gdb [\#421](https://github.com/doctest/doctest/issues/421)
- use-of-uninitialized-value [\#414](https://github.com/doctest/doctest/issues/414)
- Support unit tests with MPI [\#413](https://github.com/doctest/doctest/issues/413)
- Break into debugger support is missing for Linux [\#411](https://github.com/doctest/doctest/issues/411)
- What if built doctest as static library instead of header-only [\#408](https://github.com/doctest/doctest/issues/408)
- \[Question\] How to get test case name [\#407](https://github.com/doctest/doctest/issues/407)
- create extensions header for optional features requiring more std includes or newer C++ features [\#405](https://github.com/doctest/doctest/issues/405)
- tests/asserts summary lines are misaligned when counts exceed 999999 [\#402](https://github.com/doctest/doctest/issues/402)
- Call to 'ne' is ambiguous -- with solution [\#395](https://github.com/doctest/doctest/issues/395)
- Intermittent Segfaults [\#391](https://github.com/doctest/doctest/issues/391)
- Junit classname [\#390](https://github.com/doctest/doctest/issues/390)
- Add default printers for enums [\#121](https://github.com/doctest/doctest/issues/121)
**Merged pull requests:**
- Enum support \(fix for Issue \#121\) [\#429](https://github.com/doctest/doctest/pull/429) ([jkriegshauser](https://github.com/jkriegshauser))
- Support Clang 3.4 [\#428](https://github.com/doctest/doctest/pull/428) ([AlexanderLanin](https://github.com/AlexanderLanin))
- Silence remarks on old C-style casts [\#425](https://github.com/doctest/doctest/pull/425) ([UnePierre](https://github.com/UnePierre))
- Initial MPI unit tests implementation [\#418](https://github.com/doctest/doctest/pull/418) ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Add JUNIT\_OUTPUT\_DIR option to doctest\_discover\_tests [\#417](https://github.com/doctest/doctest/pull/417) ([Tradias](https://github.com/Tradias))
- Add option to build with std headers. [\#416](https://github.com/doctest/doctest/pull/416) ([avostrik](https://github.com/avostrik))
- Port Catch2 break into debugger for Linux. closes \#411 [\#412](https://github.com/doctest/doctest/pull/412) ([mikezackles](https://github.com/mikezackles))
- summary: align even large values \#402 [\#403](https://github.com/doctest/doctest/pull/403) ([dankamongmen](https://github.com/dankamongmen))
- Add breakpoint inline assembly for the Apple Silicon macOS. [\#400](https://github.com/doctest/doctest/pull/400) ([bruvzg](https://github.com/bruvzg))
- fix google's death test URI in roadmap [\#393](https://github.com/doctest/doctest/pull/393) ([ashutosh108](https://github.com/ashutosh108))
## [2.4.0](https://github.com/doctest/doctest/tree/2.4.0) (2020-06-27)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.8...2.4.0)
**Closed issues:**
- Count points based on the number of passed/failed cases? [\#386](https://github.com/doctest/doctest/issues/386)
- How to understand "\#data\_array" in std::string? [\#383](https://github.com/doctest/doctest/issues/383)
- crash: doctest with custom allocator [\#382](https://github.com/doctest/doctest/issues/382)
- Feature Request: format PRIVATE/PUBLIC/INTERFACE entries with constant indentation [\#378](https://github.com/doctest/doctest/issues/378)
- JUnit Reporter for Doctest [\#376](https://github.com/doctest/doctest/issues/376)
- Avoiding Feature Bloat [\#374](https://github.com/doctest/doctest/issues/374)
- StringMaker\<wchar\_t\> fail to compile with C++20 enabled \(GCC\) [\#357](https://github.com/doctest/doctest/issues/357)
- doctest\_discover\_tests and FetchContent\_Declare [\#351](https://github.com/doctest/doctest/issues/351)
- Junit reporter [\#318](https://github.com/doctest/doctest/issues/318)
**Merged pull requests:**
- Add a note that doctest can be installed through Homebrew [\#388](https://github.com/doctest/doctest/pull/388) ([cameronwhite](https://github.com/cameronwhite))
- provide alternative implementation of has\_insertion\_operator for C++20 [\#387](https://github.com/doctest/doctest/pull/387) ([lukaszgemborowski](https://github.com/lukaszgemborowski))
- Fix issue template to mention doctest [\#380](https://github.com/doctest/doctest/pull/380) ([nyanpasu64](https://github.com/nyanpasu64))
## [2.3.8](https://github.com/doctest/doctest/tree/2.3.8) (2020-05-17)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.7...2.3.8)
**Closed issues:**
- Scenario name can not be passed to -tc to execute single scenario [\#373](https://github.com/doctest/doctest/issues/373)
- Compile Error with CHECK\_NOTHROW when using 2 Template Arguments [\#372](https://github.com/doctest/doctest/issues/372)
- dll example won't compile [\#371](https://github.com/doctest/doctest/issues/371)
- Build error with MinGW \(Mingw-w64\) due to missing Windows.h \(with capital W\) [\#370](https://github.com/doctest/doctest/issues/370)
- How to override file\_line\_to\_stream? [\#369](https://github.com/doctest/doctest/issues/369)
- Memory sanitizer fails. [\#365](https://github.com/doctest/doctest/issues/365)
- Warning c6319 in Visual Studio [\#359](https://github.com/doctest/doctest/issues/359)
- Any option to show each test case's execute time? [\#358](https://github.com/doctest/doctest/issues/358)
- doctest in embedded [\#355](https://github.com/doctest/doctest/issues/355)
- Reloading a plugin with test cases leads to a segmentation fault [\#350](https://github.com/doctest/doctest/issues/350)
- Compiling with DOCTEST\_CONFIG\_COLORS\_ANSI fails on Windows [\#348](https://github.com/doctest/doctest/issues/348)
- Can I inherit ConsoleReporter? [\#344](https://github.com/doctest/doctest/issues/344)
- Noreturn and noexcept defines for Visual Studio 2013 support [\#327](https://github.com/doctest/doctest/issues/327)
- Data-driven testing -- print out the deepest DOCTEST\_SUBCASE [\#215](https://github.com/doctest/doctest/issues/215)
- Print the SUBCASE path when an assert fails in the TEST\_CASE body [\#125](https://github.com/doctest/doctest/issues/125)
**Merged pull requests:**
- fix: possible UB with nullptr increment [\#368](https://github.com/doctest/doctest/pull/368) ([oktonion](https://github.com/oktonion))
- Use CMake's CMP0077 policy if available [\#363](https://github.com/doctest/doctest/pull/363) ([thelink2012](https://github.com/thelink2012))
- Fix warning c6319 in Visual Studio 16.5 [\#361](https://github.com/doctest/doctest/pull/361) ([Cvelth](https://github.com/Cvelth))
## [2.3.7](https://github.com/doctest/doctest/tree/2.3.7) (2020-02-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.6...2.3.7)
**Closed issues:**
- Some of the GitHub CI builds are failing [\#334](https://github.com/doctest/doctest/issues/334)
- C++20 removed std::uncaught\_exception [\#333](https://github.com/doctest/doctest/issues/333)
- Doctest SEH handlers are called before \_\_except handlers [\#324](https://github.com/doctest/doctest/issues/324)
**Merged pull requests:**
- using std namespace where necessary and timer ticks fix [\#341](https://github.com/doctest/doctest/pull/341) ([oktonion](https://github.com/oktonion))
- fix std::uncaught\_exceptions [\#340](https://github.com/doctest/doctest/pull/340) ([cyyever](https://github.com/cyyever))
- Fix GitHub CI and add GitHub build badges [\#336](https://github.com/doctest/doctest/pull/336) ([claremacrae](https://github.com/claremacrae))
- http -\> https [\#331](https://github.com/doctest/doctest/pull/331) ([Coeur](https://github.com/Coeur))
- Switch to catching unhandled exceptions on Windows Closes \#324 [\#325](https://github.com/doctest/doctest/pull/325) ([jkriegshauser](https://github.com/jkriegshauser))
## [2.3.6](https://github.com/doctest/doctest/tree/2.3.6) (2019-12-16)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.5...2.3.6)
**Closed issues:**
- Link problem w/ BUILD=Release if MESSAGE\(\) with std::string/ostream-operator is used [\#316](https://github.com/doctest/doctest/issues/316)
- the FAQ about difference to Catch2 is missing tags [\#315](https://github.com/doctest/doctest/issues/315)
- include Windows.h in small caps to silence clang warnings [\#312](https://github.com/doctest/doctest/issues/312)
- Mistake in generator with lgtm error [\#311](https://github.com/doctest/doctest/issues/311)
- CMake: cannot install target doctest\_with\_main [\#310](https://github.com/doctest/doctest/issues/310)
- \[bug\] INFO\(\) and CAPTURE\(\) cannot compile using MSVC when used with DOCTEST\_CONFIG\_IMPLEMENTATION\_IN\_DLL [\#306](https://github.com/doctest/doctest/issues/306)
- Skip subcase [\#304](https://github.com/doctest/doctest/issues/304)
- Does some equivalent features from google test exist here? [\#300](https://github.com/doctest/doctest/issues/300)
- How to use doctest in dll only\(without main.cpp and .exe\) [\#299](https://github.com/doctest/doctest/issues/299)
- Warning: C26812: The enum type 'doctest::assertType::Enum' is unscoped. Prefer 'enum class' over 'enum' \(Enum.3\). [\#298](https://github.com/doctest/doctest/issues/298)
- test executable\_dll\_and\_plugin fails on Linux, GCC 8.1.0, -fsanitize=address [\#201](https://github.com/doctest/doctest/issues/201)
**Merged pull requests:**
- Fixed missing ostream include for MacOS when defining DOCTEST\_CONFIG\_… [\#314](https://github.com/doctest/doctest/pull/314) ([NKTomHaygarth](https://github.com/NKTomHaygarth))
- include windows.h in cmall caps to silence clang nonportable warnings [\#313](https://github.com/doctest/doctest/pull/313) ([suoniq](https://github.com/suoniq))
- Add .editorconfig file. [\#301](https://github.com/doctest/doctest/pull/301) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add Github Actions CI [\#285](https://github.com/doctest/doctest/pull/285) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
## [2.3.5](https://github.com/doctest/doctest/tree/2.3.5) (2019-09-22)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.4...2.3.5)
**Closed issues:**
- \[feature request\] Assertion macros for throwing exception of a specific type with message - \<LEVEL\>\_THROWS\_WITH\_AS\(expr, string, ex\_type\) [\#295](https://github.com/doctest/doctest/issues/295)
- CHECK\_THROWS\_AS of non-default constructor wants to call default constructor [\#293](https://github.com/doctest/doctest/issues/293)
- Typos and spelling errors in source, documentation and scripts [\#291](https://github.com/doctest/doctest/issues/291)
- Customize test names / variable substitution [\#284](https://github.com/doctest/doctest/issues/284)
- SUBCASE in function not behaving as expected [\#282](https://github.com/doctest/doctest/issues/282)
- SUPER\_FAST\_ASSERTS fails to compile CHECK\_MESSAGE [\#281](https://github.com/doctest/doctest/issues/281)
- CHECK\_MESSAGE no longer works with DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS [\#280](https://github.com/doctest/doctest/issues/280)
- CAPTURE of structured binding element no longer works [\#279](https://github.com/doctest/doctest/issues/279)
- Reporter: `test\_case\_end` no longer fired after test case restart [\#278](https://github.com/doctest/doctest/issues/278)
- Add debug break override support [\#277](https://github.com/doctest/doctest/issues/277)
- Running tests from within Visual Studio in a static lib project [\#275](https://github.com/doctest/doctest/issues/275)
- Compile-time error when using a raw string literal inside of REQUIRE \(MSVC 2017\) [\#274](https://github.com/doctest/doctest/issues/274)
- Give example for having tests in production code [\#252](https://github.com/doctest/doctest/issues/252)
- Memory leaks just by including doctest.h [\#205](https://github.com/doctest/doctest/issues/205)
- Feature request: print subcase when an exception is thrown inside one [\#136](https://github.com/doctest/doctest/issues/136)
**Merged pull requests:**
- Fix typos and misspellings found by codespell. [\#292](https://github.com/doctest/doctest/pull/292) ([warmsocks](https://github.com/warmsocks))
- Document order by issue correctly [\#290](https://github.com/doctest/doctest/pull/290) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Document that -order-by=file is compiler-dependent [\#289](https://github.com/doctest/doctest/pull/289) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add -order-by=name to filter\_2 test [\#288](https://github.com/doctest/doctest/pull/288) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add support for compiling with clang-cl [\#286](https://github.com/doctest/doctest/pull/286) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- No minimum version limitation of Meson [\#283](https://github.com/doctest/doctest/pull/283) ([ydm](https://github.com/ydm))
## [2.3.4](https://github.com/doctest/doctest/tree/2.3.4) (2019-08-12)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.3...2.3.4)
**Closed issues:**
- Remove INFO\(\) limitation for using only lvalues and no rvalues [\#269](https://github.com/doctest/doctest/issues/269)
- Compile error on MAC OS with AppleClang 8.0.0.8000042 [\#266](https://github.com/doctest/doctest/issues/266)
- Throwing exception in a mocked method [\#265](https://github.com/doctest/doctest/issues/265)
- Illegal syntax for decorators compiles and runs without warning, but has no effect [\#264](https://github.com/doctest/doctest/issues/264)
- Support conditional expressions in REQUIRE [\#262](https://github.com/doctest/doctest/issues/262)
- Register a listener\(reporter\) that always listens [\#257](https://github.com/doctest/doctest/issues/257)
- Memory sanitizer complaint [\#255](https://github.com/doctest/doctest/issues/255)
- Windows Clang GNU command line warnings [\#253](https://github.com/doctest/doctest/issues/253)
- The build writes into the source directory [\#249](https://github.com/doctest/doctest/issues/249)
- How to enable tests inside another exe [\#246](https://github.com/doctest/doctest/issues/246)
- Testing multiple headers. [\#244](https://github.com/doctest/doctest/issues/244)
- CMakeLists.txt: Needs CMAKE\_CXX\_STANDARD=11 [\#243](https://github.com/doctest/doctest/issues/243)
- \[bug\] Can't compile the tests because of mutex, that is declared in the doctest [\#242](https://github.com/doctest/doctest/issues/242)
**Merged pull requests:**
- Improve Listener docs [\#273](https://github.com/doctest/doctest/pull/273) ([claremacrae](https://github.com/claremacrae))
- Rework `INFO` lazy evaluation to use lambdas. [\#270](https://github.com/doctest/doctest/pull/270) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Prevent compile errors with AppleClang compiler [\#268](https://github.com/doctest/doctest/pull/268) ([ClausKlein](https://github.com/ClausKlein))
- Revert "fix : including windows.h header cause error" [\#263](https://github.com/doctest/doctest/pull/263) ([onqtam](https://github.com/onqtam))
- Fix static analyzer URLs [\#259](https://github.com/doctest/doctest/pull/259) ([godbyk](https://github.com/godbyk))
- fix : including windows.h header cause error [\#258](https://github.com/doctest/doctest/pull/258) ([rinechran](https://github.com/rinechran))
- only look for C++ compiler with CMake [\#256](https://github.com/doctest/doctest/pull/256) ([zhihaoy](https://github.com/zhihaoy))
- Fix \#253 [\#254](https://github.com/doctest/doctest/pull/254) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- add alias target for doctest for use in build tree [\#247](https://github.com/doctest/doctest/pull/247) ([trondhe](https://github.com/trondhe))
## [2.3.3](https://github.com/doctest/doctest/tree/2.3.3) (2019-06-02)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.2...2.3.3)
**Closed issues:**
- Build fails with gcc9 because of -Wstrict-overflow=5 which is too high [\#241](https://github.com/doctest/doctest/issues/241)
- doctest given defined with short macro name [\#239](https://github.com/doctest/doctest/issues/239)
- Splitting templated test across different translation units [\#238](https://github.com/doctest/doctest/issues/238)
- Compile errors with iosfwd.h and Visual Studio 2019 Preview [\#183](https://github.com/doctest/doctest/issues/183)
- Add CMake test support as catch\_discover\_tests\(\) in Catch2 [\#171](https://github.com/doctest/doctest/issues/171)
**Merged pull requests:**
- fix \#239 - use long macro name [\#240](https://github.com/doctest/doctest/pull/240) ([m-bd](https://github.com/m-bd))
- Add doctest\_discover\_tests\(\) [\#236](https://github.com/doctest/doctest/pull/236) ([reddwarf69](https://github.com/reddwarf69))
- Ignore redundant-decls warning on MinGW [\#235](https://github.com/doctest/doctest/pull/235) ([AMS21](https://github.com/AMS21))
- Fixed meson build file dependency declaration [\#233](https://github.com/doctest/doctest/pull/233) ([jormundgand](https://github.com/jormundgand))
## [2.3.2](https://github.com/doctest/doctest/tree/2.3.2) (2019-05-06)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.1...2.3.2)
**Closed issues:**
- scripts/bench/run\_all.py : module 'urllib' has no attribute 'urlretrieve' [\#230](https://github.com/doctest/doctest/issues/230)
- wrong set of tests registered with TEST\_CASE\_TEMPLATE get executed [\#228](https://github.com/doctest/doctest/issues/228)
- Logging not Working for me [\#227](https://github.com/doctest/doctest/issues/227)
- Link test runner executable into dll? [\#226](https://github.com/doctest/doctest/issues/226)
- Linking issue for executables after including doctest in library [\#224](https://github.com/doctest/doctest/issues/224)
- Strange REQUIRE\_THROWS behaviour [\#223](https://github.com/doctest/doctest/issues/223)
- Windows clang-cl -Wunused-variable warning [\#221](https://github.com/doctest/doctest/issues/221)
- Update doctest 2.3.1 in bincrafters [\#220](https://github.com/doctest/doctest/issues/220)
- make install, on 64 bit, installs cmake files into lib instead of lib64 folder [\#218](https://github.com/doctest/doctest/issues/218)
- TSAN: data race related to hasLoggedCurrentTestStart [\#217](https://github.com/doctest/doctest/issues/217)
- REQUIRE\_THROWS\_AS does not support class constructors [\#216](https://github.com/doctest/doctest/issues/216)
- Build failure on clang 7.0.1 on Fedora 29 [\#214](https://github.com/doctest/doctest/issues/214)
- add example compatible with -\> https://github.com/report-ci/ [\#212](https://github.com/doctest/doctest/issues/212)
- No DOCTEST\_WITH\_TESTS? [\#211](https://github.com/doctest/doctest/issues/211)
**Merged pull requests:**
- Added meson file, to declare a dependency. [\#232](https://github.com/doctest/doctest/pull/232) ([jormundgand](https://github.com/jormundgand))
- Explicitly specify the doctest\_with\_main C++ standard in CMake. [\#231](https://github.com/doctest/doctest/pull/231) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Remove architecture check from CMake package [\#225](https://github.com/doctest/doctest/pull/225) ([mmha](https://github.com/mmha))
- add default install prefix [\#219](https://github.com/doctest/doctest/pull/219) ([a4z](https://github.com/a4z))
- \[regression\] Workaround MSVC preprocessor issue triggered by REQUIRE\_THROWS [\#213](https://github.com/doctest/doctest/pull/213) ([zhihaoy](https://github.com/zhihaoy))
## [2.3.1](https://github.com/doctest/doctest/tree/2.3.1) (2019-03-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.0...2.3.1)
**Merged pull requests:**
- Add two very simple examples of using doctest with CMake [\#209](https://github.com/doctest/doctest/pull/209) ([pr0g](https://github.com/pr0g))
## [2.3.0](https://github.com/doctest/doctest/tree/2.3.0) (2019-03-23)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.3...2.3.0)
**Closed issues:**
- Compilation with emscripten fails by default because of signal handling [\#207](https://github.com/doctest/doctest/issues/207)
- Compilation fails with cl.exe /Zc:wchar\_t- [\#206](https://github.com/doctest/doctest/issues/206)
- Parallel invocation of doctest's own testsuite via CTest fails [\#202](https://github.com/doctest/doctest/issues/202)
- Get the number of passed/failed tests in the code [\#200](https://github.com/doctest/doctest/issues/200)
- Tests alongside code with multiple executables [\#199](https://github.com/doctest/doctest/issues/199)
- Cppcheck 1.86 warnings [\#198](https://github.com/doctest/doctest/issues/198)
- Compiling as Dll maybe is wrong [\#196](https://github.com/doctest/doctest/issues/196)
- Forward-declaring identifiers in std:: is UB - consider including some of the cheaper C/C++ stdlib headers [\#194](https://github.com/doctest/doctest/issues/194)
- QtCreator + clang warning about operator \<\< precedence [\#191](https://github.com/doctest/doctest/issues/191)
- run test fixture from cli [\#190](https://github.com/doctest/doctest/issues/190)
- Installing doctest using cmake and make fails on Ubuntu 16.04 \(C++11 is not used\) [\#189](https://github.com/doctest/doctest/issues/189)
- c++17 requirement for testing private members [\#188](https://github.com/doctest/doctest/issues/188)
- \[feature request\] implement a user-extendable reporter system [\#138](https://github.com/doctest/doctest/issues/138)
- Same test runs multiple times when written in a header and included with different unnormalized paths [\#45](https://github.com/doctest/doctest/issues/45)
**Merged pull requests:**
- Fix unmatched bracket in DOCTEST\_TEST\_CASE\_CLASS [\#204](https://github.com/doctest/doctest/pull/204) ([patstew](https://github.com/patstew))
- Template apply [\#203](https://github.com/doctest/doctest/pull/203) ([zhihaoy](https://github.com/zhihaoy))
- No undefined behavior per C++ standard in detecting endianness. [\#195](https://github.com/doctest/doctest/pull/195) ([dimztimz](https://github.com/dimztimz))
- Fix propagating include directories of target doctest\_with\_main [\#193](https://github.com/doctest/doctest/pull/193) ([dimztimz](https://github.com/dimztimz))
- Move single header to a separate folder [\#187](https://github.com/doctest/doctest/pull/187) ([dimztimz](https://github.com/dimztimz))
- Fix Clang format to handle C++11 [\#186](https://github.com/doctest/doctest/pull/186) ([dimztimz](https://github.com/dimztimz))
- Rename doctest\_impl.h to doctest.cpp for less confusion. [\#185](https://github.com/doctest/doctest/pull/185) ([dimztimz](https://github.com/dimztimz))
## [2.2.3](https://github.com/doctest/doctest/tree/2.2.3) (2019-02-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.2...2.2.3)
**Closed issues:**
- Calling convention needed on a few functions [\#182](https://github.com/doctest/doctest/issues/182)
- Terminal color is not reset when a test fails with some signal [\#122](https://github.com/doctest/doctest/issues/122)
## [2.2.2](https://github.com/doctest/doctest/tree/2.2.2) (2019-01-28)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.1...2.2.2)
**Closed issues:**
- Add way to override getCurrentTicks\(\) implementation [\#178](https://github.com/doctest/doctest/issues/178)
- Wrap \<csignal\> include with ifdef [\#177](https://github.com/doctest/doctest/issues/177)
- How to stop doctest hijack unhandled exceptions? [\#176](https://github.com/doctest/doctest/issues/176)
- Change the include path of the `doctest` CMake interface target so users need to specify the folder as well [\#175](https://github.com/doctest/doctest/issues/175)
- Reduce scope of DebugOutputWindowReporter instance [\#174](https://github.com/doctest/doctest/issues/174)
- Can logging \(INFO\) be used in helper class outside of TEST\_CASE? [\#169](https://github.com/doctest/doctest/issues/169)
**Merged pull requests:**
- Change the include path in examples as \#175 [\#180](https://github.com/doctest/doctest/pull/180) ([ncihnegn](https://github.com/ncihnegn))
- Fix CMake include path \#175 [\#179](https://github.com/doctest/doctest/pull/179) ([ncihnegn](https://github.com/ncihnegn)) <