forked from catchorg/Catch2
Compare commits
39 Commits
macos-13
...
constexpr_
Author | SHA1 | Date | |
---|---|---|---|
|
c974e30974 | ||
|
4e8d92bf02 | ||
|
8ce2426e53 | ||
|
fa5a53df17 | ||
|
a654e4b038 | ||
|
ef713582d2 | ||
|
efb39689d9 | ||
|
42fe78d0ba | ||
|
2bce3e276b | ||
|
df04df94db | ||
|
f2320724a7 | ||
|
8e80b8f22c | ||
|
53ddf37af4 | ||
|
029fe3b460 | ||
|
65794fd2b8 | ||
|
838f8d71cb | ||
|
b5373dadca | ||
|
cd8f97e6c7 | ||
|
05fb437cbb | ||
|
71b11c4e33 | ||
|
0a6a2ce887 | ||
|
355a6e273b | ||
|
bff6e35e2b | ||
|
d99eb8bec8 | ||
|
f181de9df4 | ||
|
9271083a04 | ||
|
07701f946a | ||
|
7ce3579976 | ||
|
c0dfe13bb6 | ||
|
cad65c5003 | ||
|
ad99834c14 | ||
|
3cd90c5c3b | ||
|
202bdee977 | ||
|
bfe3ff8f19 | ||
|
a2a3c55058 | ||
|
eb8f2c5810 | ||
|
88f4ec3cc5 | ||
|
792c3b7549 | ||
|
1a44e6f661 |
@@ -5,3 +5,4 @@ find_package(Catch2 CONFIG REQUIRED)
|
||||
|
||||
add_executable(test_package test_package.cpp)
|
||||
target_link_libraries(test_package Catch2::Catch2WithMain)
|
||||
target_compile_features(test_package PRIVATE cxx_std_14)
|
||||
|
@@ -3,12 +3,14 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.cmake import CMake, cmake_layout
|
||||
from conan.tools.build import can_run
|
||||
from conan.tools.files import save, load
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "compiler", "build_type", "arch"
|
||||
generators = "CMakeToolchain", "CMakeDeps"
|
||||
generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv"
|
||||
test_type = "explicit"
|
||||
|
||||
def requirements(self):
|
||||
self.requires(self.tested_reference_str)
|
||||
@@ -16,6 +18,12 @@ class TestPackageConan(ConanFile):
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def generate(self):
|
||||
save(self, os.path.join(self.build_folder, "package_folder"),
|
||||
self.dependencies[self.tested_reference_str].package_folder)
|
||||
save(self, os.path.join(self.build_folder, "license"),
|
||||
self.dependencies[self.tested_reference_str].license)
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
@@ -26,8 +34,7 @@ class TestPackageConan(ConanFile):
|
||||
cmd = os.path.join(self.cpp.build.bindir, "test_package")
|
||||
self.run(cmd, env="conanrun")
|
||||
|
||||
# If we are on conan 2 we can check the license info is populated
|
||||
if hasattr(self, 'dependencies'):
|
||||
catch2 = self.dependencies["catch2"]
|
||||
assert os.path.exists(f'{catch2.package_folder}/licenses/LICENSE.txt')
|
||||
assert catch2.license == 'BSL-1.0'
|
||||
package_folder = load(self, os.path.join(self.build_folder, "package_folder"))
|
||||
license = load(self, os.path.join(self.build_folder, "license"))
|
||||
assert os.path.isfile(os.path.join(package_folder, "licenses", "LICENSE.txt"))
|
||||
assert license == 'BSL-1.0'
|
||||
|
6
.github/workflows/linux-simple-builds.yml
vendored
6
.github/workflows/linux-simple-builds.yml
vendored
@@ -9,6 +9,8 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
cxx:
|
||||
- g++-5
|
||||
- g++-6
|
||||
- g++-7
|
||||
- g++-8
|
||||
- g++-9
|
||||
@@ -21,6 +23,10 @@ jobs:
|
||||
build_type: [Debug, Release]
|
||||
std: [14]
|
||||
include:
|
||||
- cxx: g++-5
|
||||
other_pkgs: g++-5
|
||||
- cxx: g++-6
|
||||
other_pkgs: g++-6
|
||||
- cxx: g++-7
|
||||
other_pkgs: g++-7
|
||||
- cxx: g++-8
|
||||
|
44
.github/workflows/mac-builds-m1.yml
vendored
Normal file
44
.github/workflows/mac-builds-m1.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
name: M1 Mac builds
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-14
|
||||
strategy:
|
||||
matrix:
|
||||
cxx:
|
||||
- clang++
|
||||
build_type: [Debug, Release]
|
||||
std: [14, 17]
|
||||
include:
|
||||
- build_type: Debug
|
||||
examples: ON
|
||||
extra_tests: ON
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Configure build
|
||||
working-directory: ${{runner.workspace}}
|
||||
env:
|
||||
CXX: ${{matrix.cxx}}
|
||||
CXXFLAGS: ${{matrix.cxxflags}}
|
||||
run: |
|
||||
cmake -Bbuild -H$GITHUB_WORKSPACE \
|
||||
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
|
||||
-DCMAKE_CXX_STANDARD=${{matrix.std}} \
|
||||
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
|
||||
-DCATCH_DEVELOPMENT_BUILD=ON \
|
||||
-DCATCH_BUILD_EXAMPLES=${{matrix.examples}} \
|
||||
-DCATCH_BUILD_EXTRA_TESTS=${{matrix.examples}}
|
||||
|
||||
- name: Build tests + lib
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
run: make -j `sysctl -n hw.ncpu`
|
||||
|
||||
- name: Run tests
|
||||
env:
|
||||
CTEST_OUTPUT_ON_FAILURE: 1
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
run: ctest -C ${{matrix.build_type}} -j `sysctl -n hw.ncpu`
|
@@ -9,12 +9,12 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
conan_version:
|
||||
- '1.62'
|
||||
- '2.0'
|
||||
- '1.63'
|
||||
- '2.1'
|
||||
|
||||
include:
|
||||
# Conan 1 has default profiles installed
|
||||
- conan_version: '1.62'
|
||||
- conan_version: '1.63'
|
||||
profile_generate: 'false'
|
||||
|
||||
steps:
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -27,6 +27,7 @@ benchmark-dir
|
||||
.conan/test_package/build
|
||||
.conan/test_package/CMakeUserPresets.json
|
||||
bazel-*
|
||||
MODULE.bazel.lock
|
||||
build-fuzzers
|
||||
debug-build
|
||||
.vscode
|
||||
|
@@ -56,7 +56,6 @@ function(add_warnings_to_targets targets)
|
||||
"-Wexit-time-destructors"
|
||||
"-Wextra"
|
||||
"-Wextra-semi"
|
||||
"-Wfloat-equal"
|
||||
"-Wglobal-constructors"
|
||||
"-Winit-self"
|
||||
"-Wmisleading-indentation"
|
||||
@@ -68,6 +67,7 @@ function(add_warnings_to_targets targets)
|
||||
"-Wmissing-noreturn"
|
||||
"-Wmissing-prototypes"
|
||||
"-Wmissing-variable-declarations"
|
||||
"-Wnon-virtual-dtor"
|
||||
"-Wnull-dereference"
|
||||
"-Wold-style-cast"
|
||||
"-Woverloaded-virtual"
|
||||
|
@@ -33,7 +33,7 @@ if (CMAKE_BINARY_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
||||
endif()
|
||||
|
||||
project(Catch2
|
||||
VERSION 3.5.3 # CML version placeholder, don't delete
|
||||
VERSION 3.6.0 # CML version placeholder, don't delete
|
||||
LANGUAGES CXX
|
||||
# HOMEPAGE_URL is not supported until CMake version 3.12, which
|
||||
# we do not target yet.
|
||||
@@ -76,8 +76,6 @@ endif()
|
||||
set(CATCH_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set(SOURCES_DIR ${CATCH_DIR}/src/catch2)
|
||||
set(SELF_TEST_DIR ${CATCH_DIR}/tests/SelfTest)
|
||||
set(BENCHMARK_DIR ${CATCH_DIR}/tests/Benchmark)
|
||||
set(EXAMPLES_DIR ${CATCH_DIR}/examples)
|
||||
|
||||
# We need to bring-in the variables defined there to this scope
|
||||
add_subdirectory(src)
|
||||
@@ -200,4 +198,4 @@ if (NOT_SUBPROJECT)
|
||||
|
||||
include( CPack )
|
||||
|
||||
endif(NOT_SUBPROJECT)
|
||||
endif()
|
||||
|
92
conanfile.py
92
conanfile.py
@@ -1,9 +1,11 @@
|
||||
#!/usr/bin/env python
|
||||
from conan import ConanFile, tools, __version__ as conan_version
|
||||
from conan import ConanFile
|
||||
from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout
|
||||
from conan.tools import files, scm
|
||||
from conan.tools.files import copy, rmdir
|
||||
from conan.tools.build import check_min_cppstd
|
||||
from conan.tools.scm import Version
|
||||
from conan.errors import ConanInvalidConfiguration
|
||||
import os
|
||||
import shutil
|
||||
import re
|
||||
|
||||
required_conan_version = ">=1.53.0"
|
||||
@@ -16,11 +18,32 @@ class CatchConan(ConanFile):
|
||||
homepage = url
|
||||
license = "BSL-1.0"
|
||||
version = "latest"
|
||||
|
||||
exports = "LICENSE.txt"
|
||||
exports_sources = ("src/*", "CMakeLists.txt", "CMake/*", "extras/*")
|
||||
|
||||
settings = "os", "compiler", "build_type", "arch"
|
||||
extension_properties = {"compatibility_cppstd": False}
|
||||
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
}
|
||||
|
||||
@property
|
||||
def _min_cppstd(self):
|
||||
return "14"
|
||||
|
||||
@property
|
||||
def _compilers_minimum_version(self):
|
||||
return {
|
||||
"gcc": "7",
|
||||
"Visual Studio": "15",
|
||||
"msvc": "191",
|
||||
"clang": "5",
|
||||
"apple-clang": "10",
|
||||
}
|
||||
|
||||
|
||||
def set_version(self):
|
||||
pattern = re.compile(r"\w*VERSION (\d+\.\d+\.\d+) # CML version placeholder, don't delete")
|
||||
@@ -32,39 +55,57 @@ class CatchConan(ConanFile):
|
||||
|
||||
self.output.info(f'Using version: {self.version}')
|
||||
|
||||
def export(self):
|
||||
copy(self, "LICENSE.txt", src=self.recipe_folder, dst=self.export_folder)
|
||||
|
||||
def export_sources(self):
|
||||
copy(self, "CMakeLists.txt", src=self.recipe_folder, dst=self.export_sources_folder)
|
||||
copy(self, "src/*", src=self.recipe_folder, dst=self.export_sources_folder)
|
||||
copy(self, "extras/*", src=self.recipe_folder, dst=self.export_sources_folder)
|
||||
copy(self, "CMake/*", src=self.recipe_folder, dst=self.export_sources_folder)
|
||||
|
||||
def config_options(self):
|
||||
if self.settings.os == "Windows":
|
||||
del self.options.fPIC
|
||||
|
||||
def configure(self):
|
||||
if self.options.shared:
|
||||
self.options.rm_safe("fPIC")
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def validate(self):
|
||||
if self.settings.compiler.get_safe("cppstd"):
|
||||
check_min_cppstd(self, self._min_cppstd)
|
||||
# INFO: Conan 1.x does not specify cppstd by default, so we need to check the compiler version instead.
|
||||
minimum_version = self._compilers_minimum_version.get(str(self.settings.compiler), False)
|
||||
if minimum_version and Version(self.settings.compiler.version) < minimum_version:
|
||||
raise ConanInvalidConfiguration(f"{self.ref} requires C++{self._min_cppstd}, which your compiler doesn't support")
|
||||
|
||||
def generate(self):
|
||||
tc = CMakeToolchain(self)
|
||||
tc.cache_variables["BUILD_TESTING"] = False
|
||||
tc.cache_variables["CATCH_INSTALL_DOCS"] = False
|
||||
tc.cache_variables["CATCH_INSTALL_EXTRAS"] = True
|
||||
tc.generate()
|
||||
|
||||
deps = CMakeDeps(self)
|
||||
deps.generate()
|
||||
|
||||
def _configure_cmake(self):
|
||||
cmake = CMake(self)
|
||||
|
||||
# These are option variables. The toolchain in conan 2 doesn't appear to
|
||||
# set these correctly so you have to do it in the configure variables.
|
||||
cmake.configure(variables= {
|
||||
"BUILD_TESTING": "OFF",
|
||||
"CATCH_INSTALL_DOCS": "OFF",
|
||||
"CATCH_INSTALL_EXTRAS": "ON",
|
||||
}
|
||||
)
|
||||
return cmake
|
||||
|
||||
def build(self):
|
||||
cmake = self._configure_cmake()
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def package(self):
|
||||
cmake = self._configure_cmake()
|
||||
copy(self, "LICENSE.txt", src=str(self.recipe_folder), dst=os.path.join(self.package_folder, "licenses"))
|
||||
cmake = CMake(self)
|
||||
cmake.install()
|
||||
|
||||
os.mkdir(f'{self.package_folder}/licenses/')
|
||||
shutil.copy2(f'{self.recipe_folder}/LICENSE.txt', f'{self.package_folder}/licenses/')
|
||||
rmdir(self, os.path.join(self.package_folder, "share"))
|
||||
rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
|
||||
copy(self, "*.cmake", src=os.path.join(self.export_sources_folder, "extras"),
|
||||
dst=os.path.join(self.package_folder, "lib", "cmake", "Catch2"))
|
||||
|
||||
def package_info(self):
|
||||
lib_suffix = "d" if self.settings.build_type == "Debug" else ""
|
||||
@@ -75,6 +116,7 @@ class CatchConan(ConanFile):
|
||||
|
||||
# Catch2
|
||||
self.cpp_info.components["catch2base"].set_property("cmake_file_name", "Catch2::Catch2")
|
||||
self.cpp_info.components["catch2base"].set_property("cmake_target_name", "Catch2::Catch2")
|
||||
self.cpp_info.components["catch2base"].set_property("pkg_config_name", "catch2")
|
||||
self.cpp_info.components["catch2base"].libs = ["Catch2" + lib_suffix]
|
||||
self.cpp_info.components["catch2base"].builddirs.append("lib/cmake/Catch2")
|
||||
|
@@ -145,7 +145,7 @@ only tests that match the positive filters are included.
|
||||
|
||||
You can also match test names with special characters by escaping them
|
||||
with a backslash (`"\"`), e.g. a test named `"Do A, then B"` is matched
|
||||
by "Do A\, then B" test spec. Backslash also escapes itself.
|
||||
by `"Do A\, then B"` test spec. Backslash also escapes itself.
|
||||
|
||||
|
||||
### Examples
|
||||
@@ -194,7 +194,8 @@ verbose and human-friendly output.
|
||||
|
||||
Reporters are also individually configurable. To pass configuration options
|
||||
to the reporter, you append `::key=value` to the reporter specification
|
||||
as many times as you want, e.g. `--reporter xml::out=someFile.xml`.
|
||||
as many times as you want, e.g. `--reporter xml::out=someFile.xml` or
|
||||
`--reporter custom::colour-mode=ansi::Xoption=2`.
|
||||
|
||||
The keys must either be prefixed by "X", in which case they are not parsed
|
||||
by Catch2 and are only passed down to the reporter, or one of options
|
||||
|
@@ -114,6 +114,10 @@ Similar to `INFO`, but messages are not limited to their own scope: They are rem
|
||||
|
||||
The message is always reported but does not fail the test.
|
||||
|
||||
**SUCCEED(** _message expression_ **)**
|
||||
|
||||
The message is reported and the test case succeeds.
|
||||
|
||||
**FAIL(** _message expression_ **)**
|
||||
|
||||
The message is reported and the test case fails.
|
||||
|
@@ -2,6 +2,8 @@
|
||||
|
||||
# Release notes
|
||||
**Contents**<br>
|
||||
[3.6.0](#360)<br>
|
||||
[3.5.4](#354)<br>
|
||||
[3.5.3](#353)<br>
|
||||
[3.5.2](#352)<br>
|
||||
[3.5.1](#351)<br>
|
||||
@@ -61,6 +63,54 @@
|
||||
[Even Older versions](#even-older-versions)<br>
|
||||
|
||||
|
||||
## 3.6.0
|
||||
|
||||
### Fixes
|
||||
* Fixed Windows ARM64 build by fixing the preprocessor condition guarding use `_umul128` intrinsic.
|
||||
* Fixed Windows ARM64EC build by removing intrinsic pragma it does not understand. (#2858)
|
||||
* Why doesn't the x64-emulation build mode understand x64 pragmas? Don't ask me, ask the MSVC guys.
|
||||
* Fixed the JUnit reporter sometimes crashing when reporting a fatal error. (#1210, #2855)
|
||||
* The binary will still exit, but through the original error, rather than secondary error inside the reporter.
|
||||
* The underlying fix applies to all reporters, not just the JUnit one, but only JUnit was currently causing troubles.
|
||||
|
||||
### Improvements
|
||||
* Disable `-Wnon-virtual-dtor` in Decomposer and Matchers (#2854)
|
||||
* `precision` in floating point stringmakers defaults to `max_digits10`.
|
||||
* This means that floating point values will be printed with enough precision to disambiguate any two floats.
|
||||
* Column wrapping ignores ansi colour codes when calculating string width (#2833, #2849)
|
||||
* This makes the output much more readable when the provided messages contain colour codes.
|
||||
|
||||
### Miscellaneous
|
||||
* Conan support improvements
|
||||
* `compatibility_cppstr` is set to False. (#2860)
|
||||
* This means that Conan won't let you mix library and project with different C++ standard settings.
|
||||
* The implementation library CMake target name through Conan is properly set to `Catch2::Catch2` (#2861)
|
||||
* `SelfTest` target can be built through Bazel (#2857)
|
||||
|
||||
|
||||
## 3.5.4
|
||||
|
||||
### Fixes
|
||||
* Fixed potential compilation error when asked to generate random integers whose type did not match `std::(u)int*_t`.
|
||||
* This manifested itself when generating random `size_t`s on MacOS
|
||||
* Added missing outlined destructor causing `Wdelete-incomplete` when compiling against libstdc++ in C++23 mode (#2852)
|
||||
* Fixed regression where decomposing assertion with const instance of `std::foo_ordering` would not compile
|
||||
|
||||
### Improvements
|
||||
* Reintroduced support for GCC 5 and 6 (#2836)
|
||||
* As with VS2017, if they start causing trouble again, they will be dropped again.
|
||||
* Added workaround for targetting newest MacOS (Sonoma) using GCC (#2837, #2839)
|
||||
* `CATCH_CONFIG_DEFAULT_REPORTER` can now be an arbitrary reporter spec
|
||||
* Previously it could only be a plain reporter name, so it was impossible to compile in custom arguments to the reporter.
|
||||
* Improved performance of generating 64bit random integers by 20+%
|
||||
|
||||
### Miscellaneous
|
||||
* Significantly improved Conan in-tree recipe (#2831)
|
||||
* `DL_PATHS` in `catch_discover_tests` now supports multiple arguments (#2852, #2736)
|
||||
* Fixed preprocessor logic for checking whether we expect reproducible floating point results in tests.
|
||||
* Improved the floating point tests structure to avoid `Wunused` when the reproducibility tests are disabled (#2845)
|
||||
|
||||
|
||||
## 3.5.3
|
||||
|
||||
### Fixes
|
||||
|
@@ -43,8 +43,7 @@ set( TARGETS_IDIOMATIC_EXAMPLES ${BASENAMES_IDIOMATIC_EXAMPLES} )
|
||||
|
||||
|
||||
foreach( name ${TARGETS_IDIOMATIC_EXAMPLES} )
|
||||
add_executable( ${name}
|
||||
${EXAMPLES_DIR}/${name}.cpp )
|
||||
add_executable( ${name} ${name}.cpp )
|
||||
endforeach()
|
||||
|
||||
set(ALL_EXAMPLE_TARGETS
|
||||
|
@@ -21,8 +21,8 @@ function(catch_discover_tests_impl)
|
||||
cmake_parse_arguments(
|
||||
""
|
||||
""
|
||||
"TEST_EXECUTABLE;TEST_WORKING_DIR;TEST_DL_PATHS;TEST_OUTPUT_DIR;TEST_OUTPUT_PREFIX;TEST_OUTPUT_SUFFIX;TEST_PREFIX;TEST_REPORTER;TEST_SPEC;TEST_SUFFIX;TEST_LIST;CTEST_FILE"
|
||||
"TEST_EXTRA_ARGS;TEST_PROPERTIES;TEST_EXECUTOR"
|
||||
"TEST_EXECUTABLE;TEST_WORKING_DIR;TEST_OUTPUT_DIR;TEST_OUTPUT_PREFIX;TEST_OUTPUT_SUFFIX;TEST_PREFIX;TEST_REPORTER;TEST_SPEC;TEST_SUFFIX;TEST_LIST;CTEST_FILE"
|
||||
"TEST_EXTRA_ARGS;TEST_PROPERTIES;TEST_EXECUTOR;TEST_DL_PATHS"
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
|
@@ -187,7 +187,7 @@ function(ParseAndAddCatchTests_ParseFile SourceFile TestTarget)
|
||||
if(result)
|
||||
set(HiddenTagFound ON)
|
||||
break()
|
||||
endif(result)
|
||||
endif()
|
||||
endforeach(label)
|
||||
if(PARSE_CATCH_TESTS_NO_HIDDEN_TESTS AND ${HiddenTagFound} AND ${CMAKE_VERSION} VERSION_LESS "3.9")
|
||||
ParseAndAddCatchTests_PrintDebugMessage("Skipping test \"${CTestName}\" as it has [!hide], [.] or [.foo] label")
|
||||
|
@@ -6,8 +6,8 @@
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
|
||||
// Catch v3.5.3
|
||||
// Generated: 2024-03-01 22:05:56.038084
|
||||
// Catch v3.6.0
|
||||
// Generated: 2024-05-05 20:53:27.562886
|
||||
// ----------------------------------------------------------
|
||||
// This file is an amalgamation of multiple different files.
|
||||
// You probably shouldn't edit it directly.
|
||||
@@ -187,7 +187,7 @@ namespace Catch {
|
||||
double const* last,
|
||||
Estimator& estimator ) {
|
||||
auto n = static_cast<size_t>( last - first );
|
||||
std::uniform_int_distribution<size_t> dist( 0, n - 1 );
|
||||
Catch::uniform_integer_distribution<size_t> dist( 0, n - 1 );
|
||||
|
||||
sample out;
|
||||
out.reserve( resamples );
|
||||
@@ -807,14 +807,16 @@ namespace Catch {
|
||||
|
||||
// Insert the default reporter if user hasn't asked for a specific one
|
||||
if ( m_data.reporterSpecifications.empty() ) {
|
||||
m_data.reporterSpecifications.push_back( {
|
||||
#if defined( CATCH_CONFIG_DEFAULT_REPORTER )
|
||||
CATCH_CONFIG_DEFAULT_REPORTER,
|
||||
const auto default_spec = CATCH_CONFIG_DEFAULT_REPORTER;
|
||||
#else
|
||||
"console",
|
||||
const auto default_spec = "console";
|
||||
#endif
|
||||
{}, {}, {}
|
||||
} );
|
||||
auto parsed = parseReporterSpec(default_spec);
|
||||
CATCH_ENFORCE( parsed,
|
||||
"Cannot parse the provided default reporter spec: '"
|
||||
<< default_spec << '\'' );
|
||||
m_data.reporterSpecifications.push_back( std::move( *parsed ) );
|
||||
}
|
||||
|
||||
if ( enableBazelEnvSupport() ) {
|
||||
@@ -2154,13 +2156,13 @@ std::string StringMaker<unsigned char>::convert(unsigned char value) {
|
||||
return ::Catch::Detail::stringify(static_cast<char>(value));
|
||||
}
|
||||
|
||||
int StringMaker<float>::precision = 5;
|
||||
int StringMaker<float>::precision = std::numeric_limits<float>::max_digits10;
|
||||
|
||||
std::string StringMaker<float>::convert(float value) {
|
||||
return Detail::fpToString(value, precision) + 'f';
|
||||
}
|
||||
|
||||
int StringMaker<double>::precision = 10;
|
||||
int StringMaker<double>::precision = std::numeric_limits<double>::max_digits10;
|
||||
|
||||
std::string StringMaker<double>::convert(double value) {
|
||||
return Detail::fpToString(value, precision);
|
||||
@@ -2271,7 +2273,7 @@ namespace Catch {
|
||||
}
|
||||
|
||||
Version const& libraryVersion() {
|
||||
static Version version( 3, 5, 3, "", 0 );
|
||||
static Version version( 3, 6, 0, "", 0 );
|
||||
return version;
|
||||
}
|
||||
|
||||
@@ -5851,6 +5853,13 @@ namespace Catch {
|
||||
assertionEnded(CATCH_MOVE(result) );
|
||||
resetAssertionInfo();
|
||||
|
||||
// Best effort cleanup for sections that have not been destructed yet
|
||||
// Since this is a fatal error, we have not had and won't have the opportunity to destruct them properly
|
||||
while (!m_activeSections.empty()) {
|
||||
auto nl = m_activeSections.back()->nameAndLocation();
|
||||
SectionEndInfo endInfo{ SectionInfo(CATCH_MOVE(nl.location), CATCH_MOVE(nl.name)), {}, 0.0 };
|
||||
sectionEndedEarly(CATCH_MOVE(endInfo));
|
||||
}
|
||||
handleUnfinishedSections();
|
||||
|
||||
// Recreate section for test case (as we will lose the one that was in scope)
|
||||
@@ -6601,6 +6610,8 @@ namespace Catch {
|
||||
return getRegistryHub().getTestCaseRegistry().getAllTestsSorted( config );
|
||||
}
|
||||
|
||||
TestRegistry::~TestRegistry() = default;
|
||||
|
||||
void TestRegistry::registerTest(Detail::unique_ptr<TestCaseInfo> testInfo, Detail::unique_ptr<ITestInvoker> testInvoker) {
|
||||
m_handles.emplace_back(testInfo.get(), testInvoker.get());
|
||||
m_viewed_test_infos.push_back(testInfo.get());
|
||||
@@ -7203,117 +7214,228 @@ namespace {
|
||||
return std::memchr( chars, c, sizeof( chars ) - 1 ) != nullptr;
|
||||
}
|
||||
|
||||
bool isBoundary( std::string const& line, size_t at ) {
|
||||
assert( at > 0 );
|
||||
assert( at <= line.size() );
|
||||
|
||||
return at == line.size() ||
|
||||
( isWhitespace( line[at] ) && !isWhitespace( line[at - 1] ) ) ||
|
||||
isBreakableBefore( line[at] ) ||
|
||||
isBreakableAfter( line[at - 1] );
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace Catch {
|
||||
namespace TextFlow {
|
||||
void AnsiSkippingString::preprocessString() {
|
||||
for ( auto it = m_string.begin(); it != m_string.end(); ) {
|
||||
// try to read through an ansi sequence
|
||||
while ( it != m_string.end() && *it == '\033' &&
|
||||
it + 1 != m_string.end() && *( it + 1 ) == '[' ) {
|
||||
auto cursor = it + 2;
|
||||
while ( cursor != m_string.end() &&
|
||||
( isdigit( *cursor ) || *cursor == ';' ) ) {
|
||||
++cursor;
|
||||
}
|
||||
if ( cursor == m_string.end() || *cursor != 'm' ) {
|
||||
break;
|
||||
}
|
||||
// 'm' -> 0xff
|
||||
*cursor = AnsiSkippingString::sentinel;
|
||||
// if we've read an ansi sequence, set the iterator and
|
||||
// return to the top of the loop
|
||||
it = cursor + 1;
|
||||
}
|
||||
if ( it != m_string.end() ) {
|
||||
++m_size;
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AnsiSkippingString::AnsiSkippingString( std::string const& text ):
|
||||
m_string( text ) {
|
||||
preprocessString();
|
||||
}
|
||||
|
||||
AnsiSkippingString::AnsiSkippingString( std::string&& text ):
|
||||
m_string( CATCH_MOVE( text ) ) {
|
||||
preprocessString();
|
||||
}
|
||||
|
||||
AnsiSkippingString::const_iterator AnsiSkippingString::begin() const {
|
||||
return const_iterator( m_string );
|
||||
}
|
||||
|
||||
AnsiSkippingString::const_iterator AnsiSkippingString::end() const {
|
||||
return const_iterator( m_string, const_iterator::EndTag{} );
|
||||
}
|
||||
|
||||
std::string AnsiSkippingString::substring( const_iterator begin,
|
||||
const_iterator end ) const {
|
||||
// There's one caveat here to an otherwise simple substring: when
|
||||
// making a begin iterator we might have skipped ansi sequences at
|
||||
// the start. If `begin` here is a begin iterator, skipped over
|
||||
// initial ansi sequences, we'll use the true beginning of the
|
||||
// string. Lastly: We need to transform any chars we replaced with
|
||||
// 0xff back to 'm'
|
||||
auto str = std::string( begin == this->begin() ? m_string.begin()
|
||||
: begin.m_it,
|
||||
end.m_it );
|
||||
std::transform( str.begin(), str.end(), str.begin(), []( char c ) {
|
||||
return c == AnsiSkippingString::sentinel ? 'm' : c;
|
||||
} );
|
||||
return str;
|
||||
}
|
||||
|
||||
void AnsiSkippingString::const_iterator::tryParseAnsiEscapes() {
|
||||
// check if we've landed on an ansi sequence, and if so read through
|
||||
// it
|
||||
while ( m_it != m_string->end() && *m_it == '\033' &&
|
||||
m_it + 1 != m_string->end() && *( m_it + 1 ) == '[' ) {
|
||||
auto cursor = m_it + 2;
|
||||
while ( cursor != m_string->end() &&
|
||||
( isdigit( *cursor ) || *cursor == ';' ) ) {
|
||||
++cursor;
|
||||
}
|
||||
if ( cursor == m_string->end() ||
|
||||
*cursor != AnsiSkippingString::sentinel ) {
|
||||
break;
|
||||
}
|
||||
// if we've read an ansi sequence, set the iterator and
|
||||
// return to the top of the loop
|
||||
m_it = cursor + 1;
|
||||
}
|
||||
}
|
||||
|
||||
void AnsiSkippingString::const_iterator::advance() {
|
||||
assert( m_it != m_string->end() );
|
||||
m_it++;
|
||||
tryParseAnsiEscapes();
|
||||
}
|
||||
|
||||
void AnsiSkippingString::const_iterator::unadvance() {
|
||||
assert( m_it != m_string->begin() );
|
||||
m_it--;
|
||||
// if *m_it is 0xff, scan back to the \033 and then m_it-- once more
|
||||
// (and repeat check)
|
||||
while ( *m_it == AnsiSkippingString::sentinel ) {
|
||||
while ( *m_it != '\033' ) {
|
||||
assert( m_it != m_string->begin() );
|
||||
m_it--;
|
||||
}
|
||||
// if this happens, we must have been a begin iterator that had
|
||||
// skipped over ansi sequences at the start of a string
|
||||
assert( m_it != m_string->begin() );
|
||||
assert( *m_it == '\033' );
|
||||
m_it--;
|
||||
}
|
||||
}
|
||||
|
||||
static bool isBoundary( AnsiSkippingString const& line,
|
||||
AnsiSkippingString::const_iterator it ) {
|
||||
return it == line.end() ||
|
||||
( isWhitespace( *it ) &&
|
||||
!isWhitespace( *it.oneBefore() ) ) ||
|
||||
isBreakableBefore( *it ) ||
|
||||
isBreakableAfter( *it.oneBefore() );
|
||||
}
|
||||
|
||||
void Column::const_iterator::calcLength() {
|
||||
m_addHyphen = false;
|
||||
m_parsedTo = m_lineStart;
|
||||
AnsiSkippingString const& current_line = m_column.m_string;
|
||||
|
||||
std::string const& current_line = m_column.m_string;
|
||||
if ( current_line[m_lineStart] == '\n' ) {
|
||||
++m_parsedTo;
|
||||
if ( m_parsedTo == current_line.end() ) {
|
||||
m_lineEnd = m_parsedTo;
|
||||
return;
|
||||
}
|
||||
|
||||
assert( m_lineStart != current_line.end() );
|
||||
if ( *m_lineStart == '\n' ) { ++m_parsedTo; }
|
||||
|
||||
const auto maxLineLength = m_column.m_width - indentSize();
|
||||
const auto maxParseTo = std::min(current_line.size(), m_lineStart + maxLineLength);
|
||||
while ( m_parsedTo < maxParseTo &&
|
||||
current_line[m_parsedTo] != '\n' ) {
|
||||
std::size_t lineLength = 0;
|
||||
while ( m_parsedTo != current_line.end() &&
|
||||
lineLength < maxLineLength && *m_parsedTo != '\n' ) {
|
||||
++m_parsedTo;
|
||||
++lineLength;
|
||||
}
|
||||
|
||||
// If we encountered a newline before the column is filled,
|
||||
// then we linebreak at the newline and consider this line
|
||||
// finished.
|
||||
if ( m_parsedTo < m_lineStart + maxLineLength ) {
|
||||
m_lineLength = m_parsedTo - m_lineStart;
|
||||
if ( lineLength < maxLineLength ) {
|
||||
m_lineEnd = m_parsedTo;
|
||||
} else {
|
||||
// Look for a natural linebreak boundary in the column
|
||||
// (We look from the end, so that the first found boundary is
|
||||
// the right one)
|
||||
size_t newLineLength = maxLineLength;
|
||||
while ( newLineLength > 0 && !isBoundary( current_line, m_lineStart + newLineLength ) ) {
|
||||
--newLineLength;
|
||||
m_lineEnd = m_parsedTo;
|
||||
while ( lineLength > 0 &&
|
||||
!isBoundary( current_line, m_lineEnd ) ) {
|
||||
--lineLength;
|
||||
--m_lineEnd;
|
||||
}
|
||||
while ( newLineLength > 0 &&
|
||||
isWhitespace( current_line[m_lineStart + newLineLength - 1] ) ) {
|
||||
--newLineLength;
|
||||
while ( lineLength > 0 &&
|
||||
isWhitespace( *m_lineEnd.oneBefore() ) ) {
|
||||
--lineLength;
|
||||
--m_lineEnd;
|
||||
}
|
||||
|
||||
// If we found one, then that is where we linebreak
|
||||
if ( newLineLength > 0 ) {
|
||||
m_lineLength = newLineLength;
|
||||
} else {
|
||||
// Otherwise we have to split text with a hyphen
|
||||
// If we found one, then that is where we linebreak, otherwise
|
||||
// we have to split text with a hyphen
|
||||
if ( lineLength == 0 ) {
|
||||
m_addHyphen = true;
|
||||
m_lineLength = maxLineLength - 1;
|
||||
m_lineEnd = m_parsedTo.oneBefore();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
size_t Column::const_iterator::indentSize() const {
|
||||
auto initial =
|
||||
m_lineStart == 0 ? m_column.m_initialIndent : std::string::npos;
|
||||
auto initial = m_lineStart == m_column.m_string.begin()
|
||||
? m_column.m_initialIndent
|
||||
: std::string::npos;
|
||||
return initial == std::string::npos ? m_column.m_indent : initial;
|
||||
}
|
||||
|
||||
std::string
|
||||
Column::const_iterator::addIndentAndSuffix( size_t position,
|
||||
size_t length ) const {
|
||||
std::string Column::const_iterator::addIndentAndSuffix(
|
||||
AnsiSkippingString::const_iterator start,
|
||||
AnsiSkippingString::const_iterator end ) const {
|
||||
std::string ret;
|
||||
const auto desired_indent = indentSize();
|
||||
ret.reserve( desired_indent + length + m_addHyphen );
|
||||
// ret.reserve( desired_indent + (end - start) + m_addHyphen );
|
||||
ret.append( desired_indent, ' ' );
|
||||
ret.append( m_column.m_string, position, length );
|
||||
if ( m_addHyphen ) {
|
||||
ret.push_back( '-' );
|
||||
}
|
||||
// ret.append( start, end );
|
||||
ret += m_column.m_string.substring( start, end );
|
||||
if ( m_addHyphen ) { ret.push_back( '-' ); }
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Column::const_iterator::const_iterator( Column const& column ): m_column( column ) {
|
||||
Column::const_iterator::const_iterator( Column const& column ):
|
||||
m_column( column ),
|
||||
m_lineStart( column.m_string.begin() ),
|
||||
m_lineEnd( column.m_string.begin() ),
|
||||
m_parsedTo( column.m_string.begin() ) {
|
||||
assert( m_column.m_width > m_column.m_indent );
|
||||
assert( m_column.m_initialIndent == std::string::npos ||
|
||||
m_column.m_width > m_column.m_initialIndent );
|
||||
calcLength();
|
||||
if ( m_lineLength == 0 ) {
|
||||
m_lineStart = m_column.m_string.size();
|
||||
if ( m_lineStart == m_lineEnd ) {
|
||||
m_lineStart = m_column.m_string.end();
|
||||
}
|
||||
}
|
||||
|
||||
std::string Column::const_iterator::operator*() const {
|
||||
assert( m_lineStart <= m_parsedTo );
|
||||
return addIndentAndSuffix( m_lineStart, m_lineLength );
|
||||
return addIndentAndSuffix( m_lineStart, m_lineEnd );
|
||||
}
|
||||
|
||||
Column::const_iterator& Column::const_iterator::operator++() {
|
||||
m_lineStart += m_lineLength;
|
||||
std::string const& current_line = m_column.m_string;
|
||||
if ( m_lineStart < current_line.size() && current_line[m_lineStart] == '\n' ) {
|
||||
m_lineStart += 1;
|
||||
m_lineStart = m_lineEnd;
|
||||
AnsiSkippingString const& current_line = m_column.m_string;
|
||||
if ( m_lineStart != current_line.end() && *m_lineStart == '\n' ) {
|
||||
m_lineStart++;
|
||||
} else {
|
||||
while ( m_lineStart < current_line.size() &&
|
||||
isWhitespace( current_line[m_lineStart] ) ) {
|
||||
while ( m_lineStart != current_line.end() &&
|
||||
isWhitespace( *m_lineStart ) ) {
|
||||
++m_lineStart;
|
||||
}
|
||||
}
|
||||
|
||||
if ( m_lineStart != current_line.size() ) {
|
||||
calcLength();
|
||||
}
|
||||
if ( m_lineStart != current_line.end() ) { calcLength(); }
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -8073,7 +8195,7 @@ namespace Detail {
|
||||
|
||||
std::string WithinRelMatcher::describe() const {
|
||||
Catch::ReusableStringStream sstr;
|
||||
sstr << "and " << m_target << " are within " << m_epsilon * 100. << "% of each other";
|
||||
sstr << "and " << ::Catch::Detail::stringify(m_target) << " are within " << m_epsilon * 100. << "% of each other";
|
||||
return sstr.str();
|
||||
}
|
||||
|
||||
|
@@ -6,8 +6,8 @@
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
|
||||
// Catch v3.5.3
|
||||
// Generated: 2024-03-01 22:05:55.031514
|
||||
// Catch v3.6.0
|
||||
// Generated: 2024-05-05 20:53:27.071502
|
||||
// ----------------------------------------------------------
|
||||
// This file is an amalgamation of multiple different files.
|
||||
// You probably shouldn't edit it directly.
|
||||
@@ -87,6 +87,9 @@
|
||||
// See e.g.:
|
||||
// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html
|
||||
#ifdef __APPLE__
|
||||
# ifndef __has_extension
|
||||
# define __has_extension(x) 0
|
||||
# endif
|
||||
# include <TargetConditionals.h>
|
||||
# if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \
|
||||
(defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1)
|
||||
@@ -5239,9 +5242,11 @@ namespace Detail {
|
||||
#ifdef __clang__
|
||||
# pragma clang diagnostic push
|
||||
# pragma clang diagnostic ignored "-Wsign-compare"
|
||||
# pragma clang diagnostic ignored "-Wnon-virtual-dtor"
|
||||
#elif defined __GNUC__
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wsign-compare"
|
||||
# pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
|
||||
#endif
|
||||
|
||||
#if defined(CATCH_CPP20_OR_GREATER) && __has_include(<compare>)
|
||||
@@ -5254,6 +5259,12 @@ namespace Detail {
|
||||
|
||||
namespace Catch {
|
||||
|
||||
namespace Detail {
|
||||
// This was added in C++20, but we require only C++14 for now.
|
||||
template <typename T>
|
||||
using RemoveCVRef_t = std::remove_cv_t<std::remove_reference_t<T>>;
|
||||
}
|
||||
|
||||
// Note: There is nothing that stops us from extending this,
|
||||
// e.g. to `std::is_scalar`, but the more encompassing
|
||||
// traits are usually also more expensive. For now we
|
||||
@@ -5293,14 +5304,13 @@ namespace Catch {
|
||||
ITransientExpression(ITransientExpression const&) = default;
|
||||
ITransientExpression& operator=(ITransientExpression const&) = default;
|
||||
|
||||
// We don't actually need a virtual destructor, but many static analysers
|
||||
// complain if it's not here :-(
|
||||
virtual ~ITransientExpression() = default;
|
||||
|
||||
friend std::ostream& operator<<(std::ostream& out, ITransientExpression const& expr) {
|
||||
expr.streamReconstructedExpression(out);
|
||||
return out;
|
||||
}
|
||||
|
||||
protected:
|
||||
~ITransientExpression() = default;
|
||||
};
|
||||
|
||||
void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs );
|
||||
@@ -5409,7 +5419,7 @@ namespace Catch {
|
||||
-> std::enable_if_t< \
|
||||
Detail::conjunction<Detail::is_##id##_comparable<LhsT, RhsT>, \
|
||||
Detail::negation<capture_by_value< \
|
||||
std::remove_reference_t<RhsT>>>>::value, \
|
||||
Detail::RemoveCVRef_t<RhsT>>>>::value, \
|
||||
BinaryExpr<LhsT, RhsT const&>> { \
|
||||
return { \
|
||||
static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
|
||||
@@ -5463,7 +5473,7 @@ namespace Catch {
|
||||
-> std::enable_if_t< \
|
||||
Detail::conjunction<Detail::is_##id##_comparable<LhsT, RhsT>, \
|
||||
Detail::negation<capture_by_value< \
|
||||
std::remove_reference_t<RhsT>>>>::value, \
|
||||
Detail::RemoveCVRef_t<RhsT>>>>::value, \
|
||||
BinaryExpr<LhsT, RhsT const&>> { \
|
||||
return { \
|
||||
static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
|
||||
@@ -5513,7 +5523,7 @@ namespace Catch {
|
||||
template <typename RhsT> \
|
||||
constexpr friend auto operator op( ExprLhs&& lhs, RhsT&& rhs ) \
|
||||
-> std::enable_if_t< \
|
||||
!capture_by_value<std::remove_reference_t<RhsT>>::value, \
|
||||
!capture_by_value<Detail::RemoveCVRef_t<RhsT>>::value, \
|
||||
BinaryExpr<LhsT, RhsT const&>> { \
|
||||
return { \
|
||||
static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
|
||||
@@ -5553,8 +5563,7 @@ namespace Catch {
|
||||
|
||||
struct Decomposer {
|
||||
template <typename T,
|
||||
std::enable_if_t<
|
||||
!capture_by_value<std::remove_reference_t<T>>::value,
|
||||
std::enable_if_t<!capture_by_value<Detail::RemoveCVRef_t<T>>::value,
|
||||
int> = 0>
|
||||
constexpr friend auto operator <= ( Decomposer &&, T && lhs ) -> ExprLhs<T const&> {
|
||||
return ExprLhs<const T&>{ lhs };
|
||||
@@ -7262,8 +7271,8 @@ namespace Catch {
|
||||
#define CATCH_VERSION_MACROS_HPP_INCLUDED
|
||||
|
||||
#define CATCH_VERSION_MAJOR 3
|
||||
#define CATCH_VERSION_MINOR 5
|
||||
#define CATCH_VERSION_PATCH 3
|
||||
#define CATCH_VERSION_MINOR 6
|
||||
#define CATCH_VERSION_PATCH 0
|
||||
|
||||
#endif // CATCH_VERSION_MACROS_HPP_INCLUDED
|
||||
|
||||
@@ -7935,6 +7944,34 @@ namespace Catch {
|
||||
#include <cstdint>
|
||||
#include <type_traits>
|
||||
|
||||
// Note: We use the usual enable-disable-autodetect dance here even though
|
||||
// we do not support these in CMake configuration options (yet?).
|
||||
// It is highly unlikely that we will need to make these actually
|
||||
// user-configurable, but this will make it simpler if weend up needing
|
||||
// it, and it provides an escape hatch to the users who need it.
|
||||
#if defined( __SIZEOF_INT128__ )
|
||||
# define CATCH_CONFIG_INTERNAL_UINT128
|
||||
// Unlike GCC, MSVC does not polyfill umul as mulh + mul pair on ARM machines.
|
||||
// Currently we do not bother doing this ourselves, but we could if it became
|
||||
// important for perf.
|
||||
#elif defined( _MSC_VER ) && defined( _M_X64 )
|
||||
# define CATCH_CONFIG_INTERNAL_MSVC_UMUL128
|
||||
#endif
|
||||
|
||||
#if defined( CATCH_CONFIG_INTERNAL_UINT128 ) && \
|
||||
!defined( CATCH_CONFIG_NO_UINT128 ) && \
|
||||
!defined( CATCH_CONFIG_UINT128 )
|
||||
#define CATCH_CONFIG_UINT128
|
||||
#endif
|
||||
|
||||
#if defined( CATCH_CONFIG_INTERNAL_MSVC_UMUL128 ) && \
|
||||
!defined( CATCH_CONFIG_NO_MSVC_UMUL128 ) && \
|
||||
!defined( CATCH_CONFIG_MSVC_UMUL128 )
|
||||
# define CATCH_CONFIG_MSVC_UMUL128
|
||||
# include <intrin.h>
|
||||
#endif
|
||||
|
||||
|
||||
namespace Catch {
|
||||
namespace Detail {
|
||||
|
||||
@@ -7967,59 +8004,52 @@ namespace Catch {
|
||||
}
|
||||
};
|
||||
|
||||
// Returns 128 bit result of multiplying lhs and rhs
|
||||
/**
|
||||
* Returns 128 bit result of lhs * rhs using portable C++ code
|
||||
*
|
||||
* This implementation is almost twice as fast as naive long multiplication,
|
||||
* and unlike intrinsic-based approach, it supports constexpr evaluation.
|
||||
*/
|
||||
constexpr ExtendedMultResult<std::uint64_t>
|
||||
extendedMult( std::uint64_t lhs, std::uint64_t rhs ) {
|
||||
// We use the simple long multiplication approach for
|
||||
// correctness, we can use platform specific builtins
|
||||
// for performance later.
|
||||
|
||||
// Split the lhs and rhs into two 32bit "digits", so that we can
|
||||
// do 64 bit arithmetic to handle carry bits.
|
||||
// 32b 32b 32b 32b
|
||||
// lhs L1 L2
|
||||
// * rhs R1 R2
|
||||
// ------------------------
|
||||
// | R2 * L2 |
|
||||
// | R2 * L1 |
|
||||
// | R1 * L2 |
|
||||
// | R1 * L1 |
|
||||
// -------------------------
|
||||
// | a | b | c | d |
|
||||
|
||||
extendedMultPortable(std::uint64_t lhs, std::uint64_t rhs) {
|
||||
#define CarryBits( x ) ( x >> 32 )
|
||||
#define Digits( x ) ( x & 0xFF'FF'FF'FF )
|
||||
std::uint64_t lhs_low = Digits( lhs );
|
||||
std::uint64_t rhs_low = Digits( rhs );
|
||||
std::uint64_t low_low = ( lhs_low * rhs_low );
|
||||
std::uint64_t high_high = CarryBits( lhs ) * CarryBits( rhs );
|
||||
|
||||
auto r2l2 = Digits( rhs ) * Digits( lhs );
|
||||
auto r2l1 = Digits( rhs ) * CarryBits( lhs );
|
||||
auto r1l2 = CarryBits( rhs ) * Digits( lhs );
|
||||
auto r1l1 = CarryBits( rhs ) * CarryBits( lhs );
|
||||
|
||||
// Sum to columns first
|
||||
auto d = Digits( r2l2 );
|
||||
auto c = CarryBits( r2l2 ) + Digits( r2l1 ) + Digits( r1l2 );
|
||||
auto b = CarryBits( r2l1 ) + CarryBits( r1l2 ) + Digits( r1l1 );
|
||||
auto a = CarryBits( r1l1 );
|
||||
|
||||
// Propagate carries between columns
|
||||
c += CarryBits( d );
|
||||
b += CarryBits( c );
|
||||
a += CarryBits( b );
|
||||
|
||||
// Remove the used carries
|
||||
c = Digits( c );
|
||||
b = Digits( b );
|
||||
a = Digits( a );
|
||||
// We add in carry bits from low-low already
|
||||
std::uint64_t high_low =
|
||||
( CarryBits( lhs ) * rhs_low ) + CarryBits( low_low );
|
||||
// Note that we can add only low bits from high_low, to avoid
|
||||
// overflow with large inputs
|
||||
std::uint64_t low_high =
|
||||
( lhs_low * CarryBits( rhs ) ) + Digits( high_low );
|
||||
|
||||
return { high_high + CarryBits( high_low ) + CarryBits( low_high ),
|
||||
( low_high << 32 ) | Digits( low_low ) };
|
||||
#undef CarryBits
|
||||
#undef Digits
|
||||
|
||||
return {
|
||||
a << 32 | b, // upper 64 bits
|
||||
c << 32 | d // lower 64 bits
|
||||
};
|
||||
}
|
||||
|
||||
//! Returns 128 bit result of lhs * rhs
|
||||
inline ExtendedMultResult<std::uint64_t>
|
||||
extendedMult( std::uint64_t lhs, std::uint64_t rhs ) {
|
||||
#if defined( CATCH_CONFIG_UINT128 )
|
||||
auto result = __uint128_t( lhs ) * __uint128_t( rhs );
|
||||
return { static_cast<std::uint64_t>( result >> 64 ),
|
||||
static_cast<std::uint64_t>( result ) };
|
||||
#elif defined( CATCH_CONFIG_MSVC_UMUL128 )
|
||||
std::uint64_t high;
|
||||
std::uint64_t low = _umul128( lhs, rhs, &high );
|
||||
return { high, low };
|
||||
#else
|
||||
return extendedMultPortable( lhs, rhs );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
template <typename UInt>
|
||||
constexpr ExtendedMultResult<UInt> extendedMult( UInt lhs, UInt rhs ) {
|
||||
static_assert( std::is_unsigned<UInt>::value,
|
||||
@@ -8123,22 +8153,6 @@ namespace Catch {
|
||||
|
||||
namespace Catch {
|
||||
|
||||
namespace Detail {
|
||||
// Indirection to enable make_unsigned<bool> behaviour.
|
||||
template <typename T>
|
||||
struct make_unsigned {
|
||||
using type = std::make_unsigned_t<T>;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct make_unsigned<bool> {
|
||||
using type = uint8_t;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
using make_unsigned_t = typename make_unsigned<T>::type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of uniform distribution on integers.
|
||||
*
|
||||
@@ -8154,7 +8168,7 @@ template <typename IntegerType>
|
||||
class uniform_integer_distribution {
|
||||
static_assert(std::is_integral<IntegerType>::value, "...");
|
||||
|
||||
using UnsignedIntegerType = Detail::make_unsigned_t<IntegerType>;
|
||||
using UnsignedIntegerType = Detail::SizedUnsignedType_t<sizeof(IntegerType)>;
|
||||
|
||||
// Only the left bound is stored, and we store it converted to its
|
||||
// unsigned image. This avoids having to do the conversions inside
|
||||
@@ -10823,6 +10837,8 @@ namespace Catch {
|
||||
std::vector<TestCaseHandle> const& getAllTests() const override;
|
||||
std::vector<TestCaseHandle> const& getAllTestsSorted( IConfig const& config ) const override;
|
||||
|
||||
~TestRegistry() override; // = default
|
||||
|
||||
private:
|
||||
std::vector<Detail::unique_ptr<TestCaseInfo>> m_owned_test_infos;
|
||||
// Keeps a materialized vector for `getAllInfos`.
|
||||
@@ -10932,6 +10948,107 @@ namespace Catch {
|
||||
|
||||
class Columns;
|
||||
|
||||
/**
|
||||
* Abstraction for a string with ansi escape sequences that
|
||||
* automatically skips over escapes when iterating. Only graphical
|
||||
* escape sequences are considered.
|
||||
*
|
||||
* Internal representation:
|
||||
* An escape sequence looks like \033[39;49m
|
||||
* We need bidirectional iteration and the unbound length of escape
|
||||
* sequences poses a problem for operator-- To make this work we'll
|
||||
* replace the last `m` with a 0xff (this is a codepoint that won't have
|
||||
* any utf-8 meaning).
|
||||
*/
|
||||
class AnsiSkippingString {
|
||||
std::string m_string;
|
||||
std::size_t m_size = 0;
|
||||
|
||||
// perform 0xff replacement and calculate m_size
|
||||
void preprocessString();
|
||||
|
||||
public:
|
||||
class const_iterator;
|
||||
using iterator = const_iterator;
|
||||
// note: must be u-suffixed or this will cause a "truncation of
|
||||
// constant value" warning on MSVC
|
||||
static constexpr char sentinel = static_cast<char>( 0xffu );
|
||||
|
||||
explicit AnsiSkippingString( std::string const& text );
|
||||
explicit AnsiSkippingString( std::string&& text );
|
||||
|
||||
const_iterator begin() const;
|
||||
const_iterator end() const;
|
||||
|
||||
size_t size() const { return m_size; }
|
||||
|
||||
std::string substring( const_iterator begin,
|
||||
const_iterator end ) const;
|
||||
};
|
||||
|
||||
class AnsiSkippingString::const_iterator {
|
||||
friend AnsiSkippingString;
|
||||
struct EndTag {};
|
||||
|
||||
const std::string* m_string;
|
||||
std::string::const_iterator m_it;
|
||||
|
||||
explicit const_iterator( const std::string& string, EndTag ):
|
||||
m_string( &string ), m_it( string.end() ) {}
|
||||
|
||||
void tryParseAnsiEscapes();
|
||||
void advance();
|
||||
void unadvance();
|
||||
|
||||
public:
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using value_type = char;
|
||||
using pointer = value_type*;
|
||||
using reference = value_type&;
|
||||
using iterator_category = std::bidirectional_iterator_tag;
|
||||
|
||||
explicit const_iterator( const std::string& string ):
|
||||
m_string( &string ), m_it( string.begin() ) {
|
||||
tryParseAnsiEscapes();
|
||||
}
|
||||
|
||||
char operator*() const { return *m_it; }
|
||||
|
||||
const_iterator& operator++() {
|
||||
advance();
|
||||
return *this;
|
||||
}
|
||||
const_iterator operator++( int ) {
|
||||
iterator prev( *this );
|
||||
operator++();
|
||||
return prev;
|
||||
}
|
||||
const_iterator& operator--() {
|
||||
unadvance();
|
||||
return *this;
|
||||
}
|
||||
const_iterator operator--( int ) {
|
||||
iterator prev( *this );
|
||||
operator--();
|
||||
return prev;
|
||||
}
|
||||
|
||||
bool operator==( const_iterator const& other ) const {
|
||||
return m_it == other.m_it;
|
||||
}
|
||||
bool operator!=( const_iterator const& other ) const {
|
||||
return !operator==( other );
|
||||
}
|
||||
bool operator<=( const_iterator const& other ) const {
|
||||
return m_it <= other.m_it;
|
||||
}
|
||||
|
||||
const_iterator oneBefore() const {
|
||||
auto it = *this;
|
||||
return --it;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Represents a column of text with specific width and indentation
|
||||
*
|
||||
@@ -10941,10 +11058,11 @@ namespace Catch {
|
||||
*/
|
||||
class Column {
|
||||
// String to be written out
|
||||
std::string m_string;
|
||||
AnsiSkippingString m_string;
|
||||
// Width of the column for linebreaking
|
||||
size_t m_width = CATCH_CONFIG_CONSOLE_WIDTH - 1;
|
||||
// Indentation of other lines (including first if initial indent is unset)
|
||||
// Indentation of other lines (including first if initial indent is
|
||||
// unset)
|
||||
size_t m_indent = 0;
|
||||
// Indentation of the first line
|
||||
size_t m_initialIndent = std::string::npos;
|
||||
@@ -10959,16 +11077,19 @@ namespace Catch {
|
||||
|
||||
Column const& m_column;
|
||||
// Where does the current line start?
|
||||
size_t m_lineStart = 0;
|
||||
AnsiSkippingString::const_iterator m_lineStart;
|
||||
// How long should the current line be?
|
||||
size_t m_lineLength = 0;
|
||||
AnsiSkippingString::const_iterator m_lineEnd;
|
||||
// How far have we checked the string to iterate?
|
||||
size_t m_parsedTo = 0;
|
||||
AnsiSkippingString::const_iterator m_parsedTo;
|
||||
// Should a '-' be appended to the line?
|
||||
bool m_addHyphen = false;
|
||||
|
||||
const_iterator( Column const& column, EndTag ):
|
||||
m_column( column ), m_lineStart( m_column.m_string.size() ) {}
|
||||
m_column( column ),
|
||||
m_lineStart( m_column.m_string.end() ),
|
||||
m_lineEnd( column.m_string.end() ),
|
||||
m_parsedTo( column.m_string.end() ) {}
|
||||
|
||||
// Calculates the length of the current line
|
||||
void calcLength();
|
||||
@@ -10978,8 +11099,9 @@ namespace Catch {
|
||||
|
||||
// Creates an indented and (optionally) suffixed string from
|
||||
// current iterator position, indentation and length.
|
||||
std::string addIndentAndSuffix( size_t position,
|
||||
size_t length ) const;
|
||||
std::string addIndentAndSuffix(
|
||||
AnsiSkippingString::const_iterator start,
|
||||
AnsiSkippingString::const_iterator end ) const;
|
||||
|
||||
public:
|
||||
using difference_type = std::ptrdiff_t;
|
||||
@@ -10996,7 +11118,8 @@ namespace Catch {
|
||||
const_iterator operator++( int );
|
||||
|
||||
bool operator==( const_iterator const& other ) const {
|
||||
return m_lineStart == other.m_lineStart && &m_column == &other.m_column;
|
||||
return m_lineStart == other.m_lineStart &&
|
||||
&m_column == &other.m_column;
|
||||
}
|
||||
bool operator!=( const_iterator const& other ) const {
|
||||
return !operator==( other );
|
||||
@@ -11037,7 +11160,9 @@ namespace Catch {
|
||||
|
||||
size_t width() const { return m_width; }
|
||||
const_iterator begin() const { return const_iterator( *this ); }
|
||||
const_iterator end() const { return { *this, const_iterator::EndTag{} }; }
|
||||
const_iterator end() const {
|
||||
return { *this, const_iterator::EndTag{} };
|
||||
}
|
||||
|
||||
friend std::ostream& operator<<( std::ostream& os,
|
||||
Column const& col );
|
||||
@@ -11308,6 +11433,16 @@ namespace Catch {
|
||||
|
||||
namespace Catch {
|
||||
|
||||
#ifdef __clang__
|
||||
# pragma clang diagnostic push
|
||||
# pragma clang diagnostic ignored "-Wsign-compare"
|
||||
# pragma clang diagnostic ignored "-Wnon-virtual-dtor"
|
||||
#elif defined __GNUC__
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wsign-compare"
|
||||
# pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
|
||||
#endif
|
||||
|
||||
template<typename ArgT, typename MatcherT>
|
||||
class MatchExpr : public ITransientExpression {
|
||||
ArgT && m_arg;
|
||||
@@ -11326,6 +11461,13 @@ namespace Catch {
|
||||
}
|
||||
};
|
||||
|
||||
#ifdef __clang__
|
||||
# pragma clang diagnostic pop
|
||||
#elif defined __GNUC__
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
|
||||
namespace Matchers {
|
||||
template <typename ArgT>
|
||||
class MatcherBase;
|
||||
|
@@ -8,7 +8,7 @@
|
||||
project(
|
||||
'catch2',
|
||||
'cpp',
|
||||
version: '3.5.3', # CML version placeholder, don't delete
|
||||
version: '3.6.0', # CML version placeholder, don't delete
|
||||
license: 'BSL-1.0',
|
||||
meson_version: '>=0.54.1',
|
||||
)
|
||||
|
@@ -362,29 +362,10 @@ set_target_properties(Catch2 PROPERTIES
|
||||
VERSION ${PROJECT_VERSION}
|
||||
SOVERSION ${PROJECT_VERSION})
|
||||
|
||||
# depend on bunch of C++11 and C++14 features to have C++14 enabled by default
|
||||
# require C++14
|
||||
target_compile_features(Catch2
|
||||
PUBLIC
|
||||
cxx_alignas
|
||||
cxx_alignof
|
||||
cxx_attributes
|
||||
cxx_auto_type
|
||||
cxx_constexpr
|
||||
cxx_defaulted_functions
|
||||
cxx_deleted_functions
|
||||
cxx_final
|
||||
cxx_lambdas
|
||||
cxx_noexcept
|
||||
cxx_override
|
||||
cxx_range_for
|
||||
cxx_rvalue_references
|
||||
cxx_static_assert
|
||||
cxx_strong_enums
|
||||
cxx_trailing_return_types
|
||||
cxx_unicode_literals
|
||||
cxx_user_literals
|
||||
cxx_variable_templates
|
||||
cxx_variadic_macros
|
||||
cxx_std_14
|
||||
)
|
||||
|
||||
configure_file(
|
||||
@@ -475,26 +456,7 @@ if (CATCH_BUILD_EXAMPLES OR CATCH_BUILD_EXTRA_TESTS)
|
||||
)
|
||||
target_compile_features(Catch2_buildall_interface
|
||||
INTERFACE
|
||||
cxx_alignas
|
||||
cxx_alignof
|
||||
cxx_attributes
|
||||
cxx_auto_type
|
||||
cxx_constexpr
|
||||
cxx_defaulted_functions
|
||||
cxx_deleted_functions
|
||||
cxx_final
|
||||
cxx_lambdas
|
||||
cxx_noexcept
|
||||
cxx_override
|
||||
cxx_range_for
|
||||
cxx_rvalue_references
|
||||
cxx_static_assert
|
||||
cxx_strong_enums
|
||||
cxx_trailing_return_types
|
||||
cxx_unicode_literals
|
||||
cxx_user_literals
|
||||
cxx_variable_templates
|
||||
cxx_variadic_macros
|
||||
cxx_std_14
|
||||
)
|
||||
endif()
|
||||
|
||||
|
@@ -12,6 +12,7 @@
|
||||
#include <catch2/internal/catch_compiler_capabilities.hpp>
|
||||
#include <catch2/internal/catch_floating_point_helpers.hpp>
|
||||
#include <catch2/internal/catch_random_number_generator.hpp>
|
||||
#include <catch2/internal/catch_uniform_integer_distribution.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
@@ -38,7 +39,7 @@ namespace Catch {
|
||||
double const* last,
|
||||
Estimator& estimator ) {
|
||||
auto n = static_cast<size_t>( last - first );
|
||||
std::uniform_int_distribution<size_t> dist( 0, n - 1 );
|
||||
Catch::uniform_integer_distribution<size_t> dist( 0, n - 1 );
|
||||
|
||||
sample out;
|
||||
out.reserve( resamples );
|
||||
|
@@ -10,74 +10,15 @@
|
||||
#include <catch2/internal/catch_reusable_string_stream.hpp>
|
||||
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
|
||||
namespace {
|
||||
|
||||
// Performs equivalent check of std::fabs(lhs - rhs) <= margin
|
||||
// But without the subtraction to allow for INFINITY in comparison
|
||||
bool marginComparison(double lhs, double rhs, double margin) {
|
||||
return (lhs + margin >= rhs) && (rhs + margin >= lhs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace Catch {
|
||||
|
||||
Approx::Approx ( double value )
|
||||
: m_epsilon( static_cast<double>(std::numeric_limits<float>::epsilon())*100. ),
|
||||
m_margin( 0.0 ),
|
||||
m_scale( 0.0 ),
|
||||
m_value( value )
|
||||
{}
|
||||
|
||||
Approx Approx::custom() {
|
||||
return Approx( 0 );
|
||||
}
|
||||
|
||||
Approx Approx::operator-() const {
|
||||
auto temp(*this);
|
||||
temp.m_value = -temp.m_value;
|
||||
return temp;
|
||||
}
|
||||
|
||||
|
||||
std::string Approx::toString() const {
|
||||
ReusableStringStream rss;
|
||||
rss << "Approx( " << ::Catch::Detail::stringify( m_value ) << " )";
|
||||
return rss.str();
|
||||
}
|
||||
|
||||
bool Approx::equalityComparisonImpl(const double other) const {
|
||||
// First try with fixed margin, then compute margin based on epsilon, scale and Approx's value
|
||||
// Thanks to Richard Harris for his help refining the scaled margin value
|
||||
return marginComparison(m_value, other, m_margin)
|
||||
|| marginComparison(m_value, other, m_epsilon * (m_scale + std::fabs(std::isinf(m_value)? 0 : m_value)));
|
||||
}
|
||||
|
||||
void Approx::setMargin(double newMargin) {
|
||||
CATCH_ENFORCE(newMargin >= 0,
|
||||
"Invalid Approx::margin: " << newMargin << '.'
|
||||
<< " Approx::Margin has to be non-negative.");
|
||||
m_margin = newMargin;
|
||||
}
|
||||
|
||||
void Approx::setEpsilon(double newEpsilon) {
|
||||
CATCH_ENFORCE(newEpsilon >= 0 && newEpsilon <= 1.0,
|
||||
"Invalid Approx::epsilon: " << newEpsilon << '.'
|
||||
<< " Approx::epsilon has to be in [0, 1]");
|
||||
m_epsilon = newEpsilon;
|
||||
}
|
||||
|
||||
namespace literals {
|
||||
Approx operator ""_a(long double val) {
|
||||
return Approx(val);
|
||||
}
|
||||
Approx operator ""_a(unsigned long long val) {
|
||||
return Approx(val);
|
||||
}
|
||||
} // end namespace literals
|
||||
|
||||
std::string StringMaker<Catch::Approx>::convert(Catch::Approx const& value) {
|
||||
return value.toString();
|
||||
}
|
||||
|
@@ -11,26 +11,67 @@
|
||||
#include <catch2/catch_tostring.hpp>
|
||||
|
||||
#include <type_traits>
|
||||
#include <limits>
|
||||
|
||||
namespace Catch {
|
||||
|
||||
class Approx {
|
||||
private:
|
||||
bool equalityComparisonImpl(double other) const;
|
||||
// Sets and validates the new margin (margin >= 0)
|
||||
void setMargin(double margin);
|
||||
// Performs equivalent check of std::fabs(lhs - rhs) <= margin
|
||||
// But without the subtraction to allow for INFINITY in comparison
|
||||
constexpr bool marginComparison (double lhs, double rhs, double margin) const {
|
||||
return (lhs + margin >= rhs) && (rhs + margin >= lhs);
|
||||
}
|
||||
|
||||
constexpr double fabs(double value) const {
|
||||
return (value < 0.0) ? -value : value;
|
||||
}
|
||||
|
||||
constexpr bool isinf(double value) const {
|
||||
return value == std::numeric_limits<double>::infinity() || value == -std::numeric_limits<double>::infinity();
|
||||
}
|
||||
|
||||
constexpr bool equalityComparisonImpl(double other) const {
|
||||
// First try with fixed margin, then compute margin based on epsilon, scale and Approx's value
|
||||
// Thanks to Richard Harris for his help refining the scaled margin value
|
||||
return marginComparison(m_value, other, m_margin)
|
||||
|| marginComparison(m_value, other, m_epsilon * (m_scale + fabs(isinf(m_value)? 0 : m_value)));
|
||||
}
|
||||
|
||||
// Sets and validates the new epsilon (0 < epsilon < 1)
|
||||
void setEpsilon(double epsilon);
|
||||
constexpr void setEpsilon(double epsilon) {
|
||||
if(epsilon < 0)
|
||||
throw std::domain_error("Invalid Approx::epsilon. Approx::epsilon has to be in [0, 1]");
|
||||
m_epsilon = epsilon;
|
||||
}
|
||||
|
||||
// Sets and validates the new margin (margin >= 0)
|
||||
constexpr void setMargin(double margin) {
|
||||
if(margin < 0)
|
||||
throw std::domain_error("Invalid Approx::margin. Approx::Margin has to be non-negative.");
|
||||
m_margin = margin;
|
||||
}
|
||||
|
||||
public:
|
||||
explicit Approx ( double value );
|
||||
constexpr inline explicit Approx ( double value )
|
||||
: m_epsilon( static_cast<double>(std::numeric_limits<float>::epsilon())*100. ),
|
||||
m_margin( 0.0 ),
|
||||
m_scale( 0.0 ),
|
||||
m_value( value )
|
||||
{}
|
||||
|
||||
static Approx custom();
|
||||
static constexpr Approx custom() {
|
||||
return Approx( 0.0 );
|
||||
}
|
||||
|
||||
Approx operator-() const;
|
||||
constexpr Approx operator-() const {
|
||||
auto temp(*this);
|
||||
temp.m_value = -temp.m_value;
|
||||
return temp;
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
Approx operator()( T const& value ) const {
|
||||
constexpr Approx operator()( T const& value ) const {
|
||||
Approx approx( static_cast<double>(value) );
|
||||
approx.m_epsilon = m_epsilon;
|
||||
approx.m_margin = m_margin;
|
||||
@@ -39,67 +80,67 @@ namespace Catch {
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
explicit Approx( T const& value ): Approx(static_cast<double>(value))
|
||||
constexpr inline explicit Approx( T const& value ): Approx(static_cast<double>(value))
|
||||
{}
|
||||
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
friend bool operator == ( const T& lhs, Approx const& rhs ) {
|
||||
friend constexpr bool operator == ( const T& lhs, Approx const& rhs ) {
|
||||
auto lhs_v = static_cast<double>(lhs);
|
||||
return rhs.equalityComparisonImpl(lhs_v);
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
friend bool operator == ( Approx const& lhs, const T& rhs ) {
|
||||
friend constexpr bool operator == ( Approx const& lhs, const T& rhs ) {
|
||||
return operator==( rhs, lhs );
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
friend bool operator != ( T const& lhs, Approx const& rhs ) {
|
||||
friend constexpr bool operator != ( T const& lhs, Approx const& rhs ) {
|
||||
return !operator==( lhs, rhs );
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
friend bool operator != ( Approx const& lhs, T const& rhs ) {
|
||||
friend constexpr bool operator != ( Approx const& lhs, T const& rhs ) {
|
||||
return !operator==( rhs, lhs );
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
friend bool operator <= ( T const& lhs, Approx const& rhs ) {
|
||||
friend constexpr bool operator <= ( T const& lhs, Approx const& rhs ) {
|
||||
return static_cast<double>(lhs) < rhs.m_value || lhs == rhs;
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
friend bool operator <= ( Approx const& lhs, T const& rhs ) {
|
||||
friend constexpr bool operator <= ( Approx const& lhs, T const& rhs ) {
|
||||
return lhs.m_value < static_cast<double>(rhs) || lhs == rhs;
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
friend bool operator >= ( T const& lhs, Approx const& rhs ) {
|
||||
friend constexpr bool operator >= ( T const& lhs, Approx const& rhs ) {
|
||||
return static_cast<double>(lhs) > rhs.m_value || lhs == rhs;
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
friend bool operator >= ( Approx const& lhs, T const& rhs ) {
|
||||
friend constexpr bool operator >= ( Approx const& lhs, T const& rhs ) {
|
||||
return lhs.m_value > static_cast<double>(rhs) || lhs == rhs;
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
Approx& epsilon( T const& newEpsilon ) {
|
||||
constexpr Approx& epsilon( T const& newEpsilon ) {
|
||||
const auto epsilonAsDouble = static_cast<double>(newEpsilon);
|
||||
setEpsilon(epsilonAsDouble);
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
Approx& margin( T const& newMargin ) {
|
||||
constexpr Approx& margin( T const& newMargin ) {
|
||||
const auto marginAsDouble = static_cast<double>(newMargin);
|
||||
setMargin(marginAsDouble);
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
|
||||
Approx& scale( T const& newScale ) {
|
||||
constexpr Approx& scale( T const& newScale ) {
|
||||
m_scale = static_cast<double>(newScale);
|
||||
return *this;
|
||||
}
|
||||
@@ -114,8 +155,12 @@ namespace Catch {
|
||||
};
|
||||
|
||||
namespace literals {
|
||||
Approx operator ""_a(long double val);
|
||||
Approx operator ""_a(unsigned long long val);
|
||||
constexpr Approx operator ""_a(long double val) {
|
||||
return Approx(val);
|
||||
}
|
||||
constexpr Approx operator ""_a(unsigned long long val) {
|
||||
return Approx(val);
|
||||
}
|
||||
} // end namespace literals
|
||||
|
||||
template<>
|
||||
|
@@ -107,14 +107,16 @@ namespace Catch {
|
||||
|
||||
// Insert the default reporter if user hasn't asked for a specific one
|
||||
if ( m_data.reporterSpecifications.empty() ) {
|
||||
m_data.reporterSpecifications.push_back( {
|
||||
#if defined( CATCH_CONFIG_DEFAULT_REPORTER )
|
||||
CATCH_CONFIG_DEFAULT_REPORTER,
|
||||
const auto default_spec = CATCH_CONFIG_DEFAULT_REPORTER;
|
||||
#else
|
||||
"console",
|
||||
const auto default_spec = "console";
|
||||
#endif
|
||||
{}, {}, {}
|
||||
} );
|
||||
auto parsed = parseReporterSpec(default_spec);
|
||||
CATCH_ENFORCE( parsed,
|
||||
"Cannot parse the provided default reporter spec: '"
|
||||
<< default_spec << '\'' );
|
||||
m_data.reporterSpecifications.push_back( std::move( *parsed ) );
|
||||
}
|
||||
|
||||
if ( enableBazelEnvSupport() ) {
|
||||
|
@@ -239,13 +239,13 @@ std::string StringMaker<unsigned char>::convert(unsigned char value) {
|
||||
return ::Catch::Detail::stringify(static_cast<char>(value));
|
||||
}
|
||||
|
||||
int StringMaker<float>::precision = 5;
|
||||
int StringMaker<float>::precision = std::numeric_limits<float>::max_digits10;
|
||||
|
||||
std::string StringMaker<float>::convert(float value) {
|
||||
return Detail::fpToString(value, precision) + 'f';
|
||||
}
|
||||
|
||||
int StringMaker<double>::precision = 10;
|
||||
int StringMaker<double>::precision = std::numeric_limits<double>::max_digits10;
|
||||
|
||||
std::string StringMaker<double>::convert(double value) {
|
||||
return Detail::fpToString(value, precision);
|
||||
|
@@ -36,7 +36,7 @@ namespace Catch {
|
||||
}
|
||||
|
||||
Version const& libraryVersion() {
|
||||
static Version version( 3, 5, 3, "", 0 );
|
||||
static Version version( 3, 6, 0, "", 0 );
|
||||
return version;
|
||||
}
|
||||
|
||||
|
@@ -9,7 +9,7 @@
|
||||
#define CATCH_VERSION_MACROS_HPP_INCLUDED
|
||||
|
||||
#define CATCH_VERSION_MAJOR 3
|
||||
#define CATCH_VERSION_MINOR 5
|
||||
#define CATCH_VERSION_PATCH 3
|
||||
#define CATCH_VERSION_MINOR 6
|
||||
#define CATCH_VERSION_PATCH 0
|
||||
|
||||
#endif // CATCH_VERSION_MACROS_HPP_INCLUDED
|
||||
|
@@ -110,9 +110,11 @@
|
||||
#ifdef __clang__
|
||||
# pragma clang diagnostic push
|
||||
# pragma clang diagnostic ignored "-Wsign-compare"
|
||||
# pragma clang diagnostic ignored "-Wnon-virtual-dtor"
|
||||
#elif defined __GNUC__
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wsign-compare"
|
||||
# pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
|
||||
#endif
|
||||
|
||||
#if defined(CATCH_CPP20_OR_GREATER) && __has_include(<compare>)
|
||||
@@ -125,6 +127,12 @@
|
||||
|
||||
namespace Catch {
|
||||
|
||||
namespace Detail {
|
||||
// This was added in C++20, but we require only C++14 for now.
|
||||
template <typename T>
|
||||
using RemoveCVRef_t = std::remove_cv_t<std::remove_reference_t<T>>;
|
||||
}
|
||||
|
||||
// Note: There is nothing that stops us from extending this,
|
||||
// e.g. to `std::is_scalar`, but the more encompassing
|
||||
// traits are usually also more expensive. For now we
|
||||
@@ -279,7 +287,7 @@ namespace Catch {
|
||||
-> std::enable_if_t< \
|
||||
Detail::conjunction<Detail::is_##id##_comparable<LhsT, RhsT>, \
|
||||
Detail::negation<capture_by_value< \
|
||||
std::remove_reference_t<RhsT>>>>::value, \
|
||||
Detail::RemoveCVRef_t<RhsT>>>>::value, \
|
||||
BinaryExpr<LhsT, RhsT const&>> { \
|
||||
return { \
|
||||
static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
|
||||
@@ -333,7 +341,7 @@ namespace Catch {
|
||||
-> std::enable_if_t< \
|
||||
Detail::conjunction<Detail::is_##id##_comparable<LhsT, RhsT>, \
|
||||
Detail::negation<capture_by_value< \
|
||||
std::remove_reference_t<RhsT>>>>::value, \
|
||||
Detail::RemoveCVRef_t<RhsT>>>>::value, \
|
||||
BinaryExpr<LhsT, RhsT const&>> { \
|
||||
return { \
|
||||
static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
|
||||
@@ -383,7 +391,7 @@ namespace Catch {
|
||||
template <typename RhsT> \
|
||||
constexpr friend auto operator op( ExprLhs&& lhs, RhsT&& rhs ) \
|
||||
-> std::enable_if_t< \
|
||||
!capture_by_value<std::remove_reference_t<RhsT>>::value, \
|
||||
!capture_by_value<Detail::RemoveCVRef_t<RhsT>>::value, \
|
||||
BinaryExpr<LhsT, RhsT const&>> { \
|
||||
return { \
|
||||
static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
|
||||
@@ -423,8 +431,7 @@ namespace Catch {
|
||||
|
||||
struct Decomposer {
|
||||
template <typename T,
|
||||
std::enable_if_t<
|
||||
!capture_by_value<std::remove_reference_t<T>>::value,
|
||||
std::enable_if_t<!capture_by_value<Detail::RemoveCVRef_t<T>>::value,
|
||||
int> = 0>
|
||||
constexpr friend auto operator <= ( Decomposer &&, T && lhs ) -> ExprLhs<T const&> {
|
||||
return ExprLhs<const T&>{ lhs };
|
||||
|
@@ -11,6 +11,9 @@
|
||||
// See e.g.:
|
||||
// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html
|
||||
#ifdef __APPLE__
|
||||
# ifndef __has_extension
|
||||
# define __has_extension(x) 0
|
||||
# endif
|
||||
# include <TargetConditionals.h>
|
||||
# if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \
|
||||
(defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1)
|
||||
|
@@ -14,6 +14,34 @@
|
||||
#include <cstdint>
|
||||
#include <type_traits>
|
||||
|
||||
// Note: We use the usual enable-disable-autodetect dance here even though
|
||||
// we do not support these in CMake configuration options (yet?).
|
||||
// It is highly unlikely that we will need to make these actually
|
||||
// user-configurable, but this will make it simpler if weend up needing
|
||||
// it, and it provides an escape hatch to the users who need it.
|
||||
#if defined( __SIZEOF_INT128__ )
|
||||
# define CATCH_CONFIG_INTERNAL_UINT128
|
||||
// Unlike GCC, MSVC does not polyfill umul as mulh + mul pair on ARM machines.
|
||||
// Currently we do not bother doing this ourselves, but we could if it became
|
||||
// important for perf.
|
||||
#elif defined( _MSC_VER ) && defined( _M_X64 )
|
||||
# define CATCH_CONFIG_INTERNAL_MSVC_UMUL128
|
||||
#endif
|
||||
|
||||
#if defined( CATCH_CONFIG_INTERNAL_UINT128 ) && \
|
||||
!defined( CATCH_CONFIG_NO_UINT128 ) && \
|
||||
!defined( CATCH_CONFIG_UINT128 )
|
||||
#define CATCH_CONFIG_UINT128
|
||||
#endif
|
||||
|
||||
#if defined( CATCH_CONFIG_INTERNAL_MSVC_UMUL128 ) && \
|
||||
!defined( CATCH_CONFIG_NO_MSVC_UMUL128 ) && \
|
||||
!defined( CATCH_CONFIG_MSVC_UMUL128 )
|
||||
# define CATCH_CONFIG_MSVC_UMUL128
|
||||
# include <intrin.h>
|
||||
#endif
|
||||
|
||||
|
||||
namespace Catch {
|
||||
namespace Detail {
|
||||
|
||||
@@ -46,59 +74,52 @@ namespace Catch {
|
||||
}
|
||||
};
|
||||
|
||||
// Returns 128 bit result of multiplying lhs and rhs
|
||||
/**
|
||||
* Returns 128 bit result of lhs * rhs using portable C++ code
|
||||
*
|
||||
* This implementation is almost twice as fast as naive long multiplication,
|
||||
* and unlike intrinsic-based approach, it supports constexpr evaluation.
|
||||
*/
|
||||
constexpr ExtendedMultResult<std::uint64_t>
|
||||
extendedMult( std::uint64_t lhs, std::uint64_t rhs ) {
|
||||
// We use the simple long multiplication approach for
|
||||
// correctness, we can use platform specific builtins
|
||||
// for performance later.
|
||||
|
||||
// Split the lhs and rhs into two 32bit "digits", so that we can
|
||||
// do 64 bit arithmetic to handle carry bits.
|
||||
// 32b 32b 32b 32b
|
||||
// lhs L1 L2
|
||||
// * rhs R1 R2
|
||||
// ------------------------
|
||||
// | R2 * L2 |
|
||||
// | R2 * L1 |
|
||||
// | R1 * L2 |
|
||||
// | R1 * L1 |
|
||||
// -------------------------
|
||||
// | a | b | c | d |
|
||||
|
||||
extendedMultPortable(std::uint64_t lhs, std::uint64_t rhs) {
|
||||
#define CarryBits( x ) ( x >> 32 )
|
||||
#define Digits( x ) ( x & 0xFF'FF'FF'FF )
|
||||
std::uint64_t lhs_low = Digits( lhs );
|
||||
std::uint64_t rhs_low = Digits( rhs );
|
||||
std::uint64_t low_low = ( lhs_low * rhs_low );
|
||||
std::uint64_t high_high = CarryBits( lhs ) * CarryBits( rhs );
|
||||
|
||||
auto r2l2 = Digits( rhs ) * Digits( lhs );
|
||||
auto r2l1 = Digits( rhs ) * CarryBits( lhs );
|
||||
auto r1l2 = CarryBits( rhs ) * Digits( lhs );
|
||||
auto r1l1 = CarryBits( rhs ) * CarryBits( lhs );
|
||||
|
||||
// Sum to columns first
|
||||
auto d = Digits( r2l2 );
|
||||
auto c = CarryBits( r2l2 ) + Digits( r2l1 ) + Digits( r1l2 );
|
||||
auto b = CarryBits( r2l1 ) + CarryBits( r1l2 ) + Digits( r1l1 );
|
||||
auto a = CarryBits( r1l1 );
|
||||
|
||||
// Propagate carries between columns
|
||||
c += CarryBits( d );
|
||||
b += CarryBits( c );
|
||||
a += CarryBits( b );
|
||||
|
||||
// Remove the used carries
|
||||
c = Digits( c );
|
||||
b = Digits( b );
|
||||
a = Digits( a );
|
||||
// We add in carry bits from low-low already
|
||||
std::uint64_t high_low =
|
||||
( CarryBits( lhs ) * rhs_low ) + CarryBits( low_low );
|
||||
// Note that we can add only low bits from high_low, to avoid
|
||||
// overflow with large inputs
|
||||
std::uint64_t low_high =
|
||||
( lhs_low * CarryBits( rhs ) ) + Digits( high_low );
|
||||
|
||||
return { high_high + CarryBits( high_low ) + CarryBits( low_high ),
|
||||
( low_high << 32 ) | Digits( low_low ) };
|
||||
#undef CarryBits
|
||||
#undef Digits
|
||||
|
||||
return {
|
||||
a << 32 | b, // upper 64 bits
|
||||
c << 32 | d // lower 64 bits
|
||||
};
|
||||
}
|
||||
|
||||
//! Returns 128 bit result of lhs * rhs
|
||||
inline ExtendedMultResult<std::uint64_t>
|
||||
extendedMult( std::uint64_t lhs, std::uint64_t rhs ) {
|
||||
#if defined( CATCH_CONFIG_UINT128 )
|
||||
auto result = __uint128_t( lhs ) * __uint128_t( rhs );
|
||||
return { static_cast<std::uint64_t>( result >> 64 ),
|
||||
static_cast<std::uint64_t>( result ) };
|
||||
#elif defined( CATCH_CONFIG_MSVC_UMUL128 )
|
||||
std::uint64_t high;
|
||||
std::uint64_t low = _umul128( lhs, rhs, &high );
|
||||
return { high, low };
|
||||
#else
|
||||
return extendedMultPortable( lhs, rhs );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
template <typename UInt>
|
||||
constexpr ExtendedMultResult<UInt> extendedMult( UInt lhs, UInt rhs ) {
|
||||
static_assert( std::is_unsigned<UInt>::value,
|
||||
|
@@ -450,6 +450,13 @@ namespace Catch {
|
||||
assertionEnded(CATCH_MOVE(result) );
|
||||
resetAssertionInfo();
|
||||
|
||||
// Best effort cleanup for sections that have not been destructed yet
|
||||
// Since this is a fatal error, we have not had and won't have the opportunity to destruct them properly
|
||||
while (!m_activeSections.empty()) {
|
||||
auto nl = m_activeSections.back()->nameAndLocation();
|
||||
SectionEndInfo endInfo{ SectionInfo(CATCH_MOVE(nl.location), CATCH_MOVE(nl.name)), {}, 0.0 };
|
||||
sectionEndedEarly(CATCH_MOVE(endInfo));
|
||||
}
|
||||
handleUnfinishedSections();
|
||||
|
||||
// Recreate section for test case (as we will lose the one that was in scope)
|
||||
|
@@ -123,6 +123,8 @@ namespace Catch {
|
||||
return getRegistryHub().getTestCaseRegistry().getAllTestsSorted( config );
|
||||
}
|
||||
|
||||
TestRegistry::~TestRegistry() = default;
|
||||
|
||||
void TestRegistry::registerTest(Detail::unique_ptr<TestCaseInfo> testInfo, Detail::unique_ptr<ITestInvoker> testInvoker) {
|
||||
m_handles.emplace_back(testInfo.get(), testInvoker.get());
|
||||
m_viewed_test_infos.push_back(testInfo.get());
|
||||
|
@@ -36,6 +36,8 @@ namespace Catch {
|
||||
std::vector<TestCaseHandle> const& getAllTests() const override;
|
||||
std::vector<TestCaseHandle> const& getAllTestsSorted( IConfig const& config ) const override;
|
||||
|
||||
~TestRegistry() override; // = default
|
||||
|
||||
private:
|
||||
std::vector<Detail::unique_ptr<TestCaseInfo>> m_owned_test_infos;
|
||||
// Keeps a materialized vector for `getAllInfos`.
|
||||
|
@@ -26,117 +26,228 @@ namespace {
|
||||
return std::memchr( chars, c, sizeof( chars ) - 1 ) != nullptr;
|
||||
}
|
||||
|
||||
bool isBoundary( std::string const& line, size_t at ) {
|
||||
assert( at > 0 );
|
||||
assert( at <= line.size() );
|
||||
|
||||
return at == line.size() ||
|
||||
( isWhitespace( line[at] ) && !isWhitespace( line[at - 1] ) ) ||
|
||||
isBreakableBefore( line[at] ) ||
|
||||
isBreakableAfter( line[at - 1] );
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace Catch {
|
||||
namespace TextFlow {
|
||||
void AnsiSkippingString::preprocessString() {
|
||||
for ( auto it = m_string.begin(); it != m_string.end(); ) {
|
||||
// try to read through an ansi sequence
|
||||
while ( it != m_string.end() && *it == '\033' &&
|
||||
it + 1 != m_string.end() && *( it + 1 ) == '[' ) {
|
||||
auto cursor = it + 2;
|
||||
while ( cursor != m_string.end() &&
|
||||
( isdigit( *cursor ) || *cursor == ';' ) ) {
|
||||
++cursor;
|
||||
}
|
||||
if ( cursor == m_string.end() || *cursor != 'm' ) {
|
||||
break;
|
||||
}
|
||||
// 'm' -> 0xff
|
||||
*cursor = AnsiSkippingString::sentinel;
|
||||
// if we've read an ansi sequence, set the iterator and
|
||||
// return to the top of the loop
|
||||
it = cursor + 1;
|
||||
}
|
||||
if ( it != m_string.end() ) {
|
||||
++m_size;
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AnsiSkippingString::AnsiSkippingString( std::string const& text ):
|
||||
m_string( text ) {
|
||||
preprocessString();
|
||||
}
|
||||
|
||||
AnsiSkippingString::AnsiSkippingString( std::string&& text ):
|
||||
m_string( CATCH_MOVE( text ) ) {
|
||||
preprocessString();
|
||||
}
|
||||
|
||||
AnsiSkippingString::const_iterator AnsiSkippingString::begin() const {
|
||||
return const_iterator( m_string );
|
||||
}
|
||||
|
||||
AnsiSkippingString::const_iterator AnsiSkippingString::end() const {
|
||||
return const_iterator( m_string, const_iterator::EndTag{} );
|
||||
}
|
||||
|
||||
std::string AnsiSkippingString::substring( const_iterator begin,
|
||||
const_iterator end ) const {
|
||||
// There's one caveat here to an otherwise simple substring: when
|
||||
// making a begin iterator we might have skipped ansi sequences at
|
||||
// the start. If `begin` here is a begin iterator, skipped over
|
||||
// initial ansi sequences, we'll use the true beginning of the
|
||||
// string. Lastly: We need to transform any chars we replaced with
|
||||
// 0xff back to 'm'
|
||||
auto str = std::string( begin == this->begin() ? m_string.begin()
|
||||
: begin.m_it,
|
||||
end.m_it );
|
||||
std::transform( str.begin(), str.end(), str.begin(), []( char c ) {
|
||||
return c == AnsiSkippingString::sentinel ? 'm' : c;
|
||||
} );
|
||||
return str;
|
||||
}
|
||||
|
||||
void AnsiSkippingString::const_iterator::tryParseAnsiEscapes() {
|
||||
// check if we've landed on an ansi sequence, and if so read through
|
||||
// it
|
||||
while ( m_it != m_string->end() && *m_it == '\033' &&
|
||||
m_it + 1 != m_string->end() && *( m_it + 1 ) == '[' ) {
|
||||
auto cursor = m_it + 2;
|
||||
while ( cursor != m_string->end() &&
|
||||
( isdigit( *cursor ) || *cursor == ';' ) ) {
|
||||
++cursor;
|
||||
}
|
||||
if ( cursor == m_string->end() ||
|
||||
*cursor != AnsiSkippingString::sentinel ) {
|
||||
break;
|
||||
}
|
||||
// if we've read an ansi sequence, set the iterator and
|
||||
// return to the top of the loop
|
||||
m_it = cursor + 1;
|
||||
}
|
||||
}
|
||||
|
||||
void AnsiSkippingString::const_iterator::advance() {
|
||||
assert( m_it != m_string->end() );
|
||||
m_it++;
|
||||
tryParseAnsiEscapes();
|
||||
}
|
||||
|
||||
void AnsiSkippingString::const_iterator::unadvance() {
|
||||
assert( m_it != m_string->begin() );
|
||||
m_it--;
|
||||
// if *m_it is 0xff, scan back to the \033 and then m_it-- once more
|
||||
// (and repeat check)
|
||||
while ( *m_it == AnsiSkippingString::sentinel ) {
|
||||
while ( *m_it != '\033' ) {
|
||||
assert( m_it != m_string->begin() );
|
||||
m_it--;
|
||||
}
|
||||
// if this happens, we must have been a begin iterator that had
|
||||
// skipped over ansi sequences at the start of a string
|
||||
assert( m_it != m_string->begin() );
|
||||
assert( *m_it == '\033' );
|
||||
m_it--;
|
||||
}
|
||||
}
|
||||
|
||||
static bool isBoundary( AnsiSkippingString const& line,
|
||||
AnsiSkippingString::const_iterator it ) {
|
||||
return it == line.end() ||
|
||||
( isWhitespace( *it ) &&
|
||||
!isWhitespace( *it.oneBefore() ) ) ||
|
||||
isBreakableBefore( *it ) ||
|
||||
isBreakableAfter( *it.oneBefore() );
|
||||
}
|
||||
|
||||
void Column::const_iterator::calcLength() {
|
||||
m_addHyphen = false;
|
||||
m_parsedTo = m_lineStart;
|
||||
AnsiSkippingString const& current_line = m_column.m_string;
|
||||
|
||||
std::string const& current_line = m_column.m_string;
|
||||
if ( current_line[m_lineStart] == '\n' ) {
|
||||
++m_parsedTo;
|
||||
if ( m_parsedTo == current_line.end() ) {
|
||||
m_lineEnd = m_parsedTo;
|
||||
return;
|
||||
}
|
||||
|
||||
assert( m_lineStart != current_line.end() );
|
||||
if ( *m_lineStart == '\n' ) { ++m_parsedTo; }
|
||||
|
||||
const auto maxLineLength = m_column.m_width - indentSize();
|
||||
const auto maxParseTo = std::min(current_line.size(), m_lineStart + maxLineLength);
|
||||
while ( m_parsedTo < maxParseTo &&
|
||||
current_line[m_parsedTo] != '\n' ) {
|
||||
std::size_t lineLength = 0;
|
||||
while ( m_parsedTo != current_line.end() &&
|
||||
lineLength < maxLineLength && *m_parsedTo != '\n' ) {
|
||||
++m_parsedTo;
|
||||
++lineLength;
|
||||
}
|
||||
|
||||
// If we encountered a newline before the column is filled,
|
||||
// then we linebreak at the newline and consider this line
|
||||
// finished.
|
||||
if ( m_parsedTo < m_lineStart + maxLineLength ) {
|
||||
m_lineLength = m_parsedTo - m_lineStart;
|
||||
if ( lineLength < maxLineLength ) {
|
||||
m_lineEnd = m_parsedTo;
|
||||
} else {
|
||||
// Look for a natural linebreak boundary in the column
|
||||
// (We look from the end, so that the first found boundary is
|
||||
// the right one)
|
||||
size_t newLineLength = maxLineLength;
|
||||
while ( newLineLength > 0 && !isBoundary( current_line, m_lineStart + newLineLength ) ) {
|
||||
--newLineLength;
|
||||
m_lineEnd = m_parsedTo;
|
||||
while ( lineLength > 0 &&
|
||||
!isBoundary( current_line, m_lineEnd ) ) {
|
||||
--lineLength;
|
||||
--m_lineEnd;
|
||||
}
|
||||
while ( newLineLength > 0 &&
|
||||
isWhitespace( current_line[m_lineStart + newLineLength - 1] ) ) {
|
||||
--newLineLength;
|
||||
while ( lineLength > 0 &&
|
||||
isWhitespace( *m_lineEnd.oneBefore() ) ) {
|
||||
--lineLength;
|
||||
--m_lineEnd;
|
||||
}
|
||||
|
||||
// If we found one, then that is where we linebreak
|
||||
if ( newLineLength > 0 ) {
|
||||
m_lineLength = newLineLength;
|
||||
} else {
|
||||
// Otherwise we have to split text with a hyphen
|
||||
// If we found one, then that is where we linebreak, otherwise
|
||||
// we have to split text with a hyphen
|
||||
if ( lineLength == 0 ) {
|
||||
m_addHyphen = true;
|
||||
m_lineLength = maxLineLength - 1;
|
||||
m_lineEnd = m_parsedTo.oneBefore();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
size_t Column::const_iterator::indentSize() const {
|
||||
auto initial =
|
||||
m_lineStart == 0 ? m_column.m_initialIndent : std::string::npos;
|
||||
auto initial = m_lineStart == m_column.m_string.begin()
|
||||
? m_column.m_initialIndent
|
||||
: std::string::npos;
|
||||
return initial == std::string::npos ? m_column.m_indent : initial;
|
||||
}
|
||||
|
||||
std::string
|
||||
Column::const_iterator::addIndentAndSuffix( size_t position,
|
||||
size_t length ) const {
|
||||
std::string Column::const_iterator::addIndentAndSuffix(
|
||||
AnsiSkippingString::const_iterator start,
|
||||
AnsiSkippingString::const_iterator end ) const {
|
||||
std::string ret;
|
||||
const auto desired_indent = indentSize();
|
||||
ret.reserve( desired_indent + length + m_addHyphen );
|
||||
// ret.reserve( desired_indent + (end - start) + m_addHyphen );
|
||||
ret.append( desired_indent, ' ' );
|
||||
ret.append( m_column.m_string, position, length );
|
||||
if ( m_addHyphen ) {
|
||||
ret.push_back( '-' );
|
||||
}
|
||||
// ret.append( start, end );
|
||||
ret += m_column.m_string.substring( start, end );
|
||||
if ( m_addHyphen ) { ret.push_back( '-' ); }
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Column::const_iterator::const_iterator( Column const& column ): m_column( column ) {
|
||||
Column::const_iterator::const_iterator( Column const& column ):
|
||||
m_column( column ),
|
||||
m_lineStart( column.m_string.begin() ),
|
||||
m_lineEnd( column.m_string.begin() ),
|
||||
m_parsedTo( column.m_string.begin() ) {
|
||||
assert( m_column.m_width > m_column.m_indent );
|
||||
assert( m_column.m_initialIndent == std::string::npos ||
|
||||
m_column.m_width > m_column.m_initialIndent );
|
||||
calcLength();
|
||||
if ( m_lineLength == 0 ) {
|
||||
m_lineStart = m_column.m_string.size();
|
||||
if ( m_lineStart == m_lineEnd ) {
|
||||
m_lineStart = m_column.m_string.end();
|
||||
}
|
||||
}
|
||||
|
||||
std::string Column::const_iterator::operator*() const {
|
||||
assert( m_lineStart <= m_parsedTo );
|
||||
return addIndentAndSuffix( m_lineStart, m_lineLength );
|
||||
return addIndentAndSuffix( m_lineStart, m_lineEnd );
|
||||
}
|
||||
|
||||
Column::const_iterator& Column::const_iterator::operator++() {
|
||||
m_lineStart += m_lineLength;
|
||||
std::string const& current_line = m_column.m_string;
|
||||
if ( m_lineStart < current_line.size() && current_line[m_lineStart] == '\n' ) {
|
||||
m_lineStart += 1;
|
||||
m_lineStart = m_lineEnd;
|
||||
AnsiSkippingString const& current_line = m_column.m_string;
|
||||
if ( m_lineStart != current_line.end() && *m_lineStart == '\n' ) {
|
||||
m_lineStart++;
|
||||
} else {
|
||||
while ( m_lineStart < current_line.size() &&
|
||||
isWhitespace( current_line[m_lineStart] ) ) {
|
||||
while ( m_lineStart != current_line.end() &&
|
||||
isWhitespace( *m_lineStart ) ) {
|
||||
++m_lineStart;
|
||||
}
|
||||
}
|
||||
|
||||
if ( m_lineStart != current_line.size() ) {
|
||||
calcLength();
|
||||
}
|
||||
if ( m_lineStart != current_line.end() ) { calcLength(); }
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@@ -20,6 +20,107 @@ namespace Catch {
|
||||
|
||||
class Columns;
|
||||
|
||||
/**
|
||||
* Abstraction for a string with ansi escape sequences that
|
||||
* automatically skips over escapes when iterating. Only graphical
|
||||
* escape sequences are considered.
|
||||
*
|
||||
* Internal representation:
|
||||
* An escape sequence looks like \033[39;49m
|
||||
* We need bidirectional iteration and the unbound length of escape
|
||||
* sequences poses a problem for operator-- To make this work we'll
|
||||
* replace the last `m` with a 0xff (this is a codepoint that won't have
|
||||
* any utf-8 meaning).
|
||||
*/
|
||||
class AnsiSkippingString {
|
||||
std::string m_string;
|
||||
std::size_t m_size = 0;
|
||||
|
||||
// perform 0xff replacement and calculate m_size
|
||||
void preprocessString();
|
||||
|
||||
public:
|
||||
class const_iterator;
|
||||
using iterator = const_iterator;
|
||||
// note: must be u-suffixed or this will cause a "truncation of
|
||||
// constant value" warning on MSVC
|
||||
static constexpr char sentinel = static_cast<char>( 0xffu );
|
||||
|
||||
explicit AnsiSkippingString( std::string const& text );
|
||||
explicit AnsiSkippingString( std::string&& text );
|
||||
|
||||
const_iterator begin() const;
|
||||
const_iterator end() const;
|
||||
|
||||
size_t size() const { return m_size; }
|
||||
|
||||
std::string substring( const_iterator begin,
|
||||
const_iterator end ) const;
|
||||
};
|
||||
|
||||
class AnsiSkippingString::const_iterator {
|
||||
friend AnsiSkippingString;
|
||||
struct EndTag {};
|
||||
|
||||
const std::string* m_string;
|
||||
std::string::const_iterator m_it;
|
||||
|
||||
explicit const_iterator( const std::string& string, EndTag ):
|
||||
m_string( &string ), m_it( string.end() ) {}
|
||||
|
||||
void tryParseAnsiEscapes();
|
||||
void advance();
|
||||
void unadvance();
|
||||
|
||||
public:
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using value_type = char;
|
||||
using pointer = value_type*;
|
||||
using reference = value_type&;
|
||||
using iterator_category = std::bidirectional_iterator_tag;
|
||||
|
||||
explicit const_iterator( const std::string& string ):
|
||||
m_string( &string ), m_it( string.begin() ) {
|
||||
tryParseAnsiEscapes();
|
||||
}
|
||||
|
||||
char operator*() const { return *m_it; }
|
||||
|
||||
const_iterator& operator++() {
|
||||
advance();
|
||||
return *this;
|
||||
}
|
||||
const_iterator operator++( int ) {
|
||||
iterator prev( *this );
|
||||
operator++();
|
||||
return prev;
|
||||
}
|
||||
const_iterator& operator--() {
|
||||
unadvance();
|
||||
return *this;
|
||||
}
|
||||
const_iterator operator--( int ) {
|
||||
iterator prev( *this );
|
||||
operator--();
|
||||
return prev;
|
||||
}
|
||||
|
||||
bool operator==( const_iterator const& other ) const {
|
||||
return m_it == other.m_it;
|
||||
}
|
||||
bool operator!=( const_iterator const& other ) const {
|
||||
return !operator==( other );
|
||||
}
|
||||
bool operator<=( const_iterator const& other ) const {
|
||||
return m_it <= other.m_it;
|
||||
}
|
||||
|
||||
const_iterator oneBefore() const {
|
||||
auto it = *this;
|
||||
return --it;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Represents a column of text with specific width and indentation
|
||||
*
|
||||
@@ -29,10 +130,11 @@ namespace Catch {
|
||||
*/
|
||||
class Column {
|
||||
// String to be written out
|
||||
std::string m_string;
|
||||
AnsiSkippingString m_string;
|
||||
// Width of the column for linebreaking
|
||||
size_t m_width = CATCH_CONFIG_CONSOLE_WIDTH - 1;
|
||||
// Indentation of other lines (including first if initial indent is unset)
|
||||
// Indentation of other lines (including first if initial indent is
|
||||
// unset)
|
||||
size_t m_indent = 0;
|
||||
// Indentation of the first line
|
||||
size_t m_initialIndent = std::string::npos;
|
||||
@@ -47,16 +149,19 @@ namespace Catch {
|
||||
|
||||
Column const& m_column;
|
||||
// Where does the current line start?
|
||||
size_t m_lineStart = 0;
|
||||
AnsiSkippingString::const_iterator m_lineStart;
|
||||
// How long should the current line be?
|
||||
size_t m_lineLength = 0;
|
||||
AnsiSkippingString::const_iterator m_lineEnd;
|
||||
// How far have we checked the string to iterate?
|
||||
size_t m_parsedTo = 0;
|
||||
AnsiSkippingString::const_iterator m_parsedTo;
|
||||
// Should a '-' be appended to the line?
|
||||
bool m_addHyphen = false;
|
||||
|
||||
const_iterator( Column const& column, EndTag ):
|
||||
m_column( column ), m_lineStart( m_column.m_string.size() ) {}
|
||||
m_column( column ),
|
||||
m_lineStart( m_column.m_string.end() ),
|
||||
m_lineEnd( column.m_string.end() ),
|
||||
m_parsedTo( column.m_string.end() ) {}
|
||||
|
||||
// Calculates the length of the current line
|
||||
void calcLength();
|
||||
@@ -66,8 +171,9 @@ namespace Catch {
|
||||
|
||||
// Creates an indented and (optionally) suffixed string from
|
||||
// current iterator position, indentation and length.
|
||||
std::string addIndentAndSuffix( size_t position,
|
||||
size_t length ) const;
|
||||
std::string addIndentAndSuffix(
|
||||
AnsiSkippingString::const_iterator start,
|
||||
AnsiSkippingString::const_iterator end ) const;
|
||||
|
||||
public:
|
||||
using difference_type = std::ptrdiff_t;
|
||||
@@ -84,7 +190,8 @@ namespace Catch {
|
||||
const_iterator operator++( int );
|
||||
|
||||
bool operator==( const_iterator const& other ) const {
|
||||
return m_lineStart == other.m_lineStart && &m_column == &other.m_column;
|
||||
return m_lineStart == other.m_lineStart &&
|
||||
&m_column == &other.m_column;
|
||||
}
|
||||
bool operator!=( const_iterator const& other ) const {
|
||||
return !operator==( other );
|
||||
@@ -125,7 +232,9 @@ namespace Catch {
|
||||
|
||||
size_t width() const { return m_width; }
|
||||
const_iterator begin() const { return const_iterator( *this ); }
|
||||
const_iterator end() const { return { *this, const_iterator::EndTag{} }; }
|
||||
const_iterator end() const {
|
||||
return { *this, const_iterator::EndTag{} };
|
||||
}
|
||||
|
||||
friend std::ostream& operator<<( std::ostream& os,
|
||||
Column const& col );
|
||||
|
@@ -13,22 +13,6 @@
|
||||
|
||||
namespace Catch {
|
||||
|
||||
namespace Detail {
|
||||
// Indirection to enable make_unsigned<bool> behaviour.
|
||||
template <typename T>
|
||||
struct make_unsigned {
|
||||
using type = std::make_unsigned_t<T>;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct make_unsigned<bool> {
|
||||
using type = uint8_t;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
using make_unsigned_t = typename make_unsigned<T>::type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of uniform distribution on integers.
|
||||
*
|
||||
@@ -44,7 +28,7 @@ template <typename IntegerType>
|
||||
class uniform_integer_distribution {
|
||||
static_assert(std::is_integral<IntegerType>::value, "...");
|
||||
|
||||
using UnsignedIntegerType = Detail::make_unsigned_t<IntegerType>;
|
||||
using UnsignedIntegerType = Detail::SizedUnsignedType_t<sizeof(IntegerType)>;
|
||||
|
||||
// Only the left bound is stored, and we store it converted to its
|
||||
// unsigned image. This avoids having to do the conversions inside
|
||||
|
@@ -176,7 +176,7 @@ namespace Detail {
|
||||
|
||||
std::string WithinRelMatcher::describe() const {
|
||||
Catch::ReusableStringStream sstr;
|
||||
sstr << "and " << m_target << " are within " << m_epsilon * 100. << "% of each other";
|
||||
sstr << "and " << ::Catch::Detail::stringify(m_target) << " are within " << m_epsilon * 100. << "% of each other";
|
||||
return sstr.str();
|
||||
}
|
||||
|
||||
|
@@ -18,6 +18,16 @@
|
||||
|
||||
namespace Catch {
|
||||
|
||||
#ifdef __clang__
|
||||
# pragma clang diagnostic push
|
||||
# pragma clang diagnostic ignored "-Wsign-compare"
|
||||
# pragma clang diagnostic ignored "-Wnon-virtual-dtor"
|
||||
#elif defined __GNUC__
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wsign-compare"
|
||||
# pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
|
||||
#endif
|
||||
|
||||
template<typename ArgT, typename MatcherT>
|
||||
class MatchExpr : public ITransientExpression {
|
||||
ArgT && m_arg;
|
||||
@@ -36,6 +46,13 @@ namespace Catch {
|
||||
}
|
||||
};
|
||||
|
||||
#ifdef __clang__
|
||||
# pragma clang diagnostic pop
|
||||
#elif defined __GNUC__
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
|
||||
namespace Matchers {
|
||||
template <typename ArgT>
|
||||
class MatcherBase;
|
||||
|
83
tests/BUILD.bazel
Normal file
83
tests/BUILD.bazel
Normal file
@@ -0,0 +1,83 @@
|
||||
load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
cc_library(
|
||||
name = "catch2_self_test_helper",
|
||||
srcs = ["SelfTest/helpers/parse_test_spec.cpp"],
|
||||
hdrs = [
|
||||
"SelfTest/helpers/parse_test_spec.hpp",
|
||||
"SelfTest/helpers/range_test_helpers.hpp",
|
||||
"SelfTest/helpers/type_with_lit_0_comparisons.hpp",
|
||||
],
|
||||
includes = ["SelfTest"],
|
||||
deps = [
|
||||
"//:catch2",
|
||||
],
|
||||
)
|
||||
|
||||
cc_test(
|
||||
name = "catch2_self_test",
|
||||
size = "small",
|
||||
srcs = [
|
||||
"SelfTest/IntrospectiveTests/Algorithms.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/Clara.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/CmdLine.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/CmdLineHelpers.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/ColourImpl.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/Details.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/FloatingPoint.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/Integer.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/InternalBenchmark.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/Parse.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/PartTracker.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/RandomNumberGeneration.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/Reporters.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/Sharding.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/Stream.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/String.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/StringManip.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/Tag.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/TestCaseInfoHasher.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/TestSpec.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/TestSpecParser.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/TextFlow.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/ToString.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/Traits.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/UniquePtr.tests.cpp",
|
||||
"SelfTest/IntrospectiveTests/Xml.tests.cpp",
|
||||
"SelfTest/TestRegistrations.cpp",
|
||||
"SelfTest/TimingTests/Sleep.tests.cpp",
|
||||
"SelfTest/UsageTests/Approx.tests.cpp",
|
||||
"SelfTest/UsageTests/BDD.tests.cpp",
|
||||
"SelfTest/UsageTests/Benchmark.tests.cpp",
|
||||
"SelfTest/UsageTests/Class.tests.cpp",
|
||||
"SelfTest/UsageTests/Compilation.tests.cpp",
|
||||
"SelfTest/UsageTests/Condition.tests.cpp",
|
||||
"SelfTest/UsageTests/Decomposition.tests.cpp",
|
||||
"SelfTest/UsageTests/EnumToString.tests.cpp",
|
||||
"SelfTest/UsageTests/Exception.tests.cpp",
|
||||
"SelfTest/UsageTests/Generators.tests.cpp",
|
||||
"SelfTest/UsageTests/Matchers.tests.cpp",
|
||||
"SelfTest/UsageTests/MatchersRanges.tests.cpp",
|
||||
"SelfTest/UsageTests/Message.tests.cpp",
|
||||
"SelfTest/UsageTests/Misc.tests.cpp",
|
||||
"SelfTest/UsageTests/ToStringByte.tests.cpp",
|
||||
"SelfTest/UsageTests/ToStringChrono.tests.cpp",
|
||||
"SelfTest/UsageTests/ToStringGeneral.tests.cpp",
|
||||
"SelfTest/UsageTests/ToStringOptional.tests.cpp",
|
||||
"SelfTest/UsageTests/ToStringPair.tests.cpp",
|
||||
"SelfTest/UsageTests/ToStringTuple.tests.cpp",
|
||||
"SelfTest/UsageTests/ToStringVariant.tests.cpp",
|
||||
"SelfTest/UsageTests/ToStringVector.tests.cpp",
|
||||
"SelfTest/UsageTests/ToStringWhich.tests.cpp",
|
||||
"SelfTest/UsageTests/Tricky.tests.cpp",
|
||||
"SelfTest/UsageTests/VariadicMacros.tests.cpp",
|
||||
],
|
||||
deps = [
|
||||
":catch2_self_test_helper",
|
||||
"//:catch2",
|
||||
"//:catch2_main",
|
||||
],
|
||||
)
|
@@ -59,7 +59,7 @@ if (CATCH_BUILD_SURROGATES)
|
||||
)
|
||||
target_link_libraries(Catch2SurrogateTarget PRIVATE Catch2WithMain)
|
||||
|
||||
endif(CATCH_BUILD_SURROGATES)
|
||||
endif()
|
||||
|
||||
####
|
||||
# Temporary workaround for VS toolset changes in 2017
|
||||
@@ -70,7 +70,7 @@ if (MSVC)
|
||||
configure_file(${CATCH_DIR}/tools/misc/SelfTest.vcxproj.user
|
||||
${CMAKE_BINARY_DIR}/tests
|
||||
COPYONLY)
|
||||
endif(MSVC) #Temporary workaround
|
||||
endif() #Temporary workaround
|
||||
|
||||
|
||||
# define the sources of the self test
|
||||
|
@@ -183,7 +183,7 @@ if (NOT WIN32)
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "Catch will terminate"
|
||||
)
|
||||
endif(NOT WIN32)
|
||||
endif()
|
||||
|
||||
|
||||
add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-3 COMMAND DisabledExceptions-CustomHandler "Tests that run")
|
||||
@@ -467,6 +467,18 @@ set_tests_properties(
|
||||
PASS_REGULAR_EXPRESSION "Errors occurred during startup!"
|
||||
)
|
||||
|
||||
add_executable(ReportingCrashWithJunitReporter ${TESTS_DIR}/X36-ReportingCrashWithJunitReporter.cpp)
|
||||
target_link_libraries(ReportingCrashWithJunitReporter PRIVATE Catch2::Catch2WithMain)
|
||||
add_test(
|
||||
NAME Reporters::CrashInJunitReporter
|
||||
COMMAND ${CMAKE_COMMAND} -E env $<TARGET_FILE:ReportingCrashWithJunitReporter> --reporter JUnit
|
||||
)
|
||||
set_tests_properties(
|
||||
Reporters::CrashInJunitReporter
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "</testsuites>"
|
||||
LABELS "uses-signals"
|
||||
)
|
||||
|
||||
add_executable(AssertionStartingEventGoesBeforeAssertionIsEvaluated
|
||||
X20-AssertionStartingEventGoesBeforeAssertionIsEvaluated.cpp
|
||||
@@ -556,6 +568,7 @@ add_executable(AmalgamatedTestCompilation
|
||||
${CATCH_DIR}/extras/catch_amalgamated.cpp
|
||||
)
|
||||
target_include_directories(AmalgamatedTestCompilation PRIVATE ${CATCH_DIR}/extras)
|
||||
target_compile_features(AmalgamatedTestCompilation PRIVATE cxx_std_14)
|
||||
|
||||
add_test(NAME AmalgamatedFileTest COMMAND AmalgamatedTestCompilation)
|
||||
set_tests_properties(
|
||||
|
32
tests/ExtraTests/X36-ReportingCrashWithJunitReporter.cpp
Normal file
32
tests/ExtraTests/X36-ReportingCrashWithJunitReporter.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
// Copyright Catch2 Authors
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE.txt or copy at
|
||||
// https://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
|
||||
/**\file
|
||||
* Checks that signals/SEH within open section does not hard crash JUnit
|
||||
* (or similar reporter) while we are trying to report fatal error.
|
||||
*/
|
||||
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
|
||||
#include <csignal>
|
||||
|
||||
// On Windows we need to send SEH and not signal to test the
|
||||
// RunContext::handleFatalErrorCondition code path
|
||||
#if defined( _MSC_VER )
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
TEST_CASE( "raises signal" ) {
|
||||
SECTION( "section" ) {
|
||||
#if defined( _MSC_VER )
|
||||
RaiseException( 0xC0000005, 0, 0, NULL );
|
||||
#else
|
||||
std::raise( SIGILL );
|
||||
#endif
|
||||
}
|
||||
}
|
@@ -354,7 +354,6 @@ b1!
|
||||
:test-result: FAIL nested sections can be skipped dynamically at runtime
|
||||
:test-result: PASS non streamable - with conv. op
|
||||
:test-result: PASS non-copyable objects
|
||||
:test-result: PASS normal_cdf
|
||||
:test-result: PASS normal_quantile
|
||||
:test-result: PASS not allowed
|
||||
:test-result: FAIL not prints unscoped info from previous failures
|
||||
|
@@ -343,7 +343,6 @@
|
||||
:test-result: FAIL nested sections can be skipped dynamically at runtime
|
||||
:test-result: PASS non streamable - with conv. op
|
||||
:test-result: PASS non-copyable objects
|
||||
:test-result: PASS normal_cdf
|
||||
:test-result: PASS normal_quantile
|
||||
:test-result: PASS not allowed
|
||||
:test-result: FAIL not prints unscoped info from previous failures
|
||||
|
@@ -249,12 +249,22 @@ Misc.tests.cpp:<line number>: passed: x.size() > 0 for: 42 > 0
|
||||
Misc.tests.cpp:<line number>: passed: x.size() > 0 for: 9 > 0
|
||||
Misc.tests.cpp:<line number>: passed: x.size() > 0 for: 42 > 0
|
||||
Misc.tests.cpp:<line number>: passed: x.size() > 0 for: 9 > 0
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.23_a for: 1.23 == Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.22_a for: 1.23 != Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: -d == -1.23_a for: -1.23 == Approx( -1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.2_a .epsilon(.1) for: 1.23 == Approx( 1.2 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.2_a .epsilon(.001) for: 1.23 != Approx( 1.2 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1_a .epsilon(.3) for: 1.23 == Approx( 1.0 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.23_a for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.22_a for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.21999999999999997 )
|
||||
Approx.tests.cpp:<line number>: passed: -d == -1.23_a for: -1.22999999999999998
|
||||
==
|
||||
Approx( -1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.2_a .epsilon(.1) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.19999999999999996 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.2_a .epsilon(.001) for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.19999999999999996 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1_a .epsilon(.3) for: 1.22999999999999998 == Approx( 1.0 )
|
||||
Misc.tests.cpp:<line number>: passed: with 1 message: 'that's not flying - that's failing in style'
|
||||
Misc.tests.cpp:<line number>: failed: explicitly with 1 message: 'to infinity and beyond'
|
||||
Tricky.tests.cpp:<line number>: failed: &o1 == &o2 for: 0x<hex digits> == 0x<hex digits>
|
||||
@@ -263,8 +273,8 @@ Approx.tests.cpp:<line number>: passed: 104.0 != Approx(100.0) for: 104.0 != App
|
||||
Approx.tests.cpp:<line number>: passed: 104.0 == Approx(100.0).margin(5) for: 104.0 == Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 104.0 == Approx(100.0).margin(4) for: 104.0 == Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 104.0 != Approx(100.0).margin(3) for: 104.0 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 100.3 != Approx(100.0) for: 100.3 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 100.3 == Approx(100.0).margin(0.5) for: 100.3 == Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 100.3 != Approx(100.0) for: 100.29999999999999716 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 100.3 == Approx(100.0).margin(0.5) for: 100.29999999999999716 == Approx( 100.0 )
|
||||
Tricky.tests.cpp:<line number>: passed: i++ == 7 for: 7 == 7
|
||||
Tricky.tests.cpp:<line number>: passed: i++ == 8 for: 8 == 8
|
||||
Exception.tests.cpp:<line number>: passed: 1 == 1
|
||||
@@ -282,19 +292,33 @@ Approx.tests.cpp:<line number>: passed: 0.0f == Approx(0.25f).margin(0.25f) for:
|
||||
Approx.tests.cpp:<line number>: passed: 0.5f == Approx(0.25f).margin(0.25f) for: 0.5f == Approx( 0.25 )
|
||||
Approx.tests.cpp:<line number>: passed: 245.0f == Approx(245.25f).margin(0.25f) for: 245.0f == Approx( 245.25 )
|
||||
Approx.tests.cpp:<line number>: passed: 245.5f == Approx(245.25f).margin(0.25f) for: 245.5f == Approx( 245.25 )
|
||||
Approx.tests.cpp:<line number>: passed: divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) for: 3.1428571429 == Approx( 3.141 )
|
||||
Approx.tests.cpp:<line number>: passed: divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) for: 3.1428571429 != Approx( 3.141 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.231 ) for: 1.23 != Approx( 1.231 )
|
||||
Approx.tests.cpp:<line number>: passed: d == Approx( 1.231 ).epsilon( 0.1 ) for: 1.23 == Approx( 1.231 )
|
||||
Approx.tests.cpp:<line number>: passed: 1.23f == Approx( 1.23f ) for: 1.23f == Approx( 1.2300000191 )
|
||||
Approx.tests.cpp:<line number>: passed: divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) for: 3.14285714285714279
|
||||
==
|
||||
Approx( 3.14100000000000001 )
|
||||
Approx.tests.cpp:<line number>: passed: divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) for: 3.14285714285714279
|
||||
!=
|
||||
Approx( 3.14100000000000001 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.231 ) for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.23100000000000009 )
|
||||
Approx.tests.cpp:<line number>: passed: d == Approx( 1.231 ).epsilon( 0.1 ) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.23100000000000009 )
|
||||
Approx.tests.cpp:<line number>: passed: 1.23f == Approx( 1.23f ) for: 1.230000019f
|
||||
==
|
||||
Approx( 1.23000001907348633 )
|
||||
Approx.tests.cpp:<line number>: passed: 0.0f == Approx( 0.0f ) for: 0.0f == Approx( 0.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 1 == Approx( 1 ) for: 1 == Approx( 1.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 0 == Approx( 0 ) for: 0 == Approx( 0.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 1.0f == Approx( 1 ) for: 1.0f == Approx( 1.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 0 == Approx( dZero) for: 0 == Approx( 0.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 0 == Approx( dSmall ).margin( 0.001 ) for: 0 == Approx( 0.00001 )
|
||||
Approx.tests.cpp:<line number>: passed: 1.234f == Approx( dMedium ) for: 1.234f == Approx( 1.234 )
|
||||
Approx.tests.cpp:<line number>: passed: dMedium == Approx( 1.234f ) for: 1.234 == Approx( 1.2339999676 )
|
||||
Approx.tests.cpp:<line number>: passed: 1.234f == Approx( dMedium ) for: 1.233999968f
|
||||
==
|
||||
Approx( 1.23399999999999999 )
|
||||
Approx.tests.cpp:<line number>: passed: dMedium == Approx( 1.234f ) for: 1.23399999999999999
|
||||
==
|
||||
Approx( 1.23399996757507324 )
|
||||
Matchers.tests.cpp:<line number>: passed: 1, Predicate<int>( alwaysTrue, "always true" ) for: 1 matches predicate: "always true"
|
||||
Matchers.tests.cpp:<line number>: passed: 1, !Predicate<int>( alwaysFalse, "always false" ) for: 1 not matches predicate: "always false"
|
||||
Matchers.tests.cpp:<line number>: passed: "Hello olleH", Predicate<std::string>( []( std::string const& str ) -> bool { return str.front() == str.back(); }, "First and last character should be equal" ) for: "Hello olleH" matches predicate: "First and last character should be equal"
|
||||
@@ -509,7 +533,7 @@ Stream.tests.cpp:<line number>: passed: Catch::makeStream( "-" )->isConsole() fo
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom exception - not std'; expression was: throwCustom()
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom exception - not std'; expression was: throwCustom(), std::exception
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom std exception'
|
||||
Approx.tests.cpp:<line number>: passed: 101.000001 != Approx(100).epsilon(0.01) for: 101.000001 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
||||
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(0) == "Value1" for: Value1 == "Value1"
|
||||
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(1) == "Value2" for: Value2 == "Value2"
|
||||
@@ -529,27 +553,39 @@ EnumToString.tests.cpp:<line number>: passed: stringify( EnumClass3::Value4 ) ==
|
||||
EnumToString.tests.cpp:<line number>: passed: stringify( ec3 ) == "Value2" for: "Value2" == "Value2"
|
||||
EnumToString.tests.cpp:<line number>: passed: stringify( Bikeshed::Colours::Red ) == "Red" for: "Red" == "Red"
|
||||
EnumToString.tests.cpp:<line number>: passed: stringify( Bikeshed::Colours::Blue ) == "Blue" for: "Blue" == "Blue"
|
||||
Approx.tests.cpp:<line number>: passed: 101.01 != Approx(100).epsilon(0.01) for: 101.01 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 101.01 != Approx(100).epsilon(0.01) for: 101.01000000000000512 != Approx( 100.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven == 6 for: 7 == 6
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven == 8 for: 7 == 8
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven == 0 for: 7 == 0
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 9.11f ) for: 9.1f == Approx( 9.1099996567 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 9.0f ) for: 9.1f == Approx( 9.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 1 ) for: 9.1f == Approx( 1.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 0 ) for: 9.1f == Approx( 0.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.double_pi == Approx( 3.1415 ) for: 3.1415926535 == Approx( 3.1415 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 9.11f ) for: 9.100000381f
|
||||
==
|
||||
Approx( 9.10999965667724609 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 9.0f ) for: 9.100000381f == Approx( 9.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 1 ) for: 9.100000381f == Approx( 1.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 0 ) for: 9.100000381f == Approx( 0.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.double_pi == Approx( 3.1415 ) for: 3.14159265350000005
|
||||
==
|
||||
Approx( 3.14150000000000018 )
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello == "goodbye" for: "hello" == "goodbye"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello == "hell" for: "hello" == "hell"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello == "hello1" for: "hello" == "hello1"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello.size() == 6 for: 5 == 6
|
||||
Condition.tests.cpp:<line number>: failed: x == Approx( 1.301 ) for: 1.3 == Approx( 1.301 )
|
||||
Condition.tests.cpp:<line number>: failed: x == Approx( 1.301 ) for: 1.30000000000000027
|
||||
==
|
||||
Approx( 1.30099999999999993 )
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven == 7 for: 7 == 7
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one == Approx( 9.1f ) for: 9.1f == Approx( 9.1000003815 )
|
||||
Condition.tests.cpp:<line number>: passed: data.double_pi == Approx( 3.1415926535 ) for: 3.1415926535 == Approx( 3.1415926535 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one == Approx( 9.1f ) for: 9.100000381f
|
||||
==
|
||||
Approx( 9.10000038146972656 )
|
||||
Condition.tests.cpp:<line number>: passed: data.double_pi == Approx( 3.1415926535 ) for: 3.14159265350000005
|
||||
==
|
||||
Approx( 3.14159265350000005 )
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello == "hello" for: "hello" == "hello"
|
||||
Condition.tests.cpp:<line number>: passed: "hello" == data.str_hello for: "hello" == "hello"
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello.size() == 5 for: 5 == 5
|
||||
Condition.tests.cpp:<line number>: passed: x == Approx( 1.3 ) for: 1.3 == Approx( 1.3 )
|
||||
Condition.tests.cpp:<line number>: passed: x == Approx( 1.3 ) for: 1.30000000000000027
|
||||
==
|
||||
Approx( 1.30000000000000004 )
|
||||
Matchers.tests.cpp:<line number>: passed: testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring"
|
||||
Matchers.tests.cpp:<line number>: passed: testStringForMatching(), Equals( "this string contains 'ABC' as a substring", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" (case insensitive)
|
||||
Matchers.tests.cpp:<line number>: failed: testStringForMatching(), Equals( "this string contains 'ABC' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'ABC' as a substring"
|
||||
@@ -596,21 +632,21 @@ Misc.tests.cpp:<line number>: passed: Factorial(2) == 2 for: 2 == 2
|
||||
Misc.tests.cpp:<line number>: passed: Factorial(3) == 6 for: 6 == 6
|
||||
Misc.tests.cpp:<line number>: passed: Factorial(10) == 3628800 for: 3628800 (0x<hex digits>) == 3628800 (0x<hex digits>)
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: filter( []( int ) { return false; }, value( 3 ) ), Catch::GeneratorException
|
||||
Matchers.tests.cpp:<line number>: passed: 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.1 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.2 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0 are within 99% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: -0., WithinRel( 0. ) for: -0.0 and 0 are within 2.22045e-12% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: v1, WithinRel( v2 ) for: 0.0 and 2.22507e-308 are within 2.22045e-12% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.09999999999999964 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.19999999999999929 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0.0 are within 99% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: -0., WithinRel( 0. ) for: -0.0 and 0.0 are within 2.22045e-12% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: v1, WithinRel( v2 ) for: 0.0 and 0.0 are within 2.22045e-12% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1., WithinAbs( 1., 0 ) for: 1.0 is within 0.0 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0., WithinAbs( 1., 1 ) for: 0.0 is within 1.0 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.98999999999999999 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.98999999999999999 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 11., !WithinAbs( 10., 0.5 ) for: 11.0 not is within 0.5 of 10.0
|
||||
Matchers.tests.cpp:<line number>: passed: 10., !WithinAbs( 11., 0.5 ) for: 10.0 not is within 0.5 of 11.0
|
||||
Matchers.tests.cpp:<line number>: passed: -10., WithinAbs( -10., 0.5 ) for: -10.0 is within 0.5 of -10.0
|
||||
Matchers.tests.cpp:<line number>: passed: -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.6
|
||||
Matchers.tests.cpp:<line number>: passed: -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.59999999999999964
|
||||
Matchers.tests.cpp:<line number>: passed: 1., WithinULP( 1., 0 ) for: 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.0 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.00000000000000022 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 0., WithinULP( nextafter( 0., 1. ), 1 ) for: 0.0 is within 1 ULPs of 4.9406564584124654e-324 ([0.0000000000000000e+00, 9.8813129168249309e-324])
|
||||
Matchers.tests.cpp:<line number>: passed: 1., WithinULP( nextafter( 1., 0. ), 1 ) for: 1.0 is within 1 ULPs of 9.9999999999999989e-01 ([9.9999999999999978e-01, 1.0000000000000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 1., !WithinULP( nextafter( 1., 2. ), 0 ) for: 1.0 not is within 0 ULPs of 1.0000000000000002e+00 ([1.0000000000000002e+00, 1.0000000000000002e+00])
|
||||
@@ -618,7 +654,7 @@ Matchers.tests.cpp:<line number>: passed: 1., WithinULP( 1., 0 ) for: 1.0 is wit
|
||||
Matchers.tests.cpp:<line number>: passed: -0., WithinULP( 0., 0 ) for: -0.0 is within 0 ULPs of 0.0000000000000000e+00 ([0.0000000000000000e+00, 0.0000000000000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 1., WithinAbs( 1., 0.5 ) || WithinULP( 2., 1 ) for: 1.0 ( is within 0.5 of 1.0 or is within 1 ULPs of 2.0000000000000000e+00 ([1.9999999999999998e+00, 2.0000000000000004e+00]) )
|
||||
Matchers.tests.cpp:<line number>: passed: 1., WithinAbs( 2., 0.5 ) || WithinULP( 1., 0 ) for: 1.0 ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) )
|
||||
Matchers.tests.cpp:<line number>: passed: 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0 are within 10% of each other )
|
||||
Matchers.tests.cpp:<line number>: passed: 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0.0 are within 10% of each other )
|
||||
Matchers.tests.cpp:<line number>: passed: WithinAbs( 1., 0. )
|
||||
Matchers.tests.cpp:<line number>: passed: WithinAbs( 1., -1. ), std::domain_error
|
||||
Matchers.tests.cpp:<line number>: passed: WithinULP( 1., 0 )
|
||||
@@ -626,23 +662,23 @@ Matchers.tests.cpp:<line number>: passed: WithinRel( 1., 0. )
|
||||
Matchers.tests.cpp:<line number>: passed: WithinRel( 1., -0.2 ), std::domain_error
|
||||
Matchers.tests.cpp:<line number>: passed: WithinRel( 1., 1. ), std::domain_error
|
||||
Matchers.tests.cpp:<line number>: passed: 1., !IsNaN() for: 1.0 not is NaN
|
||||
Matchers.tests.cpp:<line number>: passed: 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.1 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.2 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0 are within 99% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: -0.f, WithinRel( 0.f ) for: -0.0f and 0 are within 0.00119209% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: v1, WithinRel( v2 ) for: 0.0f and 1.17549e-38 are within 0.00119209% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.10000038146972656 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.19999980926513672 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0.0 are within 99% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: -0.f, WithinRel( 0.f ) for: -0.0f and 0.0 are within 0.00119209% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: v1, WithinRel( v2 ) for: 0.0f and 0.0 are within 0.00119209% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, WithinAbs( 1.f, 0 ) for: 1.0f is within 0.0 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, WithinAbs( 1.f, 1 ) for: 0.0f is within 1.0 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.99000000953674316 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.99000000953674316 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, WithinAbs( -0.f, 0 ) for: 0.0f is within 0.0 of -0.0
|
||||
Matchers.tests.cpp:<line number>: passed: 11.f, !WithinAbs( 10.f, 0.5f ) for: 11.0f not is within 0.5 of 10.0
|
||||
Matchers.tests.cpp:<line number>: passed: 10.f, !WithinAbs( 11.f, 0.5f ) for: 10.0f not is within 0.5 of 11.0
|
||||
Matchers.tests.cpp:<line number>: passed: -10.f, WithinAbs( -10.f, 0.5f ) for: -10.0f is within 0.5 of -10.0
|
||||
Matchers.tests.cpp:<line number>: passed: -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.6000003815
|
||||
Matchers.tests.cpp:<line number>: passed: -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.60000038146972656
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, WithinULP( 1.f, 0 ) for: 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: -1.f, WithinULP( -1.f, 0 ) for: -1.0f is within 0 ULPs of -1.00000000e+00f ([-1.00000000e+00, -1.00000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.0f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.000000119f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, WithinULP( nextafter( 0.f, 1.f ), 1 ) for: 0.0f is within 1 ULPs of 1.40129846e-45f ([0.00000000e+00, 2.80259693e-45])
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, WithinULP( nextafter( 1.f, 0.f ), 1 ) for: 1.0f is within 1 ULPs of 9.99999940e-01f ([9.99999881e-01, 1.00000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, !WithinULP( nextafter( 1.f, 2.f ), 0 ) for: 1.0f not is within 0 ULPs of 1.00000012e+00f ([1.00000012e+00, 1.00000012e+00])
|
||||
@@ -650,7 +686,7 @@ Matchers.tests.cpp:<line number>: passed: 1.f, WithinULP( 1.f, 0 ) for: 1.0f is
|
||||
Matchers.tests.cpp:<line number>: passed: -0.f, WithinULP( 0.f, 0 ) for: -0.0f is within 0 ULPs of 0.00000000e+00f ([0.00000000e+00, 0.00000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, WithinAbs( 1.f, 0.5 ) || WithinULP( 1.f, 1 ) for: 1.0f ( is within 0.5 of 1.0 or is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00]) )
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, WithinAbs( 2.f, 0.5 ) || WithinULP( 1.f, 0 ) for: 1.0f ( is within 0.5 of 2.0 or is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) )
|
||||
Matchers.tests.cpp:<line number>: passed: 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.001 of 0.0 or and 0 are within 10% of each other )
|
||||
Matchers.tests.cpp:<line number>: passed: 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.00100000004749745 of 0.0 or and 0.0 are within 10% of each other )
|
||||
Matchers.tests.cpp:<line number>: passed: WithinAbs( 1.f, 0.f )
|
||||
Matchers.tests.cpp:<line number>: passed: WithinAbs( 1.f, -1.f ), std::domain_error
|
||||
Matchers.tests.cpp:<line number>: passed: WithinULP( 1.f, 0 )
|
||||
@@ -830,68 +866,122 @@ GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 5 for: 5 == 5
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.9 == Approx( -0.9 ) with 1 message: 'Current expected value is -0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.90000000000000002
|
||||
==
|
||||
Approx( -0.90000000000000002 ) with 1 message: 'Current expected value is -0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.8 == Approx( -0.8 ) with 1 message: 'Current expected value is -0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.80000000000000004
|
||||
==
|
||||
Approx( -0.80000000000000004 ) with 1 message: 'Current expected value is -0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.70000000000000007
|
||||
==
|
||||
Approx( -0.70000000000000007 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.6 == Approx( -0.6 ) with 1 message: 'Current expected value is -0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.60000000000000009
|
||||
==
|
||||
Approx( -0.60000000000000009 ) with 1 message: 'Current expected value is -0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.5 == Approx( -0.5 ) with 1 message: 'Current expected value is -0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.50000000000000011
|
||||
==
|
||||
Approx( -0.50000000000000011 ) with 1 message: 'Current expected value is -0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.40000000000000013
|
||||
==
|
||||
Approx( -0.40000000000000013 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.3 == Approx( -0.3 ) with 1 message: 'Current expected value is -0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.30000000000000016
|
||||
==
|
||||
Approx( -0.30000000000000016 ) with 1 message: 'Current expected value is -0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.2 == Approx( -0.2 ) with 1 message: 'Current expected value is -0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.20000000000000015
|
||||
==
|
||||
Approx( -0.20000000000000015 ) with 1 message: 'Current expected value is -0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.10000000000000014
|
||||
==
|
||||
Approx( -0.10000000000000014 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.0 == Approx( -0.0 ) with 1 message: 'Current expected value is -1.38778e-16'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.00000000000000014
|
||||
==
|
||||
Approx( -0.00000000000000014 ) with 1 message: 'Current expected value is -1.38778e-16'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -1.38778e-16'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.1 == Approx( 0.1 ) with 1 message: 'Current expected value is 0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.09999999999999987
|
||||
==
|
||||
Approx( 0.09999999999999987 ) with 1 message: 'Current expected value is 0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.19999999999999987
|
||||
==
|
||||
Approx( 0.19999999999999987 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.3 == Approx( 0.3 ) with 1 message: 'Current expected value is 0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.29999999999999988
|
||||
==
|
||||
Approx( 0.29999999999999988 ) with 1 message: 'Current expected value is 0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.4 == Approx( 0.4 ) with 1 message: 'Current expected value is 0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.39999999999999991
|
||||
==
|
||||
Approx( 0.39999999999999991 ) with 1 message: 'Current expected value is 0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.49999999999999989
|
||||
==
|
||||
Approx( 0.49999999999999989 ) with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.6 == Approx( 0.6 ) with 1 message: 'Current expected value is 0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.59999999999999987
|
||||
==
|
||||
Approx( 0.59999999999999987 ) with 1 message: 'Current expected value is 0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.7 == Approx( 0.7 ) with 1 message: 'Current expected value is 0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.69999999999999984
|
||||
==
|
||||
Approx( 0.69999999999999984 ) with 1 message: 'Current expected value is 0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.8 == Approx( 0.8 ) with 1 message: 'Current expected value is 0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.79999999999999982
|
||||
==
|
||||
Approx( 0.79999999999999982 ) with 1 message: 'Current expected value is 0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.9 == Approx( 0.9 ) with 1 message: 'Current expected value is 0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.8999999999999998
|
||||
==
|
||||
Approx( 0.8999999999999998 ) with 1 message: 'Current expected value is 0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx( rangeEnd ) for: 1.0 == Approx( 1.0 )
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx( rangeEnd ) for: 0.99999999999999978 == Approx( 1.0 )
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.69999999999999996
|
||||
==
|
||||
Approx( -0.69999999999999996 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.39999999999999997
|
||||
==
|
||||
Approx( -0.39999999999999997 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.09999999999999998
|
||||
==
|
||||
Approx( -0.09999999999999998 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.20000000000000001
|
||||
==
|
||||
Approx( 0.20000000000000001 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.69999999999999996
|
||||
==
|
||||
Approx( -0.69999999999999996 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.39999999999999997
|
||||
==
|
||||
Approx( -0.39999999999999997 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.09999999999999998
|
||||
==
|
||||
Approx( -0.09999999999999998 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.20000000000000001
|
||||
==
|
||||
Approx( 0.20000000000000001 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.5'
|
||||
@@ -922,10 +1012,18 @@ GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == -4 for: -4 == -4
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == -7 for: -7 == -7
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.22 ) for: 1.23 >= Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.23 ) for: 1.23 >= Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: !(d >= Approx( 1.24 )) for: !(1.23 >= Approx( 1.24 ))
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.24 ).epsilon(0.1) for: 1.23 >= Approx( 1.24 )
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.22 ) for: 1.22999999999999998
|
||||
>=
|
||||
Approx( 1.21999999999999997 )
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.23 ) for: 1.22999999999999998
|
||||
>=
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: !(d >= Approx( 1.24 )) for: !(1.22999999999999998
|
||||
>=
|
||||
Approx( 1.23999999999999999 ))
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.24 ).epsilon(0.1) for: 1.22999999999999998
|
||||
>=
|
||||
Approx( 1.23999999999999999 )
|
||||
TestCaseInfoHasher.tests.cpp:<line number>: passed: h1( dummy ) != h2( dummy ) for: 3422778688 (0x<hex digits>)
|
||||
!=
|
||||
130711275 (0x<hex digits>)
|
||||
@@ -964,17 +1062,25 @@ Message.tests.cpp:<line number>: passed: i < 10 for: 9 < 10 with 2 messages: 'cu
|
||||
Message.tests.cpp:<line number>: failed: i < 10 for: 10 < 10 with 2 messages: 'current counter 10' and 'i := 10'
|
||||
AssertionHandler.tests.cpp:<line number>: failed: unexpected exception with message: 'Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE'; expression was: Dummy
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven != 7 for: 7 != 7
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one != Approx( 9.1f ) for: 9.1f != Approx( 9.1000003815 )
|
||||
Condition.tests.cpp:<line number>: failed: data.double_pi != Approx( 3.1415926535 ) for: 3.1415926535 != Approx( 3.1415926535 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one != Approx( 9.1f ) for: 9.100000381f
|
||||
!=
|
||||
Approx( 9.10000038146972656 )
|
||||
Condition.tests.cpp:<line number>: failed: data.double_pi != Approx( 3.1415926535 ) for: 3.14159265350000005
|
||||
!=
|
||||
Approx( 3.14159265350000005 )
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello != "hello" for: "hello" != "hello"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello.size() != 5 for: 5 != 5
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven != 6 for: 7 != 6
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven != 8 for: 7 != 8
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 9.11f ) for: 9.1f != Approx( 9.1099996567 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 9.0f ) for: 9.1f != Approx( 9.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 1 ) for: 9.1f != Approx( 1.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 0 ) for: 9.1f != Approx( 0.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.double_pi != Approx( 3.1415 ) for: 3.1415926535 != Approx( 3.1415 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 9.11f ) for: 9.100000381f
|
||||
!=
|
||||
Approx( 9.10999965667724609 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 9.0f ) for: 9.100000381f != Approx( 9.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 1 ) for: 9.100000381f != Approx( 1.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 0 ) for: 9.100000381f != Approx( 0.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.double_pi != Approx( 3.1415 ) for: 3.14159265350000005
|
||||
!=
|
||||
Approx( 3.14150000000000018 )
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello != "goodbye" for: "hello" != "goodbye"
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello != "hell" for: "hello" != "hell"
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello != "hello1" for: "hello" != "hello1"
|
||||
@@ -1065,10 +1171,18 @@ Json.tests.cpp:<line number>: passed: sstream.str() == "\"\\r\"" for: ""\r"" ==
|
||||
Json.tests.cpp:<line number>: passed: sstream.str() == "\"\\t\"" for: ""\t"" == ""\t""
|
||||
Json.tests.cpp:<line number>: passed: sstream.str() == "\"\\\\/\\t\\r\\n\"" for: ""\\/\t\r\n"" == ""\\/\t\r\n""
|
||||
Compilation.tests.cpp:<line number>: passed: []() { return true; }() for: true
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.24 ) for: 1.23 <= Approx( 1.24 )
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.23 ) for: 1.23 <= Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: !(d <= Approx( 1.22 )) for: !(1.23 <= Approx( 1.22 ))
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.22 ).epsilon(0.1) for: 1.23 <= Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.24 ) for: 1.22999999999999998
|
||||
<=
|
||||
Approx( 1.23999999999999999 )
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.23 ) for: 1.22999999999999998
|
||||
<=
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: !(d <= Approx( 1.22 )) for: !(1.22999999999999998
|
||||
<=
|
||||
Approx( 1.21999999999999997 ))
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.22 ).epsilon(0.1) for: 1.22999999999999998
|
||||
<=
|
||||
Approx( 1.21999999999999997 )
|
||||
Misc.tests.cpp:<line number>: passed: with 1 message: 'was called'
|
||||
Matchers.tests.cpp:<line number>: passed: testStringForMatching(), ContainsSubstring( "string" ) && ContainsSubstring( "abc" ) && ContainsSubstring( "substring" ) && ContainsSubstring( "contains" ) for: "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" )
|
||||
Matchers.tests.cpp:<line number>: passed: testStringForMatching(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) for: "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" )
|
||||
@@ -1135,9 +1249,9 @@ Condition.tests.cpp:<line number>: failed: data.int_seven < 0 for: 7 < 0
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven < -1 for: 7 < -1
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven >= 8 for: 7 >= 8
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven <= 6 for: 7 <= 6
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one < 9 for: 9.1f < 9
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one > 10 for: 9.1f > 10
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one > 9.2 for: 9.1f > 9.2
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one < 9 for: 9.100000381f < 9
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one > 10 for: 9.100000381f > 10
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one > 9.2 for: 9.100000381f > 9.19999999999999929
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello > "hello" for: "hello" > "hello"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello < "hello" for: "hello" < "hello"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello > "hellp" for: "hello" > "hellp"
|
||||
@@ -1154,9 +1268,9 @@ Condition.tests.cpp:<line number>: passed: data.int_seven >= 7 for: 7 >= 7
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven >= 6 for: 7 >= 6
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven <= 7 for: 7 <= 7
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven <= 8 for: 7 <= 8
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one > 9 for: 9.1f > 9
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one < 10 for: 9.1f < 10
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one < 9.2 for: 9.1f < 9.2
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one > 9 for: 9.100000381f > 9
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one < 10 for: 9.100000381f < 10
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one < 9.2 for: 9.100000381f < 9.19999999999999929
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello <= "hello" for: "hello" <= "hello"
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello >= "hello" for: "hello" >= "hello"
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello < "hellp" for: "hello" < "hellp"
|
||||
@@ -1354,7 +1468,9 @@ CmdLine.tests.cpp:<line number>: passed: config.benchmarkSamples == 200 for: 200
|
||||
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-resamples=20000" }) for: {?}
|
||||
CmdLine.tests.cpp:<line number>: passed: config.benchmarkResamples == 20000 for: 20000 (0x<hex digits>) == 20000 (0x<hex digits>)
|
||||
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-confidence-interval=0.99" }) for: {?}
|
||||
CmdLine.tests.cpp:<line number>: passed: config.benchmarkConfidenceInterval == Catch::Approx(0.99) for: 0.99 == Approx( 0.99 )
|
||||
CmdLine.tests.cpp:<line number>: passed: config.benchmarkConfidenceInterval == Catch::Approx(0.99) for: 0.98999999999999999
|
||||
==
|
||||
Approx( 0.98999999999999999 )
|
||||
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-no-analysis" }) for: {?}
|
||||
CmdLine.tests.cpp:<line number>: passed: config.benchmarkNoAnalysis for: true
|
||||
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-warmup-time=10" }) for: {?}
|
||||
@@ -1609,14 +1725,30 @@ BDD.tests.cpp:<line number>: passed: v.size() == 0 for: 0 == 0
|
||||
A string sent directly to stdout
|
||||
A string sent directly to stderr
|
||||
A string sent to stderr via clog
|
||||
Approx.tests.cpp:<line number>: passed: d == Approx( 1.23 ) for: 1.23 == Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.22 ) for: 1.23 != Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.24 ) for: 1.23 != Approx( 1.24 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.23_a for: 1.23 == Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.22_a for: 1.23 != Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) != 1.22 for: Approx( 1.23 ) != 1.22
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) != 1.24 for: Approx( 1.23 ) != 1.24
|
||||
Approx.tests.cpp:<line number>: passed: d == Approx( 1.23 ) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.22 ) for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.21999999999999997 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.24 ) for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.23999999999999999 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.23_a for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.22_a for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.21999999999999997 )
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) == 1.23 for: Approx( 1.22999999999999998 )
|
||||
==
|
||||
1.22999999999999998
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) != 1.22 for: Approx( 1.22999999999999998 )
|
||||
!=
|
||||
1.21999999999999997
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) != 1.24 for: Approx( 1.22999999999999998 )
|
||||
!=
|
||||
1.23999999999999999
|
||||
Message from section one
|
||||
Message from section two
|
||||
Matchers.tests.cpp:<line number>: failed: testStringForMatching(), StartsWith( "This String" ) for: "this string contains 'abc' as a substring" starts with: "This String"
|
||||
@@ -2025,7 +2157,7 @@ MatchersRanges.tests.cpp:<line number>: passed: a, !RangeEquals( b ) for: { 1, 2
|
||||
MatchersRanges.tests.cpp:<line number>: passed: a, UnorderedRangeEquals( b ) for: { 1, 2, 3 } unordered elements are { 3, 2, 1 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: vector_a, RangeEquals( array_a_plus_1, close_enough ) for: { 1, 2, 3 } elements are { 2, 3, 4 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: vector_a, UnorderedRangeEquals( array_a_plus_1, close_enough ) for: { 1, 2, 3 } unordered elements are { 2, 3, 4 }
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: '3.14'
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: '3.14000000000000012'
|
||||
UniquePtr.tests.cpp:<line number>: passed: bptr->i == 3 for: 3 == 3
|
||||
UniquePtr.tests.cpp:<line number>: passed: bptr->i == 3 for: 3 == 3
|
||||
MatchersRanges.tests.cpp:<line number>: passed: data, AllMatch(SizeIs(5)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } all match has size == 5
|
||||
@@ -2171,14 +2303,26 @@ MatchersRanges.tests.cpp:<line number>: passed: arr, !SizeIs(!Lt(3)) for: { 0, 0
|
||||
MatchersRanges.tests.cpp:<line number>: passed: map, SizeIs(3) for: { {?}, {?}, {?} } has size == 3
|
||||
MatchersRanges.tests.cpp:<line number>: passed: unrelated::ADL_size{}, SizeIs(12) for: {?} has size == 12
|
||||
MatchersRanges.tests.cpp:<line number>: passed: has_size{}, SizeIs(13) for: {?} has size == 13
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.23 ) for: 1.23 == Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.22 ) for: 1.23 == Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.24 ) for: 1.23 == Approx( 1.24 )
|
||||
Approx.tests.cpp:<line number>: passed: d != approx( 1.25 ) for: 1.23 != Approx( 1.25 )
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.22 for: Approx( 1.23 ) == 1.22
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.24 for: Approx( 1.23 ) == 1.24
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) != 1.25 for: Approx( 1.23 ) != 1.25
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.23 ) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.22 ) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.21999999999999997 )
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.24 ) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.23999999999999999 )
|
||||
Approx.tests.cpp:<line number>: passed: d != approx( 1.25 ) for: 1.22999999999999998 != Approx( 1.25 )
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.23 for: Approx( 1.22999999999999998 )
|
||||
==
|
||||
1.22999999999999998
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.22 for: Approx( 1.22999999999999998 )
|
||||
==
|
||||
1.21999999999999997
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.24 for: Approx( 1.22999999999999998 )
|
||||
==
|
||||
1.23999999999999999
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) != 1.25 for: Approx( 1.22999999999999998 ) != 1.25
|
||||
VariadicMacros.tests.cpp:<line number>: passed: with 1 message: 'no assertions'
|
||||
Matchers.tests.cpp:<line number>: passed: empty, Approx( empty ) for: { } is approx: { }
|
||||
Matchers.tests.cpp:<line number>: passed: v1, Approx( v1 ) for: { 1.0, 2.0, 3.0 } is approx: { 1.0, 2.0, 3.0 }
|
||||
@@ -2353,9 +2497,15 @@ Skip.tests.cpp:<line number>: skipped: 'skipping because answer = 41'
|
||||
Skip.tests.cpp:<line number>: passed:
|
||||
Skip.tests.cpp:<line number>: skipped: 'skipping because answer = 43'
|
||||
Tag.tests.cpp:<line number>: passed: Catch::TestCaseInfo("", { "test with an empty tag", "[]" }, dummySourceLineInfo)
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(1.103560) == Approx(-0.09203687623843015) for: -0.0920368762 == Approx( -0.0920368762 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(1.067400) == Approx(-0.05980291115763361) for: -0.0598029112 == Approx( -0.0598029112 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(0.050000) == Approx(1.38590382434967796) for: 1.3859038243 == Approx( 1.3859038243 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(1.103560) == Approx(-0.09203687623843015) for: -0.09203687623843014
|
||||
==
|
||||
Approx( -0.09203687623843015 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(1.067400) == Approx(-0.05980291115763361) for: -0.05980291115763361
|
||||
==
|
||||
Approx( -0.05980291115763361 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(0.050000) == Approx(1.38590382434967796) for: 1.38590382434967774
|
||||
==
|
||||
Approx( 1.38590382434967796 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: res.mean.count() == rate for: 2000.0 == 2000 (0x<hex digits>)
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: res.outliers.total() == 0 for: 0 == 0
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
@@ -2432,14 +2582,15 @@ Skip.tests.cpp:<line number>: skipped:
|
||||
!
|
||||
Tricky.tests.cpp:<line number>: passed: s == "7" for: "7" == "7"
|
||||
Tricky.tests.cpp:<line number>: passed: ti == typeid(int) for: {?} == {?}
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_cdf(0.000000) == Approx(0.50000000000000000) for: 0.5 == Approx( 0.5 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_cdf(1.000000) == Approx(0.84134474606854293) for: 0.8413447461 == Approx( 0.8413447461 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_cdf(-1.000000) == Approx(0.15865525393145705) for: 0.1586552539 == Approx( 0.1586552539 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_cdf(2.809729) == Approx(0.99752083845315409) for: 0.9975208385 == Approx( 0.9975208385 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_cdf(-1.352570) == Approx(0.08809652095066035) for: 0.088096521 == Approx( 0.088096521 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.551780) == Approx(0.13015979861484198) for: 0.1301597986 == Approx( 0.1301597986 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.533700) == Approx(0.08457408802851875) for: 0.084574088 == Approx( 0.084574088 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.025000) == Approx(-1.95996398454005449) for: -1.9599639845 == Approx( -1.9599639845 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.551780) == Approx(0.13015979861484198) for: 0.13015979861484195
|
||||
==
|
||||
Approx( 0.13015979861484198 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.533700) == Approx(0.08457408802851875) for: 0.08457408802851875
|
||||
==
|
||||
Approx( 0.08457408802851875 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.025000) == Approx(-1.95996398454005449) for: -1.95996398454005405
|
||||
==
|
||||
Approx( -1.95996398454005449 )
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
Message.tests.cpp:<line number>: passed: true with 1 message: 'this MAY be seen only for the FIRST assertion IF info is printed for passing assertions'
|
||||
Message.tests.cpp:<line number>: passed: true with 1 message: 'this MAY be seen only for the SECOND assertion IF info is printed for passing assertions'
|
||||
@@ -2609,19 +2760,19 @@ EnumToString.tests.cpp:<line number>: passed: ::Catch::Detail::stringify(e0) ==
|
||||
EnumToString.tests.cpp:<line number>: passed: ::Catch::Detail::stringify(e1) == "1" for: "1" == "1"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ }" == ::Catch::Detail::stringify(type{}) for: "{ }" == "{ }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ }" == ::Catch::Detail::stringify(value) for: "{ }" == "{ }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "1.2f" == ::Catch::Detail::stringify(float(1.2)) for: "1.2f" == "1.2f"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) for: "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "1.5f" == ::Catch::Detail::stringify(float(1.5)) for: "1.5f" == "1.5f"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ 1.5f, 0 }" == ::Catch::Detail::stringify(type{1.5f,0}) for: "{ 1.5f, 0 }" == "{ 1.5f, 0 }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ 0 }" == ::Catch::Detail::stringify(type{0}) for: "{ 0 }" == "{ 0 }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ \"hello\", \"world\" }" == ::Catch::Detail::stringify(type{"hello","world"}) for: "{ "hello", "world" }"
|
||||
==
|
||||
"{ "hello", "world" }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) for: "{ { 42 }, { }, 1.2f }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ { 42 }, { }, 1.5f }" == ::Catch::Detail::stringify(value) for: "{ { 42 }, { }, 1.5f }"
|
||||
==
|
||||
"{ { 42 }, { }, 1.2f }"
|
||||
"{ { 42 }, { }, 1.5f }"
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: e.point == 23 for: 23.0 == 23
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: e.upper_bound == 23 for: 23.0 == 23
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: e.lower_bound == 23 for: 23.0 == 23
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: e.confidence_interval == 0.95 for: 0.95 == 0.95
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: e.confidence_interval == 0.95 for: 0.94999999999999996 == 0.94999999999999996
|
||||
RandomNumberGeneration.tests.cpp:<line number>: passed: dist.a() == -10 for: -10 == -10
|
||||
RandomNumberGeneration.tests.cpp:<line number>: passed: dist.b() == 10 for: 10 == 10
|
||||
UniquePtr.tests.cpp:<line number>: passed: !(ptr) for: !{?}
|
||||
@@ -2689,7 +2840,7 @@ InternalBenchmark.tests.cpp:<line number>: passed: med == 18. for: 18.0 == 18.0
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
test cases: 417 | 312 passed | 85 failed | 6 skipped | 14 failed as expected
|
||||
assertions: 2260 | 2079 passed | 146 failed | 35 failed as expected
|
||||
test cases: 416 | 311 passed | 85 failed | 6 skipped | 14 failed as expected
|
||||
assertions: 2255 | 2074 passed | 146 failed | 35 failed as expected
|
||||
|
||||
|
||||
|
@@ -247,12 +247,22 @@ Misc.tests.cpp:<line number>: passed: x.size() > 0 for: 42 > 0
|
||||
Misc.tests.cpp:<line number>: passed: x.size() > 0 for: 9 > 0
|
||||
Misc.tests.cpp:<line number>: passed: x.size() > 0 for: 42 > 0
|
||||
Misc.tests.cpp:<line number>: passed: x.size() > 0 for: 9 > 0
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.23_a for: 1.23 == Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.22_a for: 1.23 != Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: -d == -1.23_a for: -1.23 == Approx( -1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.2_a .epsilon(.1) for: 1.23 == Approx( 1.2 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.2_a .epsilon(.001) for: 1.23 != Approx( 1.2 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1_a .epsilon(.3) for: 1.23 == Approx( 1.0 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.23_a for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.22_a for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.21999999999999997 )
|
||||
Approx.tests.cpp:<line number>: passed: -d == -1.23_a for: -1.22999999999999998
|
||||
==
|
||||
Approx( -1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.2_a .epsilon(.1) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.19999999999999996 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.2_a .epsilon(.001) for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.19999999999999996 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1_a .epsilon(.3) for: 1.22999999999999998 == Approx( 1.0 )
|
||||
Misc.tests.cpp:<line number>: passed: with 1 message: 'that's not flying - that's failing in style'
|
||||
Misc.tests.cpp:<line number>: failed: explicitly with 1 message: 'to infinity and beyond'
|
||||
Tricky.tests.cpp:<line number>: failed: &o1 == &o2 for: 0x<hex digits> == 0x<hex digits>
|
||||
@@ -261,8 +271,8 @@ Approx.tests.cpp:<line number>: passed: 104.0 != Approx(100.0) for: 104.0 != App
|
||||
Approx.tests.cpp:<line number>: passed: 104.0 == Approx(100.0).margin(5) for: 104.0 == Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 104.0 == Approx(100.0).margin(4) for: 104.0 == Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 104.0 != Approx(100.0).margin(3) for: 104.0 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 100.3 != Approx(100.0) for: 100.3 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 100.3 == Approx(100.0).margin(0.5) for: 100.3 == Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 100.3 != Approx(100.0) for: 100.29999999999999716 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 100.3 == Approx(100.0).margin(0.5) for: 100.29999999999999716 == Approx( 100.0 )
|
||||
Tricky.tests.cpp:<line number>: passed: i++ == 7 for: 7 == 7
|
||||
Tricky.tests.cpp:<line number>: passed: i++ == 8 for: 8 == 8
|
||||
Exception.tests.cpp:<line number>: passed: 1 == 1
|
||||
@@ -280,19 +290,33 @@ Approx.tests.cpp:<line number>: passed: 0.0f == Approx(0.25f).margin(0.25f) for:
|
||||
Approx.tests.cpp:<line number>: passed: 0.5f == Approx(0.25f).margin(0.25f) for: 0.5f == Approx( 0.25 )
|
||||
Approx.tests.cpp:<line number>: passed: 245.0f == Approx(245.25f).margin(0.25f) for: 245.0f == Approx( 245.25 )
|
||||
Approx.tests.cpp:<line number>: passed: 245.5f == Approx(245.25f).margin(0.25f) for: 245.5f == Approx( 245.25 )
|
||||
Approx.tests.cpp:<line number>: passed: divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) for: 3.1428571429 == Approx( 3.141 )
|
||||
Approx.tests.cpp:<line number>: passed: divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) for: 3.1428571429 != Approx( 3.141 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.231 ) for: 1.23 != Approx( 1.231 )
|
||||
Approx.tests.cpp:<line number>: passed: d == Approx( 1.231 ).epsilon( 0.1 ) for: 1.23 == Approx( 1.231 )
|
||||
Approx.tests.cpp:<line number>: passed: 1.23f == Approx( 1.23f ) for: 1.23f == Approx( 1.2300000191 )
|
||||
Approx.tests.cpp:<line number>: passed: divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) for: 3.14285714285714279
|
||||
==
|
||||
Approx( 3.14100000000000001 )
|
||||
Approx.tests.cpp:<line number>: passed: divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) for: 3.14285714285714279
|
||||
!=
|
||||
Approx( 3.14100000000000001 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.231 ) for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.23100000000000009 )
|
||||
Approx.tests.cpp:<line number>: passed: d == Approx( 1.231 ).epsilon( 0.1 ) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.23100000000000009 )
|
||||
Approx.tests.cpp:<line number>: passed: 1.23f == Approx( 1.23f ) for: 1.230000019f
|
||||
==
|
||||
Approx( 1.23000001907348633 )
|
||||
Approx.tests.cpp:<line number>: passed: 0.0f == Approx( 0.0f ) for: 0.0f == Approx( 0.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 1 == Approx( 1 ) for: 1 == Approx( 1.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 0 == Approx( 0 ) for: 0 == Approx( 0.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 1.0f == Approx( 1 ) for: 1.0f == Approx( 1.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 0 == Approx( dZero) for: 0 == Approx( 0.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 0 == Approx( dSmall ).margin( 0.001 ) for: 0 == Approx( 0.00001 )
|
||||
Approx.tests.cpp:<line number>: passed: 1.234f == Approx( dMedium ) for: 1.234f == Approx( 1.234 )
|
||||
Approx.tests.cpp:<line number>: passed: dMedium == Approx( 1.234f ) for: 1.234 == Approx( 1.2339999676 )
|
||||
Approx.tests.cpp:<line number>: passed: 1.234f == Approx( dMedium ) for: 1.233999968f
|
||||
==
|
||||
Approx( 1.23399999999999999 )
|
||||
Approx.tests.cpp:<line number>: passed: dMedium == Approx( 1.234f ) for: 1.23399999999999999
|
||||
==
|
||||
Approx( 1.23399996757507324 )
|
||||
Matchers.tests.cpp:<line number>: passed: 1, Predicate<int>( alwaysTrue, "always true" ) for: 1 matches predicate: "always true"
|
||||
Matchers.tests.cpp:<line number>: passed: 1, !Predicate<int>( alwaysFalse, "always false" ) for: 1 not matches predicate: "always false"
|
||||
Matchers.tests.cpp:<line number>: passed: "Hello olleH", Predicate<std::string>( []( std::string const& str ) -> bool { return str.front() == str.back(); }, "First and last character should be equal" ) for: "Hello olleH" matches predicate: "First and last character should be equal"
|
||||
@@ -507,7 +531,7 @@ Stream.tests.cpp:<line number>: passed: Catch::makeStream( "-" )->isConsole() fo
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom exception - not std'; expression was: throwCustom()
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom exception - not std'; expression was: throwCustom(), std::exception
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom std exception'
|
||||
Approx.tests.cpp:<line number>: passed: 101.000001 != Approx(100).epsilon(0.01) for: 101.000001 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
||||
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(0) == "Value1" for: Value1 == "Value1"
|
||||
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(1) == "Value2" for: Value2 == "Value2"
|
||||
@@ -527,27 +551,39 @@ EnumToString.tests.cpp:<line number>: passed: stringify( EnumClass3::Value4 ) ==
|
||||
EnumToString.tests.cpp:<line number>: passed: stringify( ec3 ) == "Value2" for: "Value2" == "Value2"
|
||||
EnumToString.tests.cpp:<line number>: passed: stringify( Bikeshed::Colours::Red ) == "Red" for: "Red" == "Red"
|
||||
EnumToString.tests.cpp:<line number>: passed: stringify( Bikeshed::Colours::Blue ) == "Blue" for: "Blue" == "Blue"
|
||||
Approx.tests.cpp:<line number>: passed: 101.01 != Approx(100).epsilon(0.01) for: 101.01 != Approx( 100.0 )
|
||||
Approx.tests.cpp:<line number>: passed: 101.01 != Approx(100).epsilon(0.01) for: 101.01000000000000512 != Approx( 100.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven == 6 for: 7 == 6
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven == 8 for: 7 == 8
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven == 0 for: 7 == 0
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 9.11f ) for: 9.1f == Approx( 9.1099996567 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 9.0f ) for: 9.1f == Approx( 9.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 1 ) for: 9.1f == Approx( 1.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 0 ) for: 9.1f == Approx( 0.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.double_pi == Approx( 3.1415 ) for: 3.1415926535 == Approx( 3.1415 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 9.11f ) for: 9.100000381f
|
||||
==
|
||||
Approx( 9.10999965667724609 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 9.0f ) for: 9.100000381f == Approx( 9.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 1 ) for: 9.100000381f == Approx( 1.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one == Approx( 0 ) for: 9.100000381f == Approx( 0.0 )
|
||||
Condition.tests.cpp:<line number>: failed: data.double_pi == Approx( 3.1415 ) for: 3.14159265350000005
|
||||
==
|
||||
Approx( 3.14150000000000018 )
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello == "goodbye" for: "hello" == "goodbye"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello == "hell" for: "hello" == "hell"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello == "hello1" for: "hello" == "hello1"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello.size() == 6 for: 5 == 6
|
||||
Condition.tests.cpp:<line number>: failed: x == Approx( 1.301 ) for: 1.3 == Approx( 1.301 )
|
||||
Condition.tests.cpp:<line number>: failed: x == Approx( 1.301 ) for: 1.30000000000000027
|
||||
==
|
||||
Approx( 1.30099999999999993 )
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven == 7 for: 7 == 7
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one == Approx( 9.1f ) for: 9.1f == Approx( 9.1000003815 )
|
||||
Condition.tests.cpp:<line number>: passed: data.double_pi == Approx( 3.1415926535 ) for: 3.1415926535 == Approx( 3.1415926535 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one == Approx( 9.1f ) for: 9.100000381f
|
||||
==
|
||||
Approx( 9.10000038146972656 )
|
||||
Condition.tests.cpp:<line number>: passed: data.double_pi == Approx( 3.1415926535 ) for: 3.14159265350000005
|
||||
==
|
||||
Approx( 3.14159265350000005 )
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello == "hello" for: "hello" == "hello"
|
||||
Condition.tests.cpp:<line number>: passed: "hello" == data.str_hello for: "hello" == "hello"
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello.size() == 5 for: 5 == 5
|
||||
Condition.tests.cpp:<line number>: passed: x == Approx( 1.3 ) for: 1.3 == Approx( 1.3 )
|
||||
Condition.tests.cpp:<line number>: passed: x == Approx( 1.3 ) for: 1.30000000000000027
|
||||
==
|
||||
Approx( 1.30000000000000004 )
|
||||
Matchers.tests.cpp:<line number>: passed: testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring"
|
||||
Matchers.tests.cpp:<line number>: passed: testStringForMatching(), Equals( "this string contains 'ABC' as a substring", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" (case insensitive)
|
||||
Matchers.tests.cpp:<line number>: failed: testStringForMatching(), Equals( "this string contains 'ABC' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'ABC' as a substring"
|
||||
@@ -594,21 +630,21 @@ Misc.tests.cpp:<line number>: passed: Factorial(2) == 2 for: 2 == 2
|
||||
Misc.tests.cpp:<line number>: passed: Factorial(3) == 6 for: 6 == 6
|
||||
Misc.tests.cpp:<line number>: passed: Factorial(10) == 3628800 for: 3628800 (0x<hex digits>) == 3628800 (0x<hex digits>)
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: filter( []( int ) { return false; }, value( 3 ) ), Catch::GeneratorException
|
||||
Matchers.tests.cpp:<line number>: passed: 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.1 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.2 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0 are within 99% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: -0., WithinRel( 0. ) for: -0.0 and 0 are within 2.22045e-12% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: v1, WithinRel( v2 ) for: 0.0 and 2.22507e-308 are within 2.22045e-12% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.09999999999999964 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.19999999999999929 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0.0 are within 99% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: -0., WithinRel( 0. ) for: -0.0 and 0.0 are within 2.22045e-12% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: v1, WithinRel( v2 ) for: 0.0 and 0.0 are within 2.22045e-12% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1., WithinAbs( 1., 0 ) for: 1.0 is within 0.0 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0., WithinAbs( 1., 1 ) for: 0.0 is within 1.0 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.98999999999999999 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.98999999999999999 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 11., !WithinAbs( 10., 0.5 ) for: 11.0 not is within 0.5 of 10.0
|
||||
Matchers.tests.cpp:<line number>: passed: 10., !WithinAbs( 11., 0.5 ) for: 10.0 not is within 0.5 of 11.0
|
||||
Matchers.tests.cpp:<line number>: passed: -10., WithinAbs( -10., 0.5 ) for: -10.0 is within 0.5 of -10.0
|
||||
Matchers.tests.cpp:<line number>: passed: -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.6
|
||||
Matchers.tests.cpp:<line number>: passed: -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.59999999999999964
|
||||
Matchers.tests.cpp:<line number>: passed: 1., WithinULP( 1., 0 ) for: 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.0 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.00000000000000022 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 0., WithinULP( nextafter( 0., 1. ), 1 ) for: 0.0 is within 1 ULPs of 4.9406564584124654e-324 ([0.0000000000000000e+00, 9.8813129168249309e-324])
|
||||
Matchers.tests.cpp:<line number>: passed: 1., WithinULP( nextafter( 1., 0. ), 1 ) for: 1.0 is within 1 ULPs of 9.9999999999999989e-01 ([9.9999999999999978e-01, 1.0000000000000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 1., !WithinULP( nextafter( 1., 2. ), 0 ) for: 1.0 not is within 0 ULPs of 1.0000000000000002e+00 ([1.0000000000000002e+00, 1.0000000000000002e+00])
|
||||
@@ -616,7 +652,7 @@ Matchers.tests.cpp:<line number>: passed: 1., WithinULP( 1., 0 ) for: 1.0 is wit
|
||||
Matchers.tests.cpp:<line number>: passed: -0., WithinULP( 0., 0 ) for: -0.0 is within 0 ULPs of 0.0000000000000000e+00 ([0.0000000000000000e+00, 0.0000000000000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 1., WithinAbs( 1., 0.5 ) || WithinULP( 2., 1 ) for: 1.0 ( is within 0.5 of 1.0 or is within 1 ULPs of 2.0000000000000000e+00 ([1.9999999999999998e+00, 2.0000000000000004e+00]) )
|
||||
Matchers.tests.cpp:<line number>: passed: 1., WithinAbs( 2., 0.5 ) || WithinULP( 1., 0 ) for: 1.0 ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) )
|
||||
Matchers.tests.cpp:<line number>: passed: 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0 are within 10% of each other )
|
||||
Matchers.tests.cpp:<line number>: passed: 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0.0 are within 10% of each other )
|
||||
Matchers.tests.cpp:<line number>: passed: WithinAbs( 1., 0. )
|
||||
Matchers.tests.cpp:<line number>: passed: WithinAbs( 1., -1. ), std::domain_error
|
||||
Matchers.tests.cpp:<line number>: passed: WithinULP( 1., 0 )
|
||||
@@ -624,23 +660,23 @@ Matchers.tests.cpp:<line number>: passed: WithinRel( 1., 0. )
|
||||
Matchers.tests.cpp:<line number>: passed: WithinRel( 1., -0.2 ), std::domain_error
|
||||
Matchers.tests.cpp:<line number>: passed: WithinRel( 1., 1. ), std::domain_error
|
||||
Matchers.tests.cpp:<line number>: passed: 1., !IsNaN() for: 1.0 not is NaN
|
||||
Matchers.tests.cpp:<line number>: passed: 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.1 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.2 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0 are within 99% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: -0.f, WithinRel( 0.f ) for: -0.0f and 0 are within 0.00119209% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: v1, WithinRel( v2 ) for: 0.0f and 1.17549e-38 are within 0.00119209% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.10000038146972656 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.19999980926513672 are within 10% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0.0 are within 99% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: -0.f, WithinRel( 0.f ) for: -0.0f and 0.0 are within 0.00119209% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: v1, WithinRel( v2 ) for: 0.0f and 0.0 are within 0.00119209% of each other
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, WithinAbs( 1.f, 0 ) for: 1.0f is within 0.0 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, WithinAbs( 1.f, 1 ) for: 0.0f is within 1.0 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.99000000953674316 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.99000000953674316 of 1.0
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, WithinAbs( -0.f, 0 ) for: 0.0f is within 0.0 of -0.0
|
||||
Matchers.tests.cpp:<line number>: passed: 11.f, !WithinAbs( 10.f, 0.5f ) for: 11.0f not is within 0.5 of 10.0
|
||||
Matchers.tests.cpp:<line number>: passed: 10.f, !WithinAbs( 11.f, 0.5f ) for: 10.0f not is within 0.5 of 11.0
|
||||
Matchers.tests.cpp:<line number>: passed: -10.f, WithinAbs( -10.f, 0.5f ) for: -10.0f is within 0.5 of -10.0
|
||||
Matchers.tests.cpp:<line number>: passed: -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.6000003815
|
||||
Matchers.tests.cpp:<line number>: passed: -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.60000038146972656
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, WithinULP( 1.f, 0 ) for: 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: -1.f, WithinULP( -1.f, 0 ) for: -1.0f is within 0 ULPs of -1.00000000e+00f ([-1.00000000e+00, -1.00000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.0f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.000000119f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 0.f, WithinULP( nextafter( 0.f, 1.f ), 1 ) for: 0.0f is within 1 ULPs of 1.40129846e-45f ([0.00000000e+00, 2.80259693e-45])
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, WithinULP( nextafter( 1.f, 0.f ), 1 ) for: 1.0f is within 1 ULPs of 9.99999940e-01f ([9.99999881e-01, 1.00000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, !WithinULP( nextafter( 1.f, 2.f ), 0 ) for: 1.0f not is within 0 ULPs of 1.00000012e+00f ([1.00000012e+00, 1.00000012e+00])
|
||||
@@ -648,7 +684,7 @@ Matchers.tests.cpp:<line number>: passed: 1.f, WithinULP( 1.f, 0 ) for: 1.0f is
|
||||
Matchers.tests.cpp:<line number>: passed: -0.f, WithinULP( 0.f, 0 ) for: -0.0f is within 0 ULPs of 0.00000000e+00f ([0.00000000e+00, 0.00000000e+00])
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, WithinAbs( 1.f, 0.5 ) || WithinULP( 1.f, 1 ) for: 1.0f ( is within 0.5 of 1.0 or is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00]) )
|
||||
Matchers.tests.cpp:<line number>: passed: 1.f, WithinAbs( 2.f, 0.5 ) || WithinULP( 1.f, 0 ) for: 1.0f ( is within 0.5 of 2.0 or is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) )
|
||||
Matchers.tests.cpp:<line number>: passed: 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.001 of 0.0 or and 0 are within 10% of each other )
|
||||
Matchers.tests.cpp:<line number>: passed: 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.00100000004749745 of 0.0 or and 0.0 are within 10% of each other )
|
||||
Matchers.tests.cpp:<line number>: passed: WithinAbs( 1.f, 0.f )
|
||||
Matchers.tests.cpp:<line number>: passed: WithinAbs( 1.f, -1.f ), std::domain_error
|
||||
Matchers.tests.cpp:<line number>: passed: WithinULP( 1.f, 0 )
|
||||
@@ -828,68 +864,122 @@ GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 5 for: 5 == 5
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.9 == Approx( -0.9 ) with 1 message: 'Current expected value is -0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.90000000000000002
|
||||
==
|
||||
Approx( -0.90000000000000002 ) with 1 message: 'Current expected value is -0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.8 == Approx( -0.8 ) with 1 message: 'Current expected value is -0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.80000000000000004
|
||||
==
|
||||
Approx( -0.80000000000000004 ) with 1 message: 'Current expected value is -0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.70000000000000007
|
||||
==
|
||||
Approx( -0.70000000000000007 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.6 == Approx( -0.6 ) with 1 message: 'Current expected value is -0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.60000000000000009
|
||||
==
|
||||
Approx( -0.60000000000000009 ) with 1 message: 'Current expected value is -0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.5 == Approx( -0.5 ) with 1 message: 'Current expected value is -0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.50000000000000011
|
||||
==
|
||||
Approx( -0.50000000000000011 ) with 1 message: 'Current expected value is -0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.40000000000000013
|
||||
==
|
||||
Approx( -0.40000000000000013 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.3 == Approx( -0.3 ) with 1 message: 'Current expected value is -0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.30000000000000016
|
||||
==
|
||||
Approx( -0.30000000000000016 ) with 1 message: 'Current expected value is -0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.2 == Approx( -0.2 ) with 1 message: 'Current expected value is -0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.20000000000000015
|
||||
==
|
||||
Approx( -0.20000000000000015 ) with 1 message: 'Current expected value is -0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.10000000000000014
|
||||
==
|
||||
Approx( -0.10000000000000014 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.0 == Approx( -0.0 ) with 1 message: 'Current expected value is -1.38778e-16'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.00000000000000014
|
||||
==
|
||||
Approx( -0.00000000000000014 ) with 1 message: 'Current expected value is -1.38778e-16'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -1.38778e-16'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.1 == Approx( 0.1 ) with 1 message: 'Current expected value is 0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.09999999999999987
|
||||
==
|
||||
Approx( 0.09999999999999987 ) with 1 message: 'Current expected value is 0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.19999999999999987
|
||||
==
|
||||
Approx( 0.19999999999999987 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.3 == Approx( 0.3 ) with 1 message: 'Current expected value is 0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.29999999999999988
|
||||
==
|
||||
Approx( 0.29999999999999988 ) with 1 message: 'Current expected value is 0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.3'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.4 == Approx( 0.4 ) with 1 message: 'Current expected value is 0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.39999999999999991
|
||||
==
|
||||
Approx( 0.39999999999999991 ) with 1 message: 'Current expected value is 0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.49999999999999989
|
||||
==
|
||||
Approx( 0.49999999999999989 ) with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.6 == Approx( 0.6 ) with 1 message: 'Current expected value is 0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.59999999999999987
|
||||
==
|
||||
Approx( 0.59999999999999987 ) with 1 message: 'Current expected value is 0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.6'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.7 == Approx( 0.7 ) with 1 message: 'Current expected value is 0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.69999999999999984
|
||||
==
|
||||
Approx( 0.69999999999999984 ) with 1 message: 'Current expected value is 0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.8 == Approx( 0.8 ) with 1 message: 'Current expected value is 0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.79999999999999982
|
||||
==
|
||||
Approx( 0.79999999999999982 ) with 1 message: 'Current expected value is 0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.8'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.9 == Approx( 0.9 ) with 1 message: 'Current expected value is 0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.8999999999999998
|
||||
==
|
||||
Approx( 0.8999999999999998 ) with 1 message: 'Current expected value is 0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.9'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx( rangeEnd ) for: 1.0 == Approx( 1.0 )
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx( rangeEnd ) for: 0.99999999999999978 == Approx( 1.0 )
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.69999999999999996
|
||||
==
|
||||
Approx( -0.69999999999999996 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.39999999999999997
|
||||
==
|
||||
Approx( -0.39999999999999997 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.09999999999999998
|
||||
==
|
||||
Approx( -0.09999999999999998 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.20000000000000001
|
||||
==
|
||||
Approx( 0.20000000000000001 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.69999999999999996
|
||||
==
|
||||
Approx( -0.69999999999999996 ) with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.39999999999999997
|
||||
==
|
||||
Approx( -0.39999999999999997 ) with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: -0.09999999999999998
|
||||
==
|
||||
Approx( -0.09999999999999998 ) with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.20000000000000001
|
||||
==
|
||||
Approx( 0.20000000000000001 ) with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5'
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true with 1 message: 'Current expected value is 0.5'
|
||||
@@ -920,10 +1010,18 @@ GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == -4 for: -4 == -4
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == -7 for: -7 == -7
|
||||
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.22 ) for: 1.23 >= Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.23 ) for: 1.23 >= Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: !(d >= Approx( 1.24 )) for: !(1.23 >= Approx( 1.24 ))
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.24 ).epsilon(0.1) for: 1.23 >= Approx( 1.24 )
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.22 ) for: 1.22999999999999998
|
||||
>=
|
||||
Approx( 1.21999999999999997 )
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.23 ) for: 1.22999999999999998
|
||||
>=
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: !(d >= Approx( 1.24 )) for: !(1.22999999999999998
|
||||
>=
|
||||
Approx( 1.23999999999999999 ))
|
||||
Approx.tests.cpp:<line number>: passed: d >= Approx( 1.24 ).epsilon(0.1) for: 1.22999999999999998
|
||||
>=
|
||||
Approx( 1.23999999999999999 )
|
||||
TestCaseInfoHasher.tests.cpp:<line number>: passed: h1( dummy ) != h2( dummy ) for: 3422778688 (0x<hex digits>)
|
||||
!=
|
||||
130711275 (0x<hex digits>)
|
||||
@@ -962,17 +1060,25 @@ Message.tests.cpp:<line number>: passed: i < 10 for: 9 < 10 with 2 messages: 'cu
|
||||
Message.tests.cpp:<line number>: failed: i < 10 for: 10 < 10 with 2 messages: 'current counter 10' and 'i := 10'
|
||||
AssertionHandler.tests.cpp:<line number>: failed: unexpected exception with message: 'Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE'; expression was: Dummy
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven != 7 for: 7 != 7
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one != Approx( 9.1f ) for: 9.1f != Approx( 9.1000003815 )
|
||||
Condition.tests.cpp:<line number>: failed: data.double_pi != Approx( 3.1415926535 ) for: 3.1415926535 != Approx( 3.1415926535 )
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one != Approx( 9.1f ) for: 9.100000381f
|
||||
!=
|
||||
Approx( 9.10000038146972656 )
|
||||
Condition.tests.cpp:<line number>: failed: data.double_pi != Approx( 3.1415926535 ) for: 3.14159265350000005
|
||||
!=
|
||||
Approx( 3.14159265350000005 )
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello != "hello" for: "hello" != "hello"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello.size() != 5 for: 5 != 5
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven != 6 for: 7 != 6
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven != 8 for: 7 != 8
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 9.11f ) for: 9.1f != Approx( 9.1099996567 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 9.0f ) for: 9.1f != Approx( 9.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 1 ) for: 9.1f != Approx( 1.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 0 ) for: 9.1f != Approx( 0.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.double_pi != Approx( 3.1415 ) for: 3.1415926535 != Approx( 3.1415 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 9.11f ) for: 9.100000381f
|
||||
!=
|
||||
Approx( 9.10999965667724609 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 9.0f ) for: 9.100000381f != Approx( 9.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 1 ) for: 9.100000381f != Approx( 1.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one != Approx( 0 ) for: 9.100000381f != Approx( 0.0 )
|
||||
Condition.tests.cpp:<line number>: passed: data.double_pi != Approx( 3.1415 ) for: 3.14159265350000005
|
||||
!=
|
||||
Approx( 3.14150000000000018 )
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello != "goodbye" for: "hello" != "goodbye"
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello != "hell" for: "hello" != "hell"
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello != "hello1" for: "hello" != "hello1"
|
||||
@@ -1063,10 +1169,18 @@ Json.tests.cpp:<line number>: passed: sstream.str() == "\"\\r\"" for: ""\r"" ==
|
||||
Json.tests.cpp:<line number>: passed: sstream.str() == "\"\\t\"" for: ""\t"" == ""\t""
|
||||
Json.tests.cpp:<line number>: passed: sstream.str() == "\"\\\\/\\t\\r\\n\"" for: ""\\/\t\r\n"" == ""\\/\t\r\n""
|
||||
Compilation.tests.cpp:<line number>: passed: []() { return true; }() for: true
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.24 ) for: 1.23 <= Approx( 1.24 )
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.23 ) for: 1.23 <= Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: !(d <= Approx( 1.22 )) for: !(1.23 <= Approx( 1.22 ))
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.22 ).epsilon(0.1) for: 1.23 <= Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.24 ) for: 1.22999999999999998
|
||||
<=
|
||||
Approx( 1.23999999999999999 )
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.23 ) for: 1.22999999999999998
|
||||
<=
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: !(d <= Approx( 1.22 )) for: !(1.22999999999999998
|
||||
<=
|
||||
Approx( 1.21999999999999997 ))
|
||||
Approx.tests.cpp:<line number>: passed: d <= Approx( 1.22 ).epsilon(0.1) for: 1.22999999999999998
|
||||
<=
|
||||
Approx( 1.21999999999999997 )
|
||||
Misc.tests.cpp:<line number>: passed: with 1 message: 'was called'
|
||||
Matchers.tests.cpp:<line number>: passed: testStringForMatching(), ContainsSubstring( "string" ) && ContainsSubstring( "abc" ) && ContainsSubstring( "substring" ) && ContainsSubstring( "contains" ) for: "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" )
|
||||
Matchers.tests.cpp:<line number>: passed: testStringForMatching(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) for: "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" )
|
||||
@@ -1133,9 +1247,9 @@ Condition.tests.cpp:<line number>: failed: data.int_seven < 0 for: 7 < 0
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven < -1 for: 7 < -1
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven >= 8 for: 7 >= 8
|
||||
Condition.tests.cpp:<line number>: failed: data.int_seven <= 6 for: 7 <= 6
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one < 9 for: 9.1f < 9
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one > 10 for: 9.1f > 10
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one > 9.2 for: 9.1f > 9.2
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one < 9 for: 9.100000381f < 9
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one > 10 for: 9.100000381f > 10
|
||||
Condition.tests.cpp:<line number>: failed: data.float_nine_point_one > 9.2 for: 9.100000381f > 9.19999999999999929
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello > "hello" for: "hello" > "hello"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello < "hello" for: "hello" < "hello"
|
||||
Condition.tests.cpp:<line number>: failed: data.str_hello > "hellp" for: "hello" > "hellp"
|
||||
@@ -1152,9 +1266,9 @@ Condition.tests.cpp:<line number>: passed: data.int_seven >= 7 for: 7 >= 7
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven >= 6 for: 7 >= 6
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven <= 7 for: 7 <= 7
|
||||
Condition.tests.cpp:<line number>: passed: data.int_seven <= 8 for: 7 <= 8
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one > 9 for: 9.1f > 9
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one < 10 for: 9.1f < 10
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one < 9.2 for: 9.1f < 9.2
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one > 9 for: 9.100000381f > 9
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one < 10 for: 9.100000381f < 10
|
||||
Condition.tests.cpp:<line number>: passed: data.float_nine_point_one < 9.2 for: 9.100000381f < 9.19999999999999929
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello <= "hello" for: "hello" <= "hello"
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello >= "hello" for: "hello" >= "hello"
|
||||
Condition.tests.cpp:<line number>: passed: data.str_hello < "hellp" for: "hello" < "hellp"
|
||||
@@ -1352,7 +1466,9 @@ CmdLine.tests.cpp:<line number>: passed: config.benchmarkSamples == 200 for: 200
|
||||
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-resamples=20000" }) for: {?}
|
||||
CmdLine.tests.cpp:<line number>: passed: config.benchmarkResamples == 20000 for: 20000 (0x<hex digits>) == 20000 (0x<hex digits>)
|
||||
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-confidence-interval=0.99" }) for: {?}
|
||||
CmdLine.tests.cpp:<line number>: passed: config.benchmarkConfidenceInterval == Catch::Approx(0.99) for: 0.99 == Approx( 0.99 )
|
||||
CmdLine.tests.cpp:<line number>: passed: config.benchmarkConfidenceInterval == Catch::Approx(0.99) for: 0.98999999999999999
|
||||
==
|
||||
Approx( 0.98999999999999999 )
|
||||
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-no-analysis" }) for: {?}
|
||||
CmdLine.tests.cpp:<line number>: passed: config.benchmarkNoAnalysis for: true
|
||||
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-warmup-time=10" }) for: {?}
|
||||
@@ -1604,14 +1720,30 @@ BDD.tests.cpp:<line number>: passed: v.capacity() >= 10 for: 10 >= 10
|
||||
BDD.tests.cpp:<line number>: passed: v.size() == 0 for: 0 == 0
|
||||
BDD.tests.cpp:<line number>: passed: v.capacity() >= 10 for: 10 >= 10
|
||||
BDD.tests.cpp:<line number>: passed: v.size() == 0 for: 0 == 0
|
||||
Approx.tests.cpp:<line number>: passed: d == Approx( 1.23 ) for: 1.23 == Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.22 ) for: 1.23 != Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.24 ) for: 1.23 != Approx( 1.24 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.23_a for: 1.23 == Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.22_a for: 1.23 != Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) != 1.22 for: Approx( 1.23 ) != 1.22
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) != 1.24 for: Approx( 1.23 ) != 1.24
|
||||
Approx.tests.cpp:<line number>: passed: d == Approx( 1.23 ) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.22 ) for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.21999999999999997 )
|
||||
Approx.tests.cpp:<line number>: passed: d != Approx( 1.24 ) for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.23999999999999999 )
|
||||
Approx.tests.cpp:<line number>: passed: d == 1.23_a for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: d != 1.22_a for: 1.22999999999999998
|
||||
!=
|
||||
Approx( 1.21999999999999997 )
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) == 1.23 for: Approx( 1.22999999999999998 )
|
||||
==
|
||||
1.22999999999999998
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) != 1.22 for: Approx( 1.22999999999999998 )
|
||||
!=
|
||||
1.21999999999999997
|
||||
Approx.tests.cpp:<line number>: passed: Approx( d ) != 1.24 for: Approx( 1.22999999999999998 )
|
||||
!=
|
||||
1.23999999999999999
|
||||
Matchers.tests.cpp:<line number>: failed: testStringForMatching(), StartsWith( "This String" ) for: "this string contains 'abc' as a substring" starts with: "This String"
|
||||
Matchers.tests.cpp:<line number>: failed: testStringForMatching(), StartsWith( "string", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" starts with: "string" (case insensitive)
|
||||
ToStringGeneral.tests.cpp:<line number>: passed: Catch::Detail::stringify(singular) == "{ 1 }" for: "{ 1 }" == "{ 1 }"
|
||||
@@ -2018,7 +2150,7 @@ MatchersRanges.tests.cpp:<line number>: passed: a, !RangeEquals( b ) for: { 1, 2
|
||||
MatchersRanges.tests.cpp:<line number>: passed: a, UnorderedRangeEquals( b ) for: { 1, 2, 3 } unordered elements are { 3, 2, 1 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: vector_a, RangeEquals( array_a_plus_1, close_enough ) for: { 1, 2, 3 } elements are { 2, 3, 4 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: vector_a, UnorderedRangeEquals( array_a_plus_1, close_enough ) for: { 1, 2, 3 } unordered elements are { 2, 3, 4 }
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: '3.14'
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: '3.14000000000000012'
|
||||
UniquePtr.tests.cpp:<line number>: passed: bptr->i == 3 for: 3 == 3
|
||||
UniquePtr.tests.cpp:<line number>: passed: bptr->i == 3 for: 3 == 3
|
||||
MatchersRanges.tests.cpp:<line number>: passed: data, AllMatch(SizeIs(5)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } all match has size == 5
|
||||
@@ -2164,14 +2296,26 @@ MatchersRanges.tests.cpp:<line number>: passed: arr, !SizeIs(!Lt(3)) for: { 0, 0
|
||||
MatchersRanges.tests.cpp:<line number>: passed: map, SizeIs(3) for: { {?}, {?}, {?} } has size == 3
|
||||
MatchersRanges.tests.cpp:<line number>: passed: unrelated::ADL_size{}, SizeIs(12) for: {?} has size == 12
|
||||
MatchersRanges.tests.cpp:<line number>: passed: has_size{}, SizeIs(13) for: {?} has size == 13
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.23 ) for: 1.23 == Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.22 ) for: 1.23 == Approx( 1.22 )
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.24 ) for: 1.23 == Approx( 1.24 )
|
||||
Approx.tests.cpp:<line number>: passed: d != approx( 1.25 ) for: 1.23 != Approx( 1.25 )
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.22 for: Approx( 1.23 ) == 1.22
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.24 for: Approx( 1.23 ) == 1.24
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) != 1.25 for: Approx( 1.23 ) != 1.25
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.23 ) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.22999999999999998 )
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.22 ) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.21999999999999997 )
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.24 ) for: 1.22999999999999998
|
||||
==
|
||||
Approx( 1.23999999999999999 )
|
||||
Approx.tests.cpp:<line number>: passed: d != approx( 1.25 ) for: 1.22999999999999998 != Approx( 1.25 )
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.23 for: Approx( 1.22999999999999998 )
|
||||
==
|
||||
1.22999999999999998
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.22 for: Approx( 1.22999999999999998 )
|
||||
==
|
||||
1.21999999999999997
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) == 1.24 for: Approx( 1.22999999999999998 )
|
||||
==
|
||||
1.23999999999999999
|
||||
Approx.tests.cpp:<line number>: passed: approx( d ) != 1.25 for: Approx( 1.22999999999999998 ) != 1.25
|
||||
VariadicMacros.tests.cpp:<line number>: passed: with 1 message: 'no assertions'
|
||||
Matchers.tests.cpp:<line number>: passed: empty, Approx( empty ) for: { } is approx: { }
|
||||
Matchers.tests.cpp:<line number>: passed: v1, Approx( v1 ) for: { 1.0, 2.0, 3.0 } is approx: { 1.0, 2.0, 3.0 }
|
||||
@@ -2346,9 +2490,15 @@ Skip.tests.cpp:<line number>: skipped: 'skipping because answer = 41'
|
||||
Skip.tests.cpp:<line number>: passed:
|
||||
Skip.tests.cpp:<line number>: skipped: 'skipping because answer = 43'
|
||||
Tag.tests.cpp:<line number>: passed: Catch::TestCaseInfo("", { "test with an empty tag", "[]" }, dummySourceLineInfo)
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(1.103560) == Approx(-0.09203687623843015) for: -0.0920368762 == Approx( -0.0920368762 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(1.067400) == Approx(-0.05980291115763361) for: -0.0598029112 == Approx( -0.0598029112 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(0.050000) == Approx(1.38590382434967796) for: 1.3859038243 == Approx( 1.3859038243 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(1.103560) == Approx(-0.09203687623843015) for: -0.09203687623843014
|
||||
==
|
||||
Approx( -0.09203687623843015 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(1.067400) == Approx(-0.05980291115763361) for: -0.05980291115763361
|
||||
==
|
||||
Approx( -0.05980291115763361 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: erfc_inv(0.050000) == Approx(1.38590382434967796) for: 1.38590382434967774
|
||||
==
|
||||
Approx( 1.38590382434967796 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: res.mean.count() == rate for: 2000.0 == 2000 (0x<hex digits>)
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: res.outliers.total() == 0 for: 0 == 0
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
@@ -2421,14 +2571,15 @@ Misc.tests.cpp:<line number>: passed: a != b for: 1 != 2
|
||||
Skip.tests.cpp:<line number>: skipped:
|
||||
Tricky.tests.cpp:<line number>: passed: s == "7" for: "7" == "7"
|
||||
Tricky.tests.cpp:<line number>: passed: ti == typeid(int) for: {?} == {?}
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_cdf(0.000000) == Approx(0.50000000000000000) for: 0.5 == Approx( 0.5 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_cdf(1.000000) == Approx(0.84134474606854293) for: 0.8413447461 == Approx( 0.8413447461 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_cdf(-1.000000) == Approx(0.15865525393145705) for: 0.1586552539 == Approx( 0.1586552539 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_cdf(2.809729) == Approx(0.99752083845315409) for: 0.9975208385 == Approx( 0.9975208385 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_cdf(-1.352570) == Approx(0.08809652095066035) for: 0.088096521 == Approx( 0.088096521 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.551780) == Approx(0.13015979861484198) for: 0.1301597986 == Approx( 0.1301597986 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.533700) == Approx(0.08457408802851875) for: 0.084574088 == Approx( 0.084574088 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.025000) == Approx(-1.95996398454005449) for: -1.9599639845 == Approx( -1.9599639845 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.551780) == Approx(0.13015979861484198) for: 0.13015979861484195
|
||||
==
|
||||
Approx( 0.13015979861484198 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.533700) == Approx(0.08457408802851875) for: 0.08457408802851875
|
||||
==
|
||||
Approx( 0.08457408802851875 )
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: normal_quantile(0.025000) == Approx(-1.95996398454005449) for: -1.95996398454005405
|
||||
==
|
||||
Approx( -1.95996398454005449 )
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
Message.tests.cpp:<line number>: passed: true with 1 message: 'this MAY be seen only for the FIRST assertion IF info is printed for passing assertions'
|
||||
Message.tests.cpp:<line number>: passed: true with 1 message: 'this MAY be seen only for the SECOND assertion IF info is printed for passing assertions'
|
||||
@@ -2598,19 +2749,19 @@ EnumToString.tests.cpp:<line number>: passed: ::Catch::Detail::stringify(e0) ==
|
||||
EnumToString.tests.cpp:<line number>: passed: ::Catch::Detail::stringify(e1) == "1" for: "1" == "1"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ }" == ::Catch::Detail::stringify(type{}) for: "{ }" == "{ }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ }" == ::Catch::Detail::stringify(value) for: "{ }" == "{ }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "1.2f" == ::Catch::Detail::stringify(float(1.2)) for: "1.2f" == "1.2f"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) for: "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "1.5f" == ::Catch::Detail::stringify(float(1.5)) for: "1.5f" == "1.5f"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ 1.5f, 0 }" == ::Catch::Detail::stringify(type{1.5f,0}) for: "{ 1.5f, 0 }" == "{ 1.5f, 0 }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ 0 }" == ::Catch::Detail::stringify(type{0}) for: "{ 0 }" == "{ 0 }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ \"hello\", \"world\" }" == ::Catch::Detail::stringify(type{"hello","world"}) for: "{ "hello", "world" }"
|
||||
==
|
||||
"{ "hello", "world" }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) for: "{ { 42 }, { }, 1.2f }"
|
||||
ToStringTuple.tests.cpp:<line number>: passed: "{ { 42 }, { }, 1.5f }" == ::Catch::Detail::stringify(value) for: "{ { 42 }, { }, 1.5f }"
|
||||
==
|
||||
"{ { 42 }, { }, 1.2f }"
|
||||
"{ { 42 }, { }, 1.5f }"
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: e.point == 23 for: 23.0 == 23
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: e.upper_bound == 23 for: 23.0 == 23
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: e.lower_bound == 23 for: 23.0 == 23
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: e.confidence_interval == 0.95 for: 0.95 == 0.95
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: e.confidence_interval == 0.95 for: 0.94999999999999996 == 0.94999999999999996
|
||||
RandomNumberGeneration.tests.cpp:<line number>: passed: dist.a() == -10 for: -10 == -10
|
||||
RandomNumberGeneration.tests.cpp:<line number>: passed: dist.b() == 10 for: 10 == 10
|
||||
UniquePtr.tests.cpp:<line number>: passed: !(ptr) for: !{?}
|
||||
@@ -2678,7 +2829,7 @@ InternalBenchmark.tests.cpp:<line number>: passed: med == 18. for: 18.0 == 18.0
|
||||
InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
test cases: 417 | 312 passed | 85 failed | 6 skipped | 14 failed as expected
|
||||
assertions: 2260 | 2079 passed | 146 failed | 35 failed as expected
|
||||
test cases: 416 | 311 passed | 85 failed | 6 skipped | 14 failed as expected
|
||||
assertions: 2255 | 2074 passed | 146 failed | 35 failed as expected
|
||||
|
||||
|
||||
|
@@ -434,27 +434,31 @@ with expansion:
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 9.11f ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 9.1099996567 )
|
||||
9.100000381f
|
||||
==
|
||||
Approx( 9.10999965667724609 )
|
||||
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 9.0f ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 9.0 )
|
||||
9.100000381f == Approx( 9.0 )
|
||||
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 1 ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 1.0 )
|
||||
9.100000381f == Approx( 1.0 )
|
||||
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 0 ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 0.0 )
|
||||
9.100000381f == Approx( 0.0 )
|
||||
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.double_pi == Approx( 3.1415 ) )
|
||||
with expansion:
|
||||
3.1415926535 == Approx( 3.1415 )
|
||||
3.14159265350000005
|
||||
==
|
||||
Approx( 3.14150000000000018 )
|
||||
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.str_hello == "goodbye" )
|
||||
@@ -479,7 +483,9 @@ with expansion:
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( x == Approx( 1.301 ) )
|
||||
with expansion:
|
||||
1.3 == Approx( 1.301 )
|
||||
1.30000000000000027
|
||||
==
|
||||
Approx( 1.30099999999999993 )
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Equals string matcher
|
||||
@@ -696,12 +702,16 @@ with expansion:
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.float_nine_point_one != Approx( 9.1f ) )
|
||||
with expansion:
|
||||
9.1f != Approx( 9.1000003815 )
|
||||
9.100000381f
|
||||
!=
|
||||
Approx( 9.10000038146972656 )
|
||||
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.double_pi != Approx( 3.1415926535 ) )
|
||||
with expansion:
|
||||
3.1415926535 != Approx( 3.1415926535 )
|
||||
3.14159265350000005
|
||||
!=
|
||||
Approx( 3.14159265350000005 )
|
||||
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.str_hello != "hello" )
|
||||
@@ -855,17 +865,17 @@ with expansion:
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.float_nine_point_one < 9 )
|
||||
with expansion:
|
||||
9.1f < 9
|
||||
9.100000381f < 9
|
||||
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.float_nine_point_one > 10 )
|
||||
with expansion:
|
||||
9.1f > 10
|
||||
9.100000381f > 10
|
||||
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.float_nine_point_one > 9.2 )
|
||||
with expansion:
|
||||
9.1f > 9.2
|
||||
9.100000381f > 9.19999999999999929
|
||||
|
||||
Condition.tests.cpp:<line number>: FAILED:
|
||||
CHECK( data.str_hello > "hello" )
|
||||
@@ -1060,7 +1070,7 @@ Exception.tests.cpp:<line number>
|
||||
|
||||
Exception.tests.cpp:<line number>: FAILED:
|
||||
due to unexpected exception with message:
|
||||
3.14
|
||||
3.14000000000000012
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Vector Approx matcher -- failing
|
||||
@@ -1588,6 +1598,6 @@ due to unexpected exception with message:
|
||||
Why would you throw a std::string?
|
||||
|
||||
===============================================================================
|
||||
test cases: 417 | 326 passed | 70 failed | 7 skipped | 14 failed as expected
|
||||
assertions: 2243 | 2079 passed | 129 failed | 35 failed as expected
|
||||
test cases: 416 | 325 passed | 70 failed | 7 skipped | 14 failed as expected
|
||||
assertions: 2238 | 2074 passed | 129 failed | 35 failed as expected
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuitesloose text artifact
|
||||
>
|
||||
<testsuite name="<exe-name>" errors="17" failures="129" skipped="12" tests="2272" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||
<testsuite name="<exe-name>" errors="17" failures="129" skipped="12" tests="2267" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||
<properties>
|
||||
<property name="random-seed" value="1"/>
|
||||
<property name="filters" value=""*" ~[!nonportable] ~[!benchmark] ~[approvals]"/>
|
||||
@@ -517,35 +517,39 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 9.11f ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 9.1099996567 )
|
||||
9.100000381f
|
||||
==
|
||||
Approx( 9.10999965667724609 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.float_nine_point_one == Approx( 9.0f )" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 9.0f ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 9.0 )
|
||||
9.100000381f == Approx( 9.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.float_nine_point_one == Approx( 1 )" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 1 ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 1.0 )
|
||||
9.100000381f == Approx( 1.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.float_nine_point_one == Approx( 0 )" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 0 ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 0.0 )
|
||||
9.100000381f == Approx( 0.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.double_pi == Approx( 3.1415 )" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.double_pi == Approx( 3.1415 ) )
|
||||
with expansion:
|
||||
3.1415926535 == Approx( 3.1415 )
|
||||
3.14159265350000005
|
||||
==
|
||||
Approx( 3.14150000000000018 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.str_hello == "goodbye"" type="CHECK">
|
||||
@@ -580,7 +584,9 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( x == Approx( 1.301 ) )
|
||||
with expansion:
|
||||
1.3 == Approx( 1.301 )
|
||||
1.30000000000000027
|
||||
==
|
||||
Approx( 1.30099999999999993 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
</testcase>
|
||||
@@ -828,14 +834,18 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one != Approx( 9.1f ) )
|
||||
with expansion:
|
||||
9.1f != Approx( 9.1000003815 )
|
||||
9.100000381f
|
||||
!=
|
||||
Approx( 9.10000038146972656 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.double_pi != Approx( 3.1415926535 )" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.double_pi != Approx( 3.1415926535 ) )
|
||||
with expansion:
|
||||
3.1415926535 != Approx( 3.1415926535 )
|
||||
3.14159265350000005
|
||||
!=
|
||||
Approx( 3.14159265350000005 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.str_hello != "hello"" type="CHECK">
|
||||
@@ -1011,21 +1021,21 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one < 9 )
|
||||
with expansion:
|
||||
9.1f < 9
|
||||
9.100000381f < 9
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.float_nine_point_one > 10" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one > 10 )
|
||||
with expansion:
|
||||
9.1f > 10
|
||||
9.100000381f > 10
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.float_nine_point_one > 9.2" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one > 9.2 )
|
||||
with expansion:
|
||||
9.1f > 9.2
|
||||
9.100000381f > 9.19999999999999929
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.str_hello > "hello"" type="CHECK">
|
||||
@@ -1453,7 +1463,7 @@ at Exception.tests.cpp:<line number>
|
||||
<testcase classname="<exe-name>.global" name="Unexpected exceptions can be translated" time="{duration}" status="run">
|
||||
<error type="TEST_CASE">
|
||||
FAILED:
|
||||
3.14
|
||||
3.14000000000000012
|
||||
at Exception.tests.cpp:<line number>
|
||||
</error>
|
||||
</testcase>
|
||||
@@ -1922,7 +1932,6 @@ b1!
|
||||
</testcase>
|
||||
<testcase classname="<exe-name>.global" name="non streamable - with conv. op" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="non-copyable objects" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="normal_cdf" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="normal_quantile" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="not allowed" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="not prints unscoped info from previous failures" time="{duration}" status="run">
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuites>
|
||||
<testsuite name="<exe-name>" errors="17" failures="129" skipped="12" tests="2272" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||
<testsuite name="<exe-name>" errors="17" failures="129" skipped="12" tests="2267" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||
<properties>
|
||||
<property name="random-seed" value="1"/>
|
||||
<property name="filters" value=""*" ~[!nonportable] ~[!benchmark] ~[approvals]"/>
|
||||
@@ -516,35 +516,39 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 9.11f ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 9.1099996567 )
|
||||
9.100000381f
|
||||
==
|
||||
Approx( 9.10999965667724609 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.float_nine_point_one == Approx( 9.0f )" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 9.0f ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 9.0 )
|
||||
9.100000381f == Approx( 9.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.float_nine_point_one == Approx( 1 )" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 1 ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 1.0 )
|
||||
9.100000381f == Approx( 1.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.float_nine_point_one == Approx( 0 )" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 0 ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 0.0 )
|
||||
9.100000381f == Approx( 0.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.double_pi == Approx( 3.1415 )" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.double_pi == Approx( 3.1415 ) )
|
||||
with expansion:
|
||||
3.1415926535 == Approx( 3.1415 )
|
||||
3.14159265350000005
|
||||
==
|
||||
Approx( 3.14150000000000018 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.str_hello == "goodbye"" type="CHECK">
|
||||
@@ -579,7 +583,9 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( x == Approx( 1.301 ) )
|
||||
with expansion:
|
||||
1.3 == Approx( 1.301 )
|
||||
1.30000000000000027
|
||||
==
|
||||
Approx( 1.30099999999999993 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
</testcase>
|
||||
@@ -827,14 +833,18 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one != Approx( 9.1f ) )
|
||||
with expansion:
|
||||
9.1f != Approx( 9.1000003815 )
|
||||
9.100000381f
|
||||
!=
|
||||
Approx( 9.10000038146972656 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.double_pi != Approx( 3.1415926535 )" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.double_pi != Approx( 3.1415926535 ) )
|
||||
with expansion:
|
||||
3.1415926535 != Approx( 3.1415926535 )
|
||||
3.14159265350000005
|
||||
!=
|
||||
Approx( 3.14159265350000005 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.str_hello != "hello"" type="CHECK">
|
||||
@@ -1010,21 +1020,21 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one < 9 )
|
||||
with expansion:
|
||||
9.1f < 9
|
||||
9.100000381f < 9
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.float_nine_point_one > 10" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one > 10 )
|
||||
with expansion:
|
||||
9.1f > 10
|
||||
9.100000381f > 10
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.float_nine_point_one > 9.2" type="CHECK">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one > 9.2 )
|
||||
with expansion:
|
||||
9.1f > 9.2
|
||||
9.100000381f > 9.19999999999999929
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="data.str_hello > "hello"" type="CHECK">
|
||||
@@ -1452,7 +1462,7 @@ at Exception.tests.cpp:<line number>
|
||||
<testcase classname="<exe-name>.global" name="Unexpected exceptions can be translated" time="{duration}" status="run">
|
||||
<error type="TEST_CASE">
|
||||
FAILED:
|
||||
3.14
|
||||
3.14000000000000012
|
||||
at Exception.tests.cpp:<line number>
|
||||
</error>
|
||||
</testcase>
|
||||
@@ -1921,7 +1931,6 @@ b1!
|
||||
</testcase>
|
||||
<testcase classname="<exe-name>.global" name="non streamable - with conv. op" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="non-copyable objects" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="normal_cdf" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="normal_quantile" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="not allowed" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="not prints unscoped info from previous failures" time="{duration}" status="run">
|
||||
|
@@ -121,7 +121,6 @@ at AssertionHandler.tests.cpp:<line number>
|
||||
<testCase name="estimate_clock_resolution" duration="{duration}"/>
|
||||
<testCase name="mean" duration="{duration}"/>
|
||||
<testCase name="measure" duration="{duration}"/>
|
||||
<testCase name="normal_cdf" duration="{duration}"/>
|
||||
<testCase name="normal_quantile" duration="{duration}"/>
|
||||
<testCase name="resolution" duration="{duration}"/>
|
||||
<testCase name="run_for_at_least, chronometer" duration="{duration}"/>
|
||||
@@ -622,35 +621,39 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 9.11f ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 9.1099996567 )
|
||||
9.100000381f
|
||||
==
|
||||
Approx( 9.10999965667724609 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.float_nine_point_one == Approx( 9.0f ))">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 9.0f ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 9.0 )
|
||||
9.100000381f == Approx( 9.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.float_nine_point_one == Approx( 1 ))">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 1 ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 1.0 )
|
||||
9.100000381f == Approx( 1.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.float_nine_point_one == Approx( 0 ))">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 0 ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 0.0 )
|
||||
9.100000381f == Approx( 0.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.double_pi == Approx( 3.1415 ))">
|
||||
FAILED:
|
||||
CHECK( data.double_pi == Approx( 3.1415 ) )
|
||||
with expansion:
|
||||
3.1415926535 == Approx( 3.1415 )
|
||||
3.14159265350000005
|
||||
==
|
||||
Approx( 3.14150000000000018 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.str_hello == "goodbye")">
|
||||
@@ -685,7 +688,9 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( x == Approx( 1.301 ) )
|
||||
with expansion:
|
||||
1.3 == Approx( 1.301 )
|
||||
1.30000000000000027
|
||||
==
|
||||
Approx( 1.30099999999999993 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
</testCase>
|
||||
@@ -702,14 +707,18 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one != Approx( 9.1f ) )
|
||||
with expansion:
|
||||
9.1f != Approx( 9.1000003815 )
|
||||
9.100000381f
|
||||
!=
|
||||
Approx( 9.10000038146972656 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.double_pi != Approx( 3.1415926535 ))">
|
||||
FAILED:
|
||||
CHECK( data.double_pi != Approx( 3.1415926535 ) )
|
||||
with expansion:
|
||||
3.1415926535 != Approx( 3.1415926535 )
|
||||
3.14159265350000005
|
||||
!=
|
||||
Approx( 3.14159265350000005 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.str_hello != "hello")">
|
||||
@@ -813,21 +822,21 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one < 9 )
|
||||
with expansion:
|
||||
9.1f < 9
|
||||
9.100000381f < 9
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="CHECK(data.float_nine_point_one > 10)">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one > 10 )
|
||||
with expansion:
|
||||
9.1f > 10
|
||||
9.100000381f > 10
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="CHECK(data.float_nine_point_one > 9.2)">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one > 9.2 )
|
||||
with expansion:
|
||||
9.1f > 9.2
|
||||
9.100000381f > 9.19999999999999929
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="CHECK(data.str_hello > "hello")">
|
||||
@@ -1009,7 +1018,7 @@ at Exception.tests.cpp:<line number>
|
||||
<testCase name="Unexpected exceptions can be translated" duration="{duration}">
|
||||
<error message="TEST_CASE()">
|
||||
FAILED:
|
||||
3.14
|
||||
3.14000000000000012
|
||||
at Exception.tests.cpp:<line number>
|
||||
</error>
|
||||
</testCase>
|
||||
|
@@ -120,7 +120,6 @@ at AssertionHandler.tests.cpp:<line number>
|
||||
<testCase name="estimate_clock_resolution" duration="{duration}"/>
|
||||
<testCase name="mean" duration="{duration}"/>
|
||||
<testCase name="measure" duration="{duration}"/>
|
||||
<testCase name="normal_cdf" duration="{duration}"/>
|
||||
<testCase name="normal_quantile" duration="{duration}"/>
|
||||
<testCase name="resolution" duration="{duration}"/>
|
||||
<testCase name="run_for_at_least, chronometer" duration="{duration}"/>
|
||||
@@ -621,35 +620,39 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 9.11f ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 9.1099996567 )
|
||||
9.100000381f
|
||||
==
|
||||
Approx( 9.10999965667724609 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.float_nine_point_one == Approx( 9.0f ))">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 9.0f ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 9.0 )
|
||||
9.100000381f == Approx( 9.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.float_nine_point_one == Approx( 1 ))">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 1 ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 1.0 )
|
||||
9.100000381f == Approx( 1.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.float_nine_point_one == Approx( 0 ))">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one == Approx( 0 ) )
|
||||
with expansion:
|
||||
9.1f == Approx( 0.0 )
|
||||
9.100000381f == Approx( 0.0 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.double_pi == Approx( 3.1415 ))">
|
||||
FAILED:
|
||||
CHECK( data.double_pi == Approx( 3.1415 ) )
|
||||
with expansion:
|
||||
3.1415926535 == Approx( 3.1415 )
|
||||
3.14159265350000005
|
||||
==
|
||||
Approx( 3.14150000000000018 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.str_hello == "goodbye")">
|
||||
@@ -684,7 +687,9 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( x == Approx( 1.301 ) )
|
||||
with expansion:
|
||||
1.3 == Approx( 1.301 )
|
||||
1.30000000000000027
|
||||
==
|
||||
Approx( 1.30099999999999993 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
</testCase>
|
||||
@@ -701,14 +706,18 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one != Approx( 9.1f ) )
|
||||
with expansion:
|
||||
9.1f != Approx( 9.1000003815 )
|
||||
9.100000381f
|
||||
!=
|
||||
Approx( 9.10000038146972656 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.double_pi != Approx( 3.1415926535 ))">
|
||||
FAILED:
|
||||
CHECK( data.double_pi != Approx( 3.1415926535 ) )
|
||||
with expansion:
|
||||
3.1415926535 != Approx( 3.1415926535 )
|
||||
3.14159265350000005
|
||||
!=
|
||||
Approx( 3.14159265350000005 )
|
||||
at Condition.tests.cpp:<line number>
|
||||
</skipped>
|
||||
<skipped message="CHECK(data.str_hello != "hello")">
|
||||
@@ -812,21 +821,21 @@ at Condition.tests.cpp:<line number>
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one < 9 )
|
||||
with expansion:
|
||||
9.1f < 9
|
||||
9.100000381f < 9
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="CHECK(data.float_nine_point_one > 10)">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one > 10 )
|
||||
with expansion:
|
||||
9.1f > 10
|
||||
9.100000381f > 10
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="CHECK(data.float_nine_point_one > 9.2)">
|
||||
FAILED:
|
||||
CHECK( data.float_nine_point_one > 9.2 )
|
||||
with expansion:
|
||||
9.1f > 9.2
|
||||
9.100000381f > 9.19999999999999929
|
||||
at Condition.tests.cpp:<line number>
|
||||
</failure>
|
||||
<failure message="CHECK(data.str_hello > "hello")">
|
||||
@@ -1008,7 +1017,7 @@ at Exception.tests.cpp:<line number>
|
||||
<testCase name="Unexpected exceptions can be translated" duration="{duration}">
|
||||
<error message="TEST_CASE()">
|
||||
FAILED:
|
||||
3.14
|
||||
3.14000000000000012
|
||||
at Exception.tests.cpp:<line number>
|
||||
</error>
|
||||
</testCase>
|
||||
|
@@ -495,17 +495,17 @@ ok {test-number} - x.size() > 0 for: 42 > 0
|
||||
# A Template product test case with array signature - std::array<int, 9>
|
||||
ok {test-number} - x.size() > 0 for: 9 > 0
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - d == 1.23_a for: 1.23 == Approx( 1.23 )
|
||||
ok {test-number} - d == 1.23_a for: 1.22999999999999998 == Approx( 1.22999999999999998 )
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - d != 1.22_a for: 1.23 != Approx( 1.22 )
|
||||
ok {test-number} - d != 1.22_a for: 1.22999999999999998 != Approx( 1.21999999999999997 )
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - -d == -1.23_a for: -1.23 == Approx( -1.23 )
|
||||
ok {test-number} - -d == -1.23_a for: -1.22999999999999998 == Approx( -1.22999999999999998 )
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - d == 1.2_a .epsilon(.1) for: 1.23 == Approx( 1.2 )
|
||||
ok {test-number} - d == 1.2_a .epsilon(.1) for: 1.22999999999999998 == Approx( 1.19999999999999996 )
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - d != 1.2_a .epsilon(.001) for: 1.23 != Approx( 1.2 )
|
||||
ok {test-number} - d != 1.2_a .epsilon(.001) for: 1.22999999999999998 != Approx( 1.19999999999999996 )
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - d == 1_a .epsilon(.3) for: 1.23 == Approx( 1.0 )
|
||||
ok {test-number} - d == 1_a .epsilon(.3) for: 1.22999999999999998 == Approx( 1.0 )
|
||||
# A couple of nested sections followed by a failure
|
||||
ok {test-number} - with 1 message: 'that's not flying - that's failing in style'
|
||||
# A couple of nested sections followed by a failure
|
||||
@@ -523,9 +523,9 @@ ok {test-number} - 104.0 == Approx(100.0).margin(4) for: 104.0 == Approx( 100.0
|
||||
# Absolute margin
|
||||
ok {test-number} - 104.0 != Approx(100.0).margin(3) for: 104.0 != Approx( 100.0 )
|
||||
# Absolute margin
|
||||
ok {test-number} - 100.3 != Approx(100.0) for: 100.3 != Approx( 100.0 )
|
||||
ok {test-number} - 100.3 != Approx(100.0) for: 100.29999999999999716 != Approx( 100.0 )
|
||||
# Absolute margin
|
||||
ok {test-number} - 100.3 == Approx(100.0).margin(0.5) for: 100.3 == Approx( 100.0 )
|
||||
ok {test-number} - 100.3 == Approx(100.0).margin(0.5) for: 100.29999999999999716 == Approx( 100.0 )
|
||||
# An expression with side-effects should only be evaluated once
|
||||
ok {test-number} - i++ == 7 for: 7 == 7
|
||||
# An expression with side-effects should only be evaluated once
|
||||
@@ -561,15 +561,15 @@ ok {test-number} - 245.0f == Approx(245.25f).margin(0.25f) for: 245.0f == Approx
|
||||
# Approx with exactly-representable margin
|
||||
ok {test-number} - 245.5f == Approx(245.25f).margin(0.25f) for: 245.5f == Approx( 245.25 )
|
||||
# Approximate PI
|
||||
ok {test-number} - divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) for: 3.1428571429 == Approx( 3.141 )
|
||||
ok {test-number} - divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) for: 3.14285714285714279 == Approx( 3.14100000000000001 )
|
||||
# Approximate PI
|
||||
ok {test-number} - divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) for: 3.1428571429 != Approx( 3.141 )
|
||||
ok {test-number} - divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) for: 3.14285714285714279 != Approx( 3.14100000000000001 )
|
||||
# Approximate comparisons with different epsilons
|
||||
ok {test-number} - d != Approx( 1.231 ) for: 1.23 != Approx( 1.231 )
|
||||
ok {test-number} - d != Approx( 1.231 ) for: 1.22999999999999998 != Approx( 1.23100000000000009 )
|
||||
# Approximate comparisons with different epsilons
|
||||
ok {test-number} - d == Approx( 1.231 ).epsilon( 0.1 ) for: 1.23 == Approx( 1.231 )
|
||||
ok {test-number} - d == Approx( 1.231 ).epsilon( 0.1 ) for: 1.22999999999999998 == Approx( 1.23100000000000009 )
|
||||
# Approximate comparisons with floats
|
||||
ok {test-number} - 1.23f == Approx( 1.23f ) for: 1.23f == Approx( 1.2300000191 )
|
||||
ok {test-number} - 1.23f == Approx( 1.23f ) for: 1.230000019f == Approx( 1.23000001907348633 )
|
||||
# Approximate comparisons with floats
|
||||
ok {test-number} - 0.0f == Approx( 0.0f ) for: 0.0f == Approx( 0.0 )
|
||||
# Approximate comparisons with ints
|
||||
@@ -583,9 +583,9 @@ ok {test-number} - 0 == Approx( dZero) for: 0 == Approx( 0.0 )
|
||||
# Approximate comparisons with mixed numeric types
|
||||
ok {test-number} - 0 == Approx( dSmall ).margin( 0.001 ) for: 0 == Approx( 0.00001 )
|
||||
# Approximate comparisons with mixed numeric types
|
||||
ok {test-number} - 1.234f == Approx( dMedium ) for: 1.234f == Approx( 1.234 )
|
||||
ok {test-number} - 1.234f == Approx( dMedium ) for: 1.233999968f == Approx( 1.23399999999999999 )
|
||||
# Approximate comparisons with mixed numeric types
|
||||
ok {test-number} - dMedium == Approx( 1.234f ) for: 1.234 == Approx( 1.2339999676 )
|
||||
ok {test-number} - dMedium == Approx( 1.234f ) for: 1.23399999999999999 == Approx( 1.23399996757507324 )
|
||||
# Arbitrary predicate matcher
|
||||
ok {test-number} - 1, Predicate<int>( alwaysTrue, "always true" ) for: 1 matches predicate: "always true"
|
||||
# Arbitrary predicate matcher
|
||||
@@ -967,7 +967,7 @@ not ok {test-number} - unexpected exception with message: 'custom exception - no
|
||||
# Custom std-exceptions can be custom translated
|
||||
not ok {test-number} - unexpected exception with message: 'custom std exception'
|
||||
# Default scale is invisible to comparison
|
||||
ok {test-number} - 101.000001 != Approx(100).epsilon(0.01) for: 101.000001 != Approx( 100.0 )
|
||||
ok {test-number} - 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
||||
# Default scale is invisible to comparison
|
||||
ok {test-number} - std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
||||
# Directly creating an EnumInfo
|
||||
@@ -999,7 +999,7 @@ ok {test-number} - stringify( Bikeshed::Colours::Red ) == "Red" for: "Red" == "R
|
||||
# Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( Bikeshed::Colours::Blue ) == "Blue" for: "Blue" == "Blue"
|
||||
# Epsilon only applies to Approx's value
|
||||
ok {test-number} - 101.01 != Approx(100).epsilon(0.01) for: 101.01 != Approx( 100.0 )
|
||||
ok {test-number} - 101.01 != Approx(100).epsilon(0.01) for: 101.01000000000000512 != Approx( 100.0 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.int_seven == 6 for: 7 == 6
|
||||
# Equality checks that should fail
|
||||
@@ -1007,15 +1007,15 @@ not ok {test-number} - data.int_seven == 8 for: 7 == 8
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.int_seven == 0 for: 7 == 0
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 9.11f ) for: 9.1f == Approx( 9.1099996567 )
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 9.11f ) for: 9.100000381f == Approx( 9.10999965667724609 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 9.0f ) for: 9.1f == Approx( 9.0 )
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 9.0f ) for: 9.100000381f == Approx( 9.0 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 1 ) for: 9.1f == Approx( 1.0 )
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 1 ) for: 9.100000381f == Approx( 1.0 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 0 ) for: 9.1f == Approx( 0.0 )
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 0 ) for: 9.100000381f == Approx( 0.0 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.double_pi == Approx( 3.1415 ) for: 3.1415926535 == Approx( 3.1415 )
|
||||
not ok {test-number} - data.double_pi == Approx( 3.1415 ) for: 3.14159265350000005 == Approx( 3.14150000000000018 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.str_hello == "goodbye" for: "hello" == "goodbye"
|
||||
# Equality checks that should fail
|
||||
@@ -1025,13 +1025,13 @@ not ok {test-number} - data.str_hello == "hello1" for: "hello" == "hello1"
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.str_hello.size() == 6 for: 5 == 6
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - x == Approx( 1.301 ) for: 1.3 == Approx( 1.301 )
|
||||
not ok {test-number} - x == Approx( 1.301 ) for: 1.30000000000000027 == Approx( 1.30099999999999993 )
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - data.int_seven == 7 for: 7 == 7
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one == Approx( 9.1f ) for: 9.1f == Approx( 9.1000003815 )
|
||||
ok {test-number} - data.float_nine_point_one == Approx( 9.1f ) for: 9.100000381f == Approx( 9.10000038146972656 )
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - data.double_pi == Approx( 3.1415926535 ) for: 3.1415926535 == Approx( 3.1415926535 )
|
||||
ok {test-number} - data.double_pi == Approx( 3.1415926535 ) for: 3.14159265350000005 == Approx( 3.14159265350000005 )
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - data.str_hello == "hello" for: "hello" == "hello"
|
||||
# Equality checks that should succeed
|
||||
@@ -1039,7 +1039,7 @@ ok {test-number} - "hello" == data.str_hello for: "hello" == "hello"
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - data.str_hello.size() == 5 for: 5 == 5
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - x == Approx( 1.3 ) for: 1.3 == Approx( 1.3 )
|
||||
ok {test-number} - x == Approx( 1.3 ) for: 1.30000000000000027 == Approx( 1.30000000000000004 )
|
||||
# Equals
|
||||
ok {test-number} - testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring"
|
||||
# Equals
|
||||
@@ -1125,23 +1125,23 @@ ok {test-number} - Factorial(10) == 3628800 for: 3628800 (0x<hex digits>) == 362
|
||||
# Filter generator throws exception for empty generator
|
||||
ok {test-number} - filter( []( int ) { return false; }, value( 3 ) ), Catch::GeneratorException
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.1 are within 10% of each other
|
||||
ok {test-number} - 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.09999999999999964 are within 10% of each other
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.2 are within 10% of each other
|
||||
ok {test-number} - 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.19999999999999929 are within 10% of each other
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0 are within 99% of each other
|
||||
ok {test-number} - 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0.0 are within 99% of each other
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - -0., WithinRel( 0. ) for: -0.0 and 0 are within 2.22045e-12% of each other
|
||||
ok {test-number} - -0., WithinRel( 0. ) for: -0.0 and 0.0 are within 2.22045e-12% of each other
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - v1, WithinRel( v2 ) for: 0.0 and 2.22507e-308 are within 2.22045e-12% of each other
|
||||
ok {test-number} - v1, WithinRel( v2 ) for: 0.0 and 0.0 are within 2.22045e-12% of each other
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 1., WithinAbs( 1., 0 ) for: 1.0 is within 0.0 of 1.0
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 0., WithinAbs( 1., 1 ) for: 0.0 is within 1.0 of 1.0
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0
|
||||
ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.98999999999999999 of 1.0
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0
|
||||
ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.98999999999999999 of 1.0
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 11., !WithinAbs( 10., 0.5 ) for: 11.0 not is within 0.5 of 10.0
|
||||
# Floating point matchers: double
|
||||
@@ -1149,11 +1149,11 @@ ok {test-number} - 10., !WithinAbs( 11., 0.5 ) for: 10.0 not is within 0.5 of 11
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - -10., WithinAbs( -10., 0.5 ) for: -10.0 is within 0.5 of -10.0
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.6
|
||||
ok {test-number} - -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.59999999999999964
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 1., WithinULP( 1., 0 ) for: 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00])
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.0 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00])
|
||||
ok {test-number} - nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.00000000000000022 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00])
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 0., WithinULP( nextafter( 0., 1. ), 1 ) for: 0.0 is within 1 ULPs of 4.9406564584124654e-324 ([0.0000000000000000e+00, 9.8813129168249309e-324])
|
||||
# Floating point matchers: double
|
||||
@@ -1169,7 +1169,7 @@ ok {test-number} - 1., WithinAbs( 1., 0.5 ) || WithinULP( 2., 1 ) for: 1.0 ( is
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 1., WithinAbs( 2., 0.5 ) || WithinULP( 1., 0 ) for: 1.0 ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) )
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0 are within 10% of each other )
|
||||
ok {test-number} - 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0.0 are within 10% of each other )
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - WithinAbs( 1., 0. )
|
||||
# Floating point matchers: double
|
||||
@@ -1185,23 +1185,23 @@ ok {test-number} - WithinRel( 1., 1. ), std::domain_error
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 1., !IsNaN() for: 1.0 not is NaN
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.1 are within 10% of each other
|
||||
ok {test-number} - 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.10000038146972656 are within 10% of each other
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.2 are within 10% of each other
|
||||
ok {test-number} - 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.19999980926513672 are within 10% of each other
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0 are within 99% of each other
|
||||
ok {test-number} - 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0.0 are within 99% of each other
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - -0.f, WithinRel( 0.f ) for: -0.0f and 0 are within 0.00119209% of each other
|
||||
ok {test-number} - -0.f, WithinRel( 0.f ) for: -0.0f and 0.0 are within 0.00119209% of each other
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - v1, WithinRel( v2 ) for: 0.0f and 1.17549e-38 are within 0.00119209% of each other
|
||||
ok {test-number} - v1, WithinRel( v2 ) for: 0.0f and 0.0 are within 0.00119209% of each other
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 1.f, WithinAbs( 1.f, 0 ) for: 1.0f is within 0.0 of 1.0
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.f, WithinAbs( 1.f, 1 ) for: 0.0f is within 1.0 of 1.0
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0
|
||||
ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.99000000953674316 of 1.0
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0
|
||||
ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.99000000953674316 of 1.0
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.f, WithinAbs( -0.f, 0 ) for: 0.0f is within 0.0 of -0.0
|
||||
# Floating point matchers: float
|
||||
@@ -1211,13 +1211,13 @@ ok {test-number} - 10.f, !WithinAbs( 11.f, 0.5f ) for: 10.0f not is within 0.5 o
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - -10.f, WithinAbs( -10.f, 0.5f ) for: -10.0f is within 0.5 of -10.0
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.6000003815
|
||||
ok {test-number} - -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.60000038146972656
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 1.f, WithinULP( 1.f, 0 ) for: 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00])
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - -1.f, WithinULP( -1.f, 0 ) for: -1.0f is within 0 ULPs of -1.00000000e+00f ([-1.00000000e+00, -1.00000000e+00])
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.0f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00])
|
||||
ok {test-number} - nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.000000119f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00])
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.f, WithinULP( nextafter( 0.f, 1.f ), 1 ) for: 0.0f is within 1 ULPs of 1.40129846e-45f ([0.00000000e+00, 2.80259693e-45])
|
||||
# Floating point matchers: float
|
||||
@@ -1233,7 +1233,7 @@ ok {test-number} - 1.f, WithinAbs( 1.f, 0.5 ) || WithinULP( 1.f, 1 ) for: 1.0f (
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 1.f, WithinAbs( 2.f, 0.5 ) || WithinULP( 1.f, 0 ) for: 1.0f ( is within 0.5 of 2.0 or is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) )
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.001 of 0.0 or and 0 are within 10% of each other )
|
||||
ok {test-number} - 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.00100000004749745 of 0.0 or and 0.0 are within 10% of each other )
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - WithinAbs( 1.f, 0.f )
|
||||
# Floating point matchers: float
|
||||
@@ -1593,83 +1593,83 @@ ok {test-number} - gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) wit
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.9 == Approx( -0.9 ) with 1 message: 'Current expected value is -0.9'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.90000000000000002 == Approx( -0.90000000000000002 ) with 1 message: 'Current expected value is -0.9'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.9'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.8 == Approx( -0.8 ) with 1 message: 'Current expected value is -0.8'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.80000000000000004 == Approx( -0.80000000000000004 ) with 1 message: 'Current expected value is -0.8'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.8'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.70000000000000007 == Approx( -0.70000000000000007 ) with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.6 == Approx( -0.6 ) with 1 message: 'Current expected value is -0.6'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.60000000000000009 == Approx( -0.60000000000000009 ) with 1 message: 'Current expected value is -0.6'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.6'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.5 == Approx( -0.5 ) with 1 message: 'Current expected value is -0.5'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.50000000000000011 == Approx( -0.50000000000000011 ) with 1 message: 'Current expected value is -0.5'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.5'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.40000000000000013 == Approx( -0.40000000000000013 ) with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.3 == Approx( -0.3 ) with 1 message: 'Current expected value is -0.3'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.30000000000000016 == Approx( -0.30000000000000016 ) with 1 message: 'Current expected value is -0.3'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.3'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.2 == Approx( -0.2 ) with 1 message: 'Current expected value is -0.2'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.20000000000000015 == Approx( -0.20000000000000015 ) with 1 message: 'Current expected value is -0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.10000000000000014 == Approx( -0.10000000000000014 ) with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.0 == Approx( -0.0 ) with 1 message: 'Current expected value is -1.38778e-16'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.00000000000000014 == Approx( -0.00000000000000014 ) with 1 message: 'Current expected value is -1.38778e-16'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1.38778e-16'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.1 == Approx( 0.1 ) with 1 message: 'Current expected value is 0.1'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.09999999999999987 == Approx( 0.09999999999999987 ) with 1 message: 'Current expected value is 0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.19999999999999987 == Approx( 0.19999999999999987 ) with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.3 == Approx( 0.3 ) with 1 message: 'Current expected value is 0.3'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.29999999999999988 == Approx( 0.29999999999999988 ) with 1 message: 'Current expected value is 0.3'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.3'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.4 == Approx( 0.4 ) with 1 message: 'Current expected value is 0.4'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.39999999999999991 == Approx( 0.39999999999999991 ) with 1 message: 'Current expected value is 0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.49999999999999989 == Approx( 0.49999999999999989 ) with 1 message: 'Current expected value is 0.5'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.5'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.6 == Approx( 0.6 ) with 1 message: 'Current expected value is 0.6'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.59999999999999987 == Approx( 0.59999999999999987 ) with 1 message: 'Current expected value is 0.6'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.6'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.7 == Approx( 0.7 ) with 1 message: 'Current expected value is 0.7'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.69999999999999984 == Approx( 0.69999999999999984 ) with 1 message: 'Current expected value is 0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.8 == Approx( 0.8 ) with 1 message: 'Current expected value is 0.8'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.79999999999999982 == Approx( 0.79999999999999982 ) with 1 message: 'Current expected value is 0.8'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.8'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.9 == Approx( 0.9 ) with 1 message: 'Current expected value is 0.9'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.8999999999999998 == Approx( 0.8999999999999998 ) with 1 message: 'Current expected value is 0.9'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.9'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx( rangeEnd ) for: 1.0 == Approx( 1.0 )
|
||||
ok {test-number} - gen.get() == Approx( rangeEnd ) for: 0.99999999999999978 == Approx( 1.0 )
|
||||
# Generators internals
|
||||
ok {test-number} - !(gen.next()) for: !false
|
||||
# Generators internals
|
||||
@@ -1677,19 +1677,19 @@ ok {test-number} - gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) wit
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.69999999999999996 == Approx( -0.69999999999999996 ) with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.39999999999999997 == Approx( -0.39999999999999997 ) with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.09999999999999998 == Approx( -0.09999999999999998 ) with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.20000000000000001 == Approx( 0.20000000000000001 ) with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
@@ -1703,19 +1703,19 @@ ok {test-number} - gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) wit
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.69999999999999996 == Approx( -0.69999999999999996 ) with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.39999999999999997 == Approx( -0.39999999999999997 ) with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.09999999999999998 == Approx( -0.09999999999999998 ) with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.20000000000000001 == Approx( 0.20000000000000001 ) with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
@@ -1777,13 +1777,13 @@ ok {test-number} - gen.get() == -7 for: -7 == -7
|
||||
# Generators internals
|
||||
ok {test-number} - !(gen.next()) for: !false
|
||||
# Greater-than inequalities with different epsilons
|
||||
ok {test-number} - d >= Approx( 1.22 ) for: 1.23 >= Approx( 1.22 )
|
||||
ok {test-number} - d >= Approx( 1.22 ) for: 1.22999999999999998 >= Approx( 1.21999999999999997 )
|
||||
# Greater-than inequalities with different epsilons
|
||||
ok {test-number} - d >= Approx( 1.23 ) for: 1.23 >= Approx( 1.23 )
|
||||
ok {test-number} - d >= Approx( 1.23 ) for: 1.22999999999999998 >= Approx( 1.22999999999999998 )
|
||||
# Greater-than inequalities with different epsilons
|
||||
ok {test-number} - !(d >= Approx( 1.24 )) for: !(1.23 >= Approx( 1.24 ))
|
||||
ok {test-number} - !(d >= Approx( 1.24 )) for: !(1.22999999999999998 >= Approx( 1.23999999999999999 ))
|
||||
# Greater-than inequalities with different epsilons
|
||||
ok {test-number} - d >= Approx( 1.24 ).epsilon(0.1) for: 1.23 >= Approx( 1.24 )
|
||||
ok {test-number} - d >= Approx( 1.24 ).epsilon(0.1) for: 1.22999999999999998 >= Approx( 1.23999999999999999 )
|
||||
# Hashers with different seed produce different hash with same test case
|
||||
ok {test-number} - h1( dummy ) != h2( dummy ) for: 3422778688 (0x<hex digits>) != 130711275 (0x<hex digits>)
|
||||
# Hashers with same seed produce same hash
|
||||
@@ -1837,9 +1837,9 @@ not ok {test-number} - unexpected exception with message: 'Exception translation
|
||||
# Inequality checks that should fail
|
||||
not ok {test-number} - data.int_seven != 7 for: 7 != 7
|
||||
# Inequality checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one != Approx( 9.1f ) for: 9.1f != Approx( 9.1000003815 )
|
||||
not ok {test-number} - data.float_nine_point_one != Approx( 9.1f ) for: 9.100000381f != Approx( 9.10000038146972656 )
|
||||
# Inequality checks that should fail
|
||||
not ok {test-number} - data.double_pi != Approx( 3.1415926535 ) for: 3.1415926535 != Approx( 3.1415926535 )
|
||||
not ok {test-number} - data.double_pi != Approx( 3.1415926535 ) for: 3.14159265350000005 != Approx( 3.14159265350000005 )
|
||||
# Inequality checks that should fail
|
||||
not ok {test-number} - data.str_hello != "hello" for: "hello" != "hello"
|
||||
# Inequality checks that should fail
|
||||
@@ -1849,15 +1849,15 @@ ok {test-number} - data.int_seven != 6 for: 7 != 6
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.int_seven != 8 for: 7 != 8
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 9.11f ) for: 9.1f != Approx( 9.1099996567 )
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 9.11f ) for: 9.100000381f != Approx( 9.10999965667724609 )
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 9.0f ) for: 9.1f != Approx( 9.0 )
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 9.0f ) for: 9.100000381f != Approx( 9.0 )
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 1 ) for: 9.1f != Approx( 1.0 )
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 1 ) for: 9.100000381f != Approx( 1.0 )
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 0 ) for: 9.1f != Approx( 0.0 )
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 0 ) for: 9.100000381f != Approx( 0.0 )
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.double_pi != Approx( 3.1415 ) for: 3.1415926535 != Approx( 3.1415 )
|
||||
ok {test-number} - data.double_pi != Approx( 3.1415 ) for: 3.14159265350000005 != Approx( 3.14150000000000018 )
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.str_hello != "goodbye" for: "hello" != "goodbye"
|
||||
# Inequality checks that should succeed
|
||||
@@ -1905,13 +1905,13 @@ ok {test-number} - sstream.str() == "\"\\\\/\\t\\r\\n\"" for: ""\\/\t\r\n"" == "
|
||||
# Lambdas in assertions
|
||||
ok {test-number} - []() { return true; }() for: true
|
||||
# Less-than inequalities with different epsilons
|
||||
ok {test-number} - d <= Approx( 1.24 ) for: 1.23 <= Approx( 1.24 )
|
||||
ok {test-number} - d <= Approx( 1.24 ) for: 1.22999999999999998 <= Approx( 1.23999999999999999 )
|
||||
# Less-than inequalities with different epsilons
|
||||
ok {test-number} - d <= Approx( 1.23 ) for: 1.23 <= Approx( 1.23 )
|
||||
ok {test-number} - d <= Approx( 1.23 ) for: 1.22999999999999998 <= Approx( 1.22999999999999998 )
|
||||
# Less-than inequalities with different epsilons
|
||||
ok {test-number} - !(d <= Approx( 1.22 )) for: !(1.23 <= Approx( 1.22 ))
|
||||
ok {test-number} - !(d <= Approx( 1.22 )) for: !(1.22999999999999998 <= Approx( 1.21999999999999997 ))
|
||||
# Less-than inequalities with different epsilons
|
||||
ok {test-number} - d <= Approx( 1.22 ).epsilon(0.1) for: 1.23 <= Approx( 1.22 )
|
||||
ok {test-number} - d <= Approx( 1.22 ).epsilon(0.1) for: 1.22999999999999998 <= Approx( 1.21999999999999997 )
|
||||
# ManuallyRegistered
|
||||
ok {test-number} - with 1 message: 'was called'
|
||||
# Matchers can be (AllOf) composed with the && operator
|
||||
@@ -2041,11 +2041,11 @@ not ok {test-number} - data.int_seven >= 8 for: 7 >= 8
|
||||
# Ordering comparison checks that should fail
|
||||
not ok {test-number} - data.int_seven <= 6 for: 7 <= 6
|
||||
# Ordering comparison checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one < 9 for: 9.1f < 9
|
||||
not ok {test-number} - data.float_nine_point_one < 9 for: 9.100000381f < 9
|
||||
# Ordering comparison checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one > 10 for: 9.1f > 10
|
||||
not ok {test-number} - data.float_nine_point_one > 10 for: 9.100000381f > 10
|
||||
# Ordering comparison checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one > 9.2 for: 9.1f > 9.2
|
||||
not ok {test-number} - data.float_nine_point_one > 9.2 for: 9.100000381f > 9.19999999999999929
|
||||
# Ordering comparison checks that should fail
|
||||
not ok {test-number} - data.str_hello > "hello" for: "hello" > "hello"
|
||||
# Ordering comparison checks that should fail
|
||||
@@ -2079,11 +2079,11 @@ ok {test-number} - data.int_seven <= 7 for: 7 <= 7
|
||||
# Ordering comparison checks that should succeed
|
||||
ok {test-number} - data.int_seven <= 8 for: 7 <= 8
|
||||
# Ordering comparison checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one > 9 for: 9.1f > 9
|
||||
ok {test-number} - data.float_nine_point_one > 9 for: 9.100000381f > 9
|
||||
# Ordering comparison checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one < 10 for: 9.1f < 10
|
||||
ok {test-number} - data.float_nine_point_one < 10 for: 9.100000381f < 10
|
||||
# Ordering comparison checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one < 9.2 for: 9.1f < 9.2
|
||||
ok {test-number} - data.float_nine_point_one < 9.2 for: 9.100000381f < 9.19999999999999929
|
||||
# Ordering comparison checks that should succeed
|
||||
ok {test-number} - data.str_hello <= "hello" for: "hello" <= "hello"
|
||||
# Ordering comparison checks that should succeed
|
||||
@@ -2419,7 +2419,7 @@ ok {test-number} - config.benchmarkResamples == 20000 for: 20000 (0x<hex digits>
|
||||
# Process can be configured on command line
|
||||
ok {test-number} - cli.parse({ "test", "--benchmark-confidence-interval=0.99" }) for: {?}
|
||||
# Process can be configured on command line
|
||||
ok {test-number} - config.benchmarkConfidenceInterval == Catch::Approx(0.99) for: 0.99 == Approx( 0.99 )
|
||||
ok {test-number} - config.benchmarkConfidenceInterval == Catch::Approx(0.99) for: 0.98999999999999999 == Approx( 0.98999999999999999 )
|
||||
# Process can be configured on command line
|
||||
ok {test-number} - cli.parse({ "test", "--benchmark-no-analysis" }) for: {?}
|
||||
# Process can be configured on command line
|
||||
@@ -2600,21 +2600,21 @@ A string sent directly to stdout
|
||||
A string sent directly to stderr
|
||||
A string sent to stderr via clog
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - d == Approx( 1.23 ) for: 1.23 == Approx( 1.23 )
|
||||
ok {test-number} - d == Approx( 1.23 ) for: 1.22999999999999998 == Approx( 1.22999999999999998 )
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - d != Approx( 1.22 ) for: 1.23 != Approx( 1.22 )
|
||||
ok {test-number} - d != Approx( 1.22 ) for: 1.22999999999999998 != Approx( 1.21999999999999997 )
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - d != Approx( 1.24 ) for: 1.23 != Approx( 1.24 )
|
||||
ok {test-number} - d != Approx( 1.24 ) for: 1.22999999999999998 != Approx( 1.23999999999999999 )
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - d == 1.23_a for: 1.23 == Approx( 1.23 )
|
||||
ok {test-number} - d == 1.23_a for: 1.22999999999999998 == Approx( 1.22999999999999998 )
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - d != 1.22_a for: 1.23 != Approx( 1.22 )
|
||||
ok {test-number} - d != 1.22_a for: 1.22999999999999998 != Approx( 1.21999999999999997 )
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - Approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23
|
||||
ok {test-number} - Approx( d ) == 1.23 for: Approx( 1.22999999999999998 ) == 1.22999999999999998
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - Approx( d ) != 1.22 for: Approx( 1.23 ) != 1.22
|
||||
ok {test-number} - Approx( d ) != 1.22 for: Approx( 1.22999999999999998 ) != 1.21999999999999997
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - Approx( d ) != 1.24 for: Approx( 1.23 ) != 1.24
|
||||
ok {test-number} - Approx( d ) != 1.24 for: Approx( 1.22999999999999998 ) != 1.23999999999999999
|
||||
Message from section one
|
||||
Message from section two
|
||||
# StartsWith string matcher
|
||||
@@ -3326,7 +3326,7 @@ ok {test-number} - vector_a, RangeEquals( array_a_plus_1, close_enough ) for: {
|
||||
# Type conversions of RangeEquals and similar
|
||||
ok {test-number} - vector_a, UnorderedRangeEquals( array_a_plus_1, close_enough ) for: { 1, 2, 3 } unordered elements are { 2, 3, 4 }
|
||||
# Unexpected exceptions can be translated
|
||||
not ok {test-number} - unexpected exception with message: '3.14'
|
||||
not ok {test-number} - unexpected exception with message: '3.14000000000000012'
|
||||
# Upcasting special member functions
|
||||
ok {test-number} - bptr->i == 3 for: 3 == 3
|
||||
# Upcasting special member functions
|
||||
@@ -3618,21 +3618,21 @@ ok {test-number} - unrelated::ADL_size{}, SizeIs(12) for: {?} has size == 12
|
||||
# Usage of the SizeIs range matcher
|
||||
ok {test-number} - has_size{}, SizeIs(13) for: {?} has size == 13
|
||||
# Use a custom approx
|
||||
ok {test-number} - d == approx( 1.23 ) for: 1.23 == Approx( 1.23 )
|
||||
ok {test-number} - d == approx( 1.23 ) for: 1.22999999999999998 == Approx( 1.22999999999999998 )
|
||||
# Use a custom approx
|
||||
ok {test-number} - d == approx( 1.22 ) for: 1.23 == Approx( 1.22 )
|
||||
ok {test-number} - d == approx( 1.22 ) for: 1.22999999999999998 == Approx( 1.21999999999999997 )
|
||||
# Use a custom approx
|
||||
ok {test-number} - d == approx( 1.24 ) for: 1.23 == Approx( 1.24 )
|
||||
ok {test-number} - d == approx( 1.24 ) for: 1.22999999999999998 == Approx( 1.23999999999999999 )
|
||||
# Use a custom approx
|
||||
ok {test-number} - d != approx( 1.25 ) for: 1.23 != Approx( 1.25 )
|
||||
ok {test-number} - d != approx( 1.25 ) for: 1.22999999999999998 != Approx( 1.25 )
|
||||
# Use a custom approx
|
||||
ok {test-number} - approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23
|
||||
ok {test-number} - approx( d ) == 1.23 for: Approx( 1.22999999999999998 ) == 1.22999999999999998
|
||||
# Use a custom approx
|
||||
ok {test-number} - approx( d ) == 1.22 for: Approx( 1.23 ) == 1.22
|
||||
ok {test-number} - approx( d ) == 1.22 for: Approx( 1.22999999999999998 ) == 1.21999999999999997
|
||||
# Use a custom approx
|
||||
ok {test-number} - approx( d ) == 1.24 for: Approx( 1.23 ) == 1.24
|
||||
ok {test-number} - approx( d ) == 1.24 for: Approx( 1.22999999999999998 ) == 1.23999999999999999
|
||||
# Use a custom approx
|
||||
ok {test-number} - approx( d ) != 1.25 for: Approx( 1.23 ) != 1.25
|
||||
ok {test-number} - approx( d ) != 1.25 for: Approx( 1.22999999999999998 ) != 1.25
|
||||
# Variadic macros
|
||||
ok {test-number} - with 1 message: 'no assertions'
|
||||
# Vector Approx matcher
|
||||
@@ -3958,11 +3958,11 @@ ok {test-number} - # SKIP 'skipping because answer = 43'
|
||||
# empty tags are not allowed
|
||||
ok {test-number} - Catch::TestCaseInfo("", { "test with an empty tag", "[]" }, dummySourceLineInfo)
|
||||
# erfc_inv
|
||||
ok {test-number} - erfc_inv(1.103560) == Approx(-0.09203687623843015) for: -0.0920368762 == Approx( -0.0920368762 )
|
||||
ok {test-number} - erfc_inv(1.103560) == Approx(-0.09203687623843015) for: -0.09203687623843014 == Approx( -0.09203687623843015 )
|
||||
# erfc_inv
|
||||
ok {test-number} - erfc_inv(1.067400) == Approx(-0.05980291115763361) for: -0.0598029112 == Approx( -0.0598029112 )
|
||||
ok {test-number} - erfc_inv(1.067400) == Approx(-0.05980291115763361) for: -0.05980291115763361 == Approx( -0.05980291115763361 )
|
||||
# erfc_inv
|
||||
ok {test-number} - erfc_inv(0.050000) == Approx(1.38590382434967796) for: 1.3859038243 == Approx( 1.3859038243 )
|
||||
ok {test-number} - erfc_inv(0.050000) == Approx(1.38590382434967796) for: 1.38590382434967774 == Approx( 1.38590382434967796 )
|
||||
# estimate_clock_resolution
|
||||
ok {test-number} - res.mean.count() == rate for: 2000.0 == 2000 (0x<hex digits>)
|
||||
# estimate_clock_resolution
|
||||
@@ -4107,22 +4107,12 @@ ok {test-number} - # SKIP
|
||||
ok {test-number} - s == "7" for: "7" == "7"
|
||||
# non-copyable objects
|
||||
ok {test-number} - ti == typeid(int) for: {?} == {?}
|
||||
# normal_cdf
|
||||
ok {test-number} - normal_cdf(0.000000) == Approx(0.50000000000000000) for: 0.5 == Approx( 0.5 )
|
||||
# normal_cdf
|
||||
ok {test-number} - normal_cdf(1.000000) == Approx(0.84134474606854293) for: 0.8413447461 == Approx( 0.8413447461 )
|
||||
# normal_cdf
|
||||
ok {test-number} - normal_cdf(-1.000000) == Approx(0.15865525393145705) for: 0.1586552539 == Approx( 0.1586552539 )
|
||||
# normal_cdf
|
||||
ok {test-number} - normal_cdf(2.809729) == Approx(0.99752083845315409) for: 0.9975208385 == Approx( 0.9975208385 )
|
||||
# normal_cdf
|
||||
ok {test-number} - normal_cdf(-1.352570) == Approx(0.08809652095066035) for: 0.088096521 == Approx( 0.088096521 )
|
||||
# normal_quantile
|
||||
ok {test-number} - normal_quantile(0.551780) == Approx(0.13015979861484198) for: 0.1301597986 == Approx( 0.1301597986 )
|
||||
ok {test-number} - normal_quantile(0.551780) == Approx(0.13015979861484198) for: 0.13015979861484195 == Approx( 0.13015979861484198 )
|
||||
# normal_quantile
|
||||
ok {test-number} - normal_quantile(0.533700) == Approx(0.08457408802851875) for: 0.084574088 == Approx( 0.084574088 )
|
||||
ok {test-number} - normal_quantile(0.533700) == Approx(0.08457408802851875) for: 0.08457408802851875 == Approx( 0.08457408802851875 )
|
||||
# normal_quantile
|
||||
ok {test-number} - normal_quantile(0.025000) == Approx(-1.95996398454005449) for: -1.9599639845 == Approx( -1.9599639845 )
|
||||
ok {test-number} - normal_quantile(0.025000) == Approx(-1.95996398454005449) for: -1.95996398454005405 == Approx( -1.95996398454005449 )
|
||||
# not allowed
|
||||
ok {test-number} -
|
||||
# not prints unscoped info from previous failures
|
||||
@@ -4406,15 +4396,15 @@ ok {test-number} - "{ }" == ::Catch::Detail::stringify(type{}) for: "{ }" == "{
|
||||
# tuple<>
|
||||
ok {test-number} - "{ }" == ::Catch::Detail::stringify(value) for: "{ }" == "{ }"
|
||||
# tuple<float,int>
|
||||
ok {test-number} - "1.2f" == ::Catch::Detail::stringify(float(1.2)) for: "1.2f" == "1.2f"
|
||||
ok {test-number} - "1.5f" == ::Catch::Detail::stringify(float(1.5)) for: "1.5f" == "1.5f"
|
||||
# tuple<float,int>
|
||||
ok {test-number} - "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) for: "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
|
||||
ok {test-number} - "{ 1.5f, 0 }" == ::Catch::Detail::stringify(type{1.5f,0}) for: "{ 1.5f, 0 }" == "{ 1.5f, 0 }"
|
||||
# tuple<int>
|
||||
ok {test-number} - "{ 0 }" == ::Catch::Detail::stringify(type{0}) for: "{ 0 }" == "{ 0 }"
|
||||
# tuple<string,string>
|
||||
ok {test-number} - "{ \"hello\", \"world\" }" == ::Catch::Detail::stringify(type{"hello","world"}) for: "{ "hello", "world" }" == "{ "hello", "world" }"
|
||||
# tuple<tuple<int>,tuple<>,float>
|
||||
ok {test-number} - "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) for: "{ { 42 }, { }, 1.2f }" == "{ { 42 }, { }, 1.2f }"
|
||||
ok {test-number} - "{ { 42 }, { }, 1.5f }" == ::Catch::Detail::stringify(value) for: "{ { 42 }, { }, 1.5f }" == "{ { 42 }, { }, 1.5f }"
|
||||
# uniform samples
|
||||
ok {test-number} - e.point == 23 for: 23.0 == 23
|
||||
# uniform samples
|
||||
@@ -4422,7 +4412,7 @@ ok {test-number} - e.upper_bound == 23 for: 23.0 == 23
|
||||
# uniform samples
|
||||
ok {test-number} - e.lower_bound == 23 for: 23.0 == 23
|
||||
# uniform samples
|
||||
ok {test-number} - e.confidence_interval == 0.95 for: 0.95 == 0.95
|
||||
ok {test-number} - e.confidence_interval == 0.95 for: 0.94999999999999996 == 0.94999999999999996
|
||||
# uniform_integer_distribution can return the bounds
|
||||
ok {test-number} - dist.a() == -10 for: -10 == -10
|
||||
# uniform_integer_distribution can return the bounds
|
||||
@@ -4549,5 +4539,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
|
||||
ok {test-number} -
|
||||
# xmlentitycheck
|
||||
ok {test-number} -
|
||||
1..2272
|
||||
1..2267
|
||||
|
||||
|
@@ -493,17 +493,17 @@ ok {test-number} - x.size() > 0 for: 42 > 0
|
||||
# A Template product test case with array signature - std::array<int, 9>
|
||||
ok {test-number} - x.size() > 0 for: 9 > 0
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - d == 1.23_a for: 1.23 == Approx( 1.23 )
|
||||
ok {test-number} - d == 1.23_a for: 1.22999999999999998 == Approx( 1.22999999999999998 )
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - d != 1.22_a for: 1.23 != Approx( 1.22 )
|
||||
ok {test-number} - d != 1.22_a for: 1.22999999999999998 != Approx( 1.21999999999999997 )
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - -d == -1.23_a for: -1.23 == Approx( -1.23 )
|
||||
ok {test-number} - -d == -1.23_a for: -1.22999999999999998 == Approx( -1.22999999999999998 )
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - d == 1.2_a .epsilon(.1) for: 1.23 == Approx( 1.2 )
|
||||
ok {test-number} - d == 1.2_a .epsilon(.1) for: 1.22999999999999998 == Approx( 1.19999999999999996 )
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - d != 1.2_a .epsilon(.001) for: 1.23 != Approx( 1.2 )
|
||||
ok {test-number} - d != 1.2_a .epsilon(.001) for: 1.22999999999999998 != Approx( 1.19999999999999996 )
|
||||
# A comparison that uses literals instead of the normal constructor
|
||||
ok {test-number} - d == 1_a .epsilon(.3) for: 1.23 == Approx( 1.0 )
|
||||
ok {test-number} - d == 1_a .epsilon(.3) for: 1.22999999999999998 == Approx( 1.0 )
|
||||
# A couple of nested sections followed by a failure
|
||||
ok {test-number} - with 1 message: 'that's not flying - that's failing in style'
|
||||
# A couple of nested sections followed by a failure
|
||||
@@ -521,9 +521,9 @@ ok {test-number} - 104.0 == Approx(100.0).margin(4) for: 104.0 == Approx( 100.0
|
||||
# Absolute margin
|
||||
ok {test-number} - 104.0 != Approx(100.0).margin(3) for: 104.0 != Approx( 100.0 )
|
||||
# Absolute margin
|
||||
ok {test-number} - 100.3 != Approx(100.0) for: 100.3 != Approx( 100.0 )
|
||||
ok {test-number} - 100.3 != Approx(100.0) for: 100.29999999999999716 != Approx( 100.0 )
|
||||
# Absolute margin
|
||||
ok {test-number} - 100.3 == Approx(100.0).margin(0.5) for: 100.3 == Approx( 100.0 )
|
||||
ok {test-number} - 100.3 == Approx(100.0).margin(0.5) for: 100.29999999999999716 == Approx( 100.0 )
|
||||
# An expression with side-effects should only be evaluated once
|
||||
ok {test-number} - i++ == 7 for: 7 == 7
|
||||
# An expression with side-effects should only be evaluated once
|
||||
@@ -559,15 +559,15 @@ ok {test-number} - 245.0f == Approx(245.25f).margin(0.25f) for: 245.0f == Approx
|
||||
# Approx with exactly-representable margin
|
||||
ok {test-number} - 245.5f == Approx(245.25f).margin(0.25f) for: 245.5f == Approx( 245.25 )
|
||||
# Approximate PI
|
||||
ok {test-number} - divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) for: 3.1428571429 == Approx( 3.141 )
|
||||
ok {test-number} - divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) for: 3.14285714285714279 == Approx( 3.14100000000000001 )
|
||||
# Approximate PI
|
||||
ok {test-number} - divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) for: 3.1428571429 != Approx( 3.141 )
|
||||
ok {test-number} - divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) for: 3.14285714285714279 != Approx( 3.14100000000000001 )
|
||||
# Approximate comparisons with different epsilons
|
||||
ok {test-number} - d != Approx( 1.231 ) for: 1.23 != Approx( 1.231 )
|
||||
ok {test-number} - d != Approx( 1.231 ) for: 1.22999999999999998 != Approx( 1.23100000000000009 )
|
||||
# Approximate comparisons with different epsilons
|
||||
ok {test-number} - d == Approx( 1.231 ).epsilon( 0.1 ) for: 1.23 == Approx( 1.231 )
|
||||
ok {test-number} - d == Approx( 1.231 ).epsilon( 0.1 ) for: 1.22999999999999998 == Approx( 1.23100000000000009 )
|
||||
# Approximate comparisons with floats
|
||||
ok {test-number} - 1.23f == Approx( 1.23f ) for: 1.23f == Approx( 1.2300000191 )
|
||||
ok {test-number} - 1.23f == Approx( 1.23f ) for: 1.230000019f == Approx( 1.23000001907348633 )
|
||||
# Approximate comparisons with floats
|
||||
ok {test-number} - 0.0f == Approx( 0.0f ) for: 0.0f == Approx( 0.0 )
|
||||
# Approximate comparisons with ints
|
||||
@@ -581,9 +581,9 @@ ok {test-number} - 0 == Approx( dZero) for: 0 == Approx( 0.0 )
|
||||
# Approximate comparisons with mixed numeric types
|
||||
ok {test-number} - 0 == Approx( dSmall ).margin( 0.001 ) for: 0 == Approx( 0.00001 )
|
||||
# Approximate comparisons with mixed numeric types
|
||||
ok {test-number} - 1.234f == Approx( dMedium ) for: 1.234f == Approx( 1.234 )
|
||||
ok {test-number} - 1.234f == Approx( dMedium ) for: 1.233999968f == Approx( 1.23399999999999999 )
|
||||
# Approximate comparisons with mixed numeric types
|
||||
ok {test-number} - dMedium == Approx( 1.234f ) for: 1.234 == Approx( 1.2339999676 )
|
||||
ok {test-number} - dMedium == Approx( 1.234f ) for: 1.23399999999999999 == Approx( 1.23399996757507324 )
|
||||
# Arbitrary predicate matcher
|
||||
ok {test-number} - 1, Predicate<int>( alwaysTrue, "always true" ) for: 1 matches predicate: "always true"
|
||||
# Arbitrary predicate matcher
|
||||
@@ -965,7 +965,7 @@ not ok {test-number} - unexpected exception with message: 'custom exception - no
|
||||
# Custom std-exceptions can be custom translated
|
||||
not ok {test-number} - unexpected exception with message: 'custom std exception'
|
||||
# Default scale is invisible to comparison
|
||||
ok {test-number} - 101.000001 != Approx(100).epsilon(0.01) for: 101.000001 != Approx( 100.0 )
|
||||
ok {test-number} - 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
||||
# Default scale is invisible to comparison
|
||||
ok {test-number} - std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
||||
# Directly creating an EnumInfo
|
||||
@@ -997,7 +997,7 @@ ok {test-number} - stringify( Bikeshed::Colours::Red ) == "Red" for: "Red" == "R
|
||||
# Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( Bikeshed::Colours::Blue ) == "Blue" for: "Blue" == "Blue"
|
||||
# Epsilon only applies to Approx's value
|
||||
ok {test-number} - 101.01 != Approx(100).epsilon(0.01) for: 101.01 != Approx( 100.0 )
|
||||
ok {test-number} - 101.01 != Approx(100).epsilon(0.01) for: 101.01000000000000512 != Approx( 100.0 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.int_seven == 6 for: 7 == 6
|
||||
# Equality checks that should fail
|
||||
@@ -1005,15 +1005,15 @@ not ok {test-number} - data.int_seven == 8 for: 7 == 8
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.int_seven == 0 for: 7 == 0
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 9.11f ) for: 9.1f == Approx( 9.1099996567 )
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 9.11f ) for: 9.100000381f == Approx( 9.10999965667724609 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 9.0f ) for: 9.1f == Approx( 9.0 )
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 9.0f ) for: 9.100000381f == Approx( 9.0 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 1 ) for: 9.1f == Approx( 1.0 )
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 1 ) for: 9.100000381f == Approx( 1.0 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 0 ) for: 9.1f == Approx( 0.0 )
|
||||
not ok {test-number} - data.float_nine_point_one == Approx( 0 ) for: 9.100000381f == Approx( 0.0 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.double_pi == Approx( 3.1415 ) for: 3.1415926535 == Approx( 3.1415 )
|
||||
not ok {test-number} - data.double_pi == Approx( 3.1415 ) for: 3.14159265350000005 == Approx( 3.14150000000000018 )
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.str_hello == "goodbye" for: "hello" == "goodbye"
|
||||
# Equality checks that should fail
|
||||
@@ -1023,13 +1023,13 @@ not ok {test-number} - data.str_hello == "hello1" for: "hello" == "hello1"
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - data.str_hello.size() == 6 for: 5 == 6
|
||||
# Equality checks that should fail
|
||||
not ok {test-number} - x == Approx( 1.301 ) for: 1.3 == Approx( 1.301 )
|
||||
not ok {test-number} - x == Approx( 1.301 ) for: 1.30000000000000027 == Approx( 1.30099999999999993 )
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - data.int_seven == 7 for: 7 == 7
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one == Approx( 9.1f ) for: 9.1f == Approx( 9.1000003815 )
|
||||
ok {test-number} - data.float_nine_point_one == Approx( 9.1f ) for: 9.100000381f == Approx( 9.10000038146972656 )
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - data.double_pi == Approx( 3.1415926535 ) for: 3.1415926535 == Approx( 3.1415926535 )
|
||||
ok {test-number} - data.double_pi == Approx( 3.1415926535 ) for: 3.14159265350000005 == Approx( 3.14159265350000005 )
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - data.str_hello == "hello" for: "hello" == "hello"
|
||||
# Equality checks that should succeed
|
||||
@@ -1037,7 +1037,7 @@ ok {test-number} - "hello" == data.str_hello for: "hello" == "hello"
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - data.str_hello.size() == 5 for: 5 == 5
|
||||
# Equality checks that should succeed
|
||||
ok {test-number} - x == Approx( 1.3 ) for: 1.3 == Approx( 1.3 )
|
||||
ok {test-number} - x == Approx( 1.3 ) for: 1.30000000000000027 == Approx( 1.30000000000000004 )
|
||||
# Equals
|
||||
ok {test-number} - testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring"
|
||||
# Equals
|
||||
@@ -1123,23 +1123,23 @@ ok {test-number} - Factorial(10) == 3628800 for: 3628800 (0x<hex digits>) == 362
|
||||
# Filter generator throws exception for empty generator
|
||||
ok {test-number} - filter( []( int ) { return false; }, value( 3 ) ), Catch::GeneratorException
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.1 are within 10% of each other
|
||||
ok {test-number} - 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.09999999999999964 are within 10% of each other
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.2 are within 10% of each other
|
||||
ok {test-number} - 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.19999999999999929 are within 10% of each other
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0 are within 99% of each other
|
||||
ok {test-number} - 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0.0 are within 99% of each other
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - -0., WithinRel( 0. ) for: -0.0 and 0 are within 2.22045e-12% of each other
|
||||
ok {test-number} - -0., WithinRel( 0. ) for: -0.0 and 0.0 are within 2.22045e-12% of each other
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - v1, WithinRel( v2 ) for: 0.0 and 2.22507e-308 are within 2.22045e-12% of each other
|
||||
ok {test-number} - v1, WithinRel( v2 ) for: 0.0 and 0.0 are within 2.22045e-12% of each other
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 1., WithinAbs( 1., 0 ) for: 1.0 is within 0.0 of 1.0
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 0., WithinAbs( 1., 1 ) for: 0.0 is within 1.0 of 1.0
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0
|
||||
ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.98999999999999999 of 1.0
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0
|
||||
ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.98999999999999999 of 1.0
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 11., !WithinAbs( 10., 0.5 ) for: 11.0 not is within 0.5 of 10.0
|
||||
# Floating point matchers: double
|
||||
@@ -1147,11 +1147,11 @@ ok {test-number} - 10., !WithinAbs( 11., 0.5 ) for: 10.0 not is within 0.5 of 11
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - -10., WithinAbs( -10., 0.5 ) for: -10.0 is within 0.5 of -10.0
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.6
|
||||
ok {test-number} - -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.59999999999999964
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 1., WithinULP( 1., 0 ) for: 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00])
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.0 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00])
|
||||
ok {test-number} - nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.00000000000000022 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00])
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 0., WithinULP( nextafter( 0., 1. ), 1 ) for: 0.0 is within 1 ULPs of 4.9406564584124654e-324 ([0.0000000000000000e+00, 9.8813129168249309e-324])
|
||||
# Floating point matchers: double
|
||||
@@ -1167,7 +1167,7 @@ ok {test-number} - 1., WithinAbs( 1., 0.5 ) || WithinULP( 2., 1 ) for: 1.0 ( is
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 1., WithinAbs( 2., 0.5 ) || WithinULP( 1., 0 ) for: 1.0 ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) )
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0 are within 10% of each other )
|
||||
ok {test-number} - 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0.0 are within 10% of each other )
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - WithinAbs( 1., 0. )
|
||||
# Floating point matchers: double
|
||||
@@ -1183,23 +1183,23 @@ ok {test-number} - WithinRel( 1., 1. ), std::domain_error
|
||||
# Floating point matchers: double
|
||||
ok {test-number} - 1., !IsNaN() for: 1.0 not is NaN
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.1 are within 10% of each other
|
||||
ok {test-number} - 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.10000038146972656 are within 10% of each other
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.2 are within 10% of each other
|
||||
ok {test-number} - 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.19999980926513672 are within 10% of each other
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0 are within 99% of each other
|
||||
ok {test-number} - 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0.0 are within 99% of each other
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - -0.f, WithinRel( 0.f ) for: -0.0f and 0 are within 0.00119209% of each other
|
||||
ok {test-number} - -0.f, WithinRel( 0.f ) for: -0.0f and 0.0 are within 0.00119209% of each other
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - v1, WithinRel( v2 ) for: 0.0f and 1.17549e-38 are within 0.00119209% of each other
|
||||
ok {test-number} - v1, WithinRel( v2 ) for: 0.0f and 0.0 are within 0.00119209% of each other
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 1.f, WithinAbs( 1.f, 0 ) for: 1.0f is within 0.0 of 1.0
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.f, WithinAbs( 1.f, 1 ) for: 0.0f is within 1.0 of 1.0
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0
|
||||
ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.99000000953674316 of 1.0
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0
|
||||
ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.99000000953674316 of 1.0
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.f, WithinAbs( -0.f, 0 ) for: 0.0f is within 0.0 of -0.0
|
||||
# Floating point matchers: float
|
||||
@@ -1209,13 +1209,13 @@ ok {test-number} - 10.f, !WithinAbs( 11.f, 0.5f ) for: 10.0f not is within 0.5 o
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - -10.f, WithinAbs( -10.f, 0.5f ) for: -10.0f is within 0.5 of -10.0
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.6000003815
|
||||
ok {test-number} - -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.60000038146972656
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 1.f, WithinULP( 1.f, 0 ) for: 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00])
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - -1.f, WithinULP( -1.f, 0 ) for: -1.0f is within 0 ULPs of -1.00000000e+00f ([-1.00000000e+00, -1.00000000e+00])
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.0f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00])
|
||||
ok {test-number} - nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.000000119f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00])
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.f, WithinULP( nextafter( 0.f, 1.f ), 1 ) for: 0.0f is within 1 ULPs of 1.40129846e-45f ([0.00000000e+00, 2.80259693e-45])
|
||||
# Floating point matchers: float
|
||||
@@ -1231,7 +1231,7 @@ ok {test-number} - 1.f, WithinAbs( 1.f, 0.5 ) || WithinULP( 1.f, 1 ) for: 1.0f (
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 1.f, WithinAbs( 2.f, 0.5 ) || WithinULP( 1.f, 0 ) for: 1.0f ( is within 0.5 of 2.0 or is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) )
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.001 of 0.0 or and 0 are within 10% of each other )
|
||||
ok {test-number} - 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.00100000004749745 of 0.0 or and 0.0 are within 10% of each other )
|
||||
# Floating point matchers: float
|
||||
ok {test-number} - WithinAbs( 1.f, 0.f )
|
||||
# Floating point matchers: float
|
||||
@@ -1591,83 +1591,83 @@ ok {test-number} - gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) wit
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.9 == Approx( -0.9 ) with 1 message: 'Current expected value is -0.9'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.90000000000000002 == Approx( -0.90000000000000002 ) with 1 message: 'Current expected value is -0.9'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.9'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.8 == Approx( -0.8 ) with 1 message: 'Current expected value is -0.8'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.80000000000000004 == Approx( -0.80000000000000004 ) with 1 message: 'Current expected value is -0.8'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.8'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.70000000000000007 == Approx( -0.70000000000000007 ) with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.6 == Approx( -0.6 ) with 1 message: 'Current expected value is -0.6'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.60000000000000009 == Approx( -0.60000000000000009 ) with 1 message: 'Current expected value is -0.6'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.6'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.5 == Approx( -0.5 ) with 1 message: 'Current expected value is -0.5'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.50000000000000011 == Approx( -0.50000000000000011 ) with 1 message: 'Current expected value is -0.5'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.5'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.40000000000000013 == Approx( -0.40000000000000013 ) with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.3 == Approx( -0.3 ) with 1 message: 'Current expected value is -0.3'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.30000000000000016 == Approx( -0.30000000000000016 ) with 1 message: 'Current expected value is -0.3'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.3'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.2 == Approx( -0.2 ) with 1 message: 'Current expected value is -0.2'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.20000000000000015 == Approx( -0.20000000000000015 ) with 1 message: 'Current expected value is -0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.10000000000000014 == Approx( -0.10000000000000014 ) with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.0 == Approx( -0.0 ) with 1 message: 'Current expected value is -1.38778e-16'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.00000000000000014 == Approx( -0.00000000000000014 ) with 1 message: 'Current expected value is -1.38778e-16'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1.38778e-16'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.1 == Approx( 0.1 ) with 1 message: 'Current expected value is 0.1'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.09999999999999987 == Approx( 0.09999999999999987 ) with 1 message: 'Current expected value is 0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.19999999999999987 == Approx( 0.19999999999999987 ) with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.3 == Approx( 0.3 ) with 1 message: 'Current expected value is 0.3'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.29999999999999988 == Approx( 0.29999999999999988 ) with 1 message: 'Current expected value is 0.3'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.3'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.4 == Approx( 0.4 ) with 1 message: 'Current expected value is 0.4'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.39999999999999991 == Approx( 0.39999999999999991 ) with 1 message: 'Current expected value is 0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.49999999999999989 == Approx( 0.49999999999999989 ) with 1 message: 'Current expected value is 0.5'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.5'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.6 == Approx( 0.6 ) with 1 message: 'Current expected value is 0.6'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.59999999999999987 == Approx( 0.59999999999999987 ) with 1 message: 'Current expected value is 0.6'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.6'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.7 == Approx( 0.7 ) with 1 message: 'Current expected value is 0.7'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.69999999999999984 == Approx( 0.69999999999999984 ) with 1 message: 'Current expected value is 0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.8 == Approx( 0.8 ) with 1 message: 'Current expected value is 0.8'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.79999999999999982 == Approx( 0.79999999999999982 ) with 1 message: 'Current expected value is 0.8'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.8'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.9 == Approx( 0.9 ) with 1 message: 'Current expected value is 0.9'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.8999999999999998 == Approx( 0.8999999999999998 ) with 1 message: 'Current expected value is 0.9'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.9'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx( rangeEnd ) for: 1.0 == Approx( 1.0 )
|
||||
ok {test-number} - gen.get() == Approx( rangeEnd ) for: 0.99999999999999978 == Approx( 1.0 )
|
||||
# Generators internals
|
||||
ok {test-number} - !(gen.next()) for: !false
|
||||
# Generators internals
|
||||
@@ -1675,19 +1675,19 @@ ok {test-number} - gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) wit
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.69999999999999996 == Approx( -0.69999999999999996 ) with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.39999999999999997 == Approx( -0.39999999999999997 ) with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.09999999999999998 == Approx( -0.09999999999999998 ) with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.20000000000000001 == Approx( 0.20000000000000001 ) with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
@@ -1701,19 +1701,19 @@ ok {test-number} - gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) wit
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.69999999999999996 == Approx( -0.69999999999999996 ) with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.7'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.39999999999999997 == Approx( -0.39999999999999997 ) with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.4'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: -0.09999999999999998 == Approx( -0.09999999999999998 ) with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.1'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2'
|
||||
ok {test-number} - gen.get() == Approx(expected) for: 0.20000000000000001 == Approx( 0.20000000000000001 ) with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.2'
|
||||
# Generators internals
|
||||
@@ -1775,13 +1775,13 @@ ok {test-number} - gen.get() == -7 for: -7 == -7
|
||||
# Generators internals
|
||||
ok {test-number} - !(gen.next()) for: !false
|
||||
# Greater-than inequalities with different epsilons
|
||||
ok {test-number} - d >= Approx( 1.22 ) for: 1.23 >= Approx( 1.22 )
|
||||
ok {test-number} - d >= Approx( 1.22 ) for: 1.22999999999999998 >= Approx( 1.21999999999999997 )
|
||||
# Greater-than inequalities with different epsilons
|
||||
ok {test-number} - d >= Approx( 1.23 ) for: 1.23 >= Approx( 1.23 )
|
||||
ok {test-number} - d >= Approx( 1.23 ) for: 1.22999999999999998 >= Approx( 1.22999999999999998 )
|
||||
# Greater-than inequalities with different epsilons
|
||||
ok {test-number} - !(d >= Approx( 1.24 )) for: !(1.23 >= Approx( 1.24 ))
|
||||
ok {test-number} - !(d >= Approx( 1.24 )) for: !(1.22999999999999998 >= Approx( 1.23999999999999999 ))
|
||||
# Greater-than inequalities with different epsilons
|
||||
ok {test-number} - d >= Approx( 1.24 ).epsilon(0.1) for: 1.23 >= Approx( 1.24 )
|
||||
ok {test-number} - d >= Approx( 1.24 ).epsilon(0.1) for: 1.22999999999999998 >= Approx( 1.23999999999999999 )
|
||||
# Hashers with different seed produce different hash with same test case
|
||||
ok {test-number} - h1( dummy ) != h2( dummy ) for: 3422778688 (0x<hex digits>) != 130711275 (0x<hex digits>)
|
||||
# Hashers with same seed produce same hash
|
||||
@@ -1835,9 +1835,9 @@ not ok {test-number} - unexpected exception with message: 'Exception translation
|
||||
# Inequality checks that should fail
|
||||
not ok {test-number} - data.int_seven != 7 for: 7 != 7
|
||||
# Inequality checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one != Approx( 9.1f ) for: 9.1f != Approx( 9.1000003815 )
|
||||
not ok {test-number} - data.float_nine_point_one != Approx( 9.1f ) for: 9.100000381f != Approx( 9.10000038146972656 )
|
||||
# Inequality checks that should fail
|
||||
not ok {test-number} - data.double_pi != Approx( 3.1415926535 ) for: 3.1415926535 != Approx( 3.1415926535 )
|
||||
not ok {test-number} - data.double_pi != Approx( 3.1415926535 ) for: 3.14159265350000005 != Approx( 3.14159265350000005 )
|
||||
# Inequality checks that should fail
|
||||
not ok {test-number} - data.str_hello != "hello" for: "hello" != "hello"
|
||||
# Inequality checks that should fail
|
||||
@@ -1847,15 +1847,15 @@ ok {test-number} - data.int_seven != 6 for: 7 != 6
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.int_seven != 8 for: 7 != 8
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 9.11f ) for: 9.1f != Approx( 9.1099996567 )
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 9.11f ) for: 9.100000381f != Approx( 9.10999965667724609 )
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 9.0f ) for: 9.1f != Approx( 9.0 )
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 9.0f ) for: 9.100000381f != Approx( 9.0 )
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 1 ) for: 9.1f != Approx( 1.0 )
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 1 ) for: 9.100000381f != Approx( 1.0 )
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 0 ) for: 9.1f != Approx( 0.0 )
|
||||
ok {test-number} - data.float_nine_point_one != Approx( 0 ) for: 9.100000381f != Approx( 0.0 )
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.double_pi != Approx( 3.1415 ) for: 3.1415926535 != Approx( 3.1415 )
|
||||
ok {test-number} - data.double_pi != Approx( 3.1415 ) for: 3.14159265350000005 != Approx( 3.14150000000000018 )
|
||||
# Inequality checks that should succeed
|
||||
ok {test-number} - data.str_hello != "goodbye" for: "hello" != "goodbye"
|
||||
# Inequality checks that should succeed
|
||||
@@ -1903,13 +1903,13 @@ ok {test-number} - sstream.str() == "\"\\\\/\\t\\r\\n\"" for: ""\\/\t\r\n"" == "
|
||||
# Lambdas in assertions
|
||||
ok {test-number} - []() { return true; }() for: true
|
||||
# Less-than inequalities with different epsilons
|
||||
ok {test-number} - d <= Approx( 1.24 ) for: 1.23 <= Approx( 1.24 )
|
||||
ok {test-number} - d <= Approx( 1.24 ) for: 1.22999999999999998 <= Approx( 1.23999999999999999 )
|
||||
# Less-than inequalities with different epsilons
|
||||
ok {test-number} - d <= Approx( 1.23 ) for: 1.23 <= Approx( 1.23 )
|
||||
ok {test-number} - d <= Approx( 1.23 ) for: 1.22999999999999998 <= Approx( 1.22999999999999998 )
|
||||
# Less-than inequalities with different epsilons
|
||||
ok {test-number} - !(d <= Approx( 1.22 )) for: !(1.23 <= Approx( 1.22 ))
|
||||
ok {test-number} - !(d <= Approx( 1.22 )) for: !(1.22999999999999998 <= Approx( 1.21999999999999997 ))
|
||||
# Less-than inequalities with different epsilons
|
||||
ok {test-number} - d <= Approx( 1.22 ).epsilon(0.1) for: 1.23 <= Approx( 1.22 )
|
||||
ok {test-number} - d <= Approx( 1.22 ).epsilon(0.1) for: 1.22999999999999998 <= Approx( 1.21999999999999997 )
|
||||
# ManuallyRegistered
|
||||
ok {test-number} - with 1 message: 'was called'
|
||||
# Matchers can be (AllOf) composed with the && operator
|
||||
@@ -2039,11 +2039,11 @@ not ok {test-number} - data.int_seven >= 8 for: 7 >= 8
|
||||
# Ordering comparison checks that should fail
|
||||
not ok {test-number} - data.int_seven <= 6 for: 7 <= 6
|
||||
# Ordering comparison checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one < 9 for: 9.1f < 9
|
||||
not ok {test-number} - data.float_nine_point_one < 9 for: 9.100000381f < 9
|
||||
# Ordering comparison checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one > 10 for: 9.1f > 10
|
||||
not ok {test-number} - data.float_nine_point_one > 10 for: 9.100000381f > 10
|
||||
# Ordering comparison checks that should fail
|
||||
not ok {test-number} - data.float_nine_point_one > 9.2 for: 9.1f > 9.2
|
||||
not ok {test-number} - data.float_nine_point_one > 9.2 for: 9.100000381f > 9.19999999999999929
|
||||
# Ordering comparison checks that should fail
|
||||
not ok {test-number} - data.str_hello > "hello" for: "hello" > "hello"
|
||||
# Ordering comparison checks that should fail
|
||||
@@ -2077,11 +2077,11 @@ ok {test-number} - data.int_seven <= 7 for: 7 <= 7
|
||||
# Ordering comparison checks that should succeed
|
||||
ok {test-number} - data.int_seven <= 8 for: 7 <= 8
|
||||
# Ordering comparison checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one > 9 for: 9.1f > 9
|
||||
ok {test-number} - data.float_nine_point_one > 9 for: 9.100000381f > 9
|
||||
# Ordering comparison checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one < 10 for: 9.1f < 10
|
||||
ok {test-number} - data.float_nine_point_one < 10 for: 9.100000381f < 10
|
||||
# Ordering comparison checks that should succeed
|
||||
ok {test-number} - data.float_nine_point_one < 9.2 for: 9.1f < 9.2
|
||||
ok {test-number} - data.float_nine_point_one < 9.2 for: 9.100000381f < 9.19999999999999929
|
||||
# Ordering comparison checks that should succeed
|
||||
ok {test-number} - data.str_hello <= "hello" for: "hello" <= "hello"
|
||||
# Ordering comparison checks that should succeed
|
||||
@@ -2417,7 +2417,7 @@ ok {test-number} - config.benchmarkResamples == 20000 for: 20000 (0x<hex digits>
|
||||
# Process can be configured on command line
|
||||
ok {test-number} - cli.parse({ "test", "--benchmark-confidence-interval=0.99" }) for: {?}
|
||||
# Process can be configured on command line
|
||||
ok {test-number} - config.benchmarkConfidenceInterval == Catch::Approx(0.99) for: 0.99 == Approx( 0.99 )
|
||||
ok {test-number} - config.benchmarkConfidenceInterval == Catch::Approx(0.99) for: 0.98999999999999999 == Approx( 0.98999999999999999 )
|
||||
# Process can be configured on command line
|
||||
ok {test-number} - cli.parse({ "test", "--benchmark-no-analysis" }) for: {?}
|
||||
# Process can be configured on command line
|
||||
@@ -2595,21 +2595,21 @@ ok {test-number} - v.capacity() >= 10 for: 10 >= 10
|
||||
# Scenario: Vector resizing affects size and capacity
|
||||
ok {test-number} - v.size() == 0 for: 0 == 0
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - d == Approx( 1.23 ) for: 1.23 == Approx( 1.23 )
|
||||
ok {test-number} - d == Approx( 1.23 ) for: 1.22999999999999998 == Approx( 1.22999999999999998 )
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - d != Approx( 1.22 ) for: 1.23 != Approx( 1.22 )
|
||||
ok {test-number} - d != Approx( 1.22 ) for: 1.22999999999999998 != Approx( 1.21999999999999997 )
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - d != Approx( 1.24 ) for: 1.23 != Approx( 1.24 )
|
||||
ok {test-number} - d != Approx( 1.24 ) for: 1.22999999999999998 != Approx( 1.23999999999999999 )
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - d == 1.23_a for: 1.23 == Approx( 1.23 )
|
||||
ok {test-number} - d == 1.23_a for: 1.22999999999999998 == Approx( 1.22999999999999998 )
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - d != 1.22_a for: 1.23 != Approx( 1.22 )
|
||||
ok {test-number} - d != 1.22_a for: 1.22999999999999998 != Approx( 1.21999999999999997 )
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - Approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23
|
||||
ok {test-number} - Approx( d ) == 1.23 for: Approx( 1.22999999999999998 ) == 1.22999999999999998
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - Approx( d ) != 1.22 for: Approx( 1.23 ) != 1.22
|
||||
ok {test-number} - Approx( d ) != 1.22 for: Approx( 1.22999999999999998 ) != 1.21999999999999997
|
||||
# Some simple comparisons between doubles
|
||||
ok {test-number} - Approx( d ) != 1.24 for: Approx( 1.23 ) != 1.24
|
||||
ok {test-number} - Approx( d ) != 1.24 for: Approx( 1.22999999999999998 ) != 1.23999999999999999
|
||||
# StartsWith string matcher
|
||||
not ok {test-number} - testStringForMatching(), StartsWith( "This String" ) for: "this string contains 'abc' as a substring" starts with: "This String"
|
||||
# StartsWith string matcher
|
||||
@@ -3319,7 +3319,7 @@ ok {test-number} - vector_a, RangeEquals( array_a_plus_1, close_enough ) for: {
|
||||
# Type conversions of RangeEquals and similar
|
||||
ok {test-number} - vector_a, UnorderedRangeEquals( array_a_plus_1, close_enough ) for: { 1, 2, 3 } unordered elements are { 2, 3, 4 }
|
||||
# Unexpected exceptions can be translated
|
||||
not ok {test-number} - unexpected exception with message: '3.14'
|
||||
not ok {test-number} - unexpected exception with message: '3.14000000000000012'
|
||||
# Upcasting special member functions
|
||||
ok {test-number} - bptr->i == 3 for: 3 == 3
|
||||
# Upcasting special member functions
|
||||
@@ -3611,21 +3611,21 @@ ok {test-number} - unrelated::ADL_size{}, SizeIs(12) for: {?} has size == 12
|
||||
# Usage of the SizeIs range matcher
|
||||
ok {test-number} - has_size{}, SizeIs(13) for: {?} has size == 13
|
||||
# Use a custom approx
|
||||
ok {test-number} - d == approx( 1.23 ) for: 1.23 == Approx( 1.23 )
|
||||
ok {test-number} - d == approx( 1.23 ) for: 1.22999999999999998 == Approx( 1.22999999999999998 )
|
||||
# Use a custom approx
|
||||
ok {test-number} - d == approx( 1.22 ) for: 1.23 == Approx( 1.22 )
|
||||
ok {test-number} - d == approx( 1.22 ) for: 1.22999999999999998 == Approx( 1.21999999999999997 )
|
||||
# Use a custom approx
|
||||
ok {test-number} - d == approx( 1.24 ) for: 1.23 == Approx( 1.24 )
|
||||
ok {test-number} - d == approx( 1.24 ) for: 1.22999999999999998 == Approx( 1.23999999999999999 )
|
||||
# Use a custom approx
|
||||
ok {test-number} - d != approx( 1.25 ) for: 1.23 != Approx( 1.25 )
|
||||
ok {test-number} - d != approx( 1.25 ) for: 1.22999999999999998 != Approx( 1.25 )
|
||||
# Use a custom approx
|
||||
ok {test-number} - approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23
|
||||
ok {test-number} - approx( d ) == 1.23 for: Approx( 1.22999999999999998 ) == 1.22999999999999998
|
||||
# Use a custom approx
|
||||
ok {test-number} - approx( d ) == 1.22 for: Approx( 1.23 ) == 1.22
|
||||
ok {test-number} - approx( d ) == 1.22 for: Approx( 1.22999999999999998 ) == 1.21999999999999997
|
||||
# Use a custom approx
|
||||
ok {test-number} - approx( d ) == 1.24 for: Approx( 1.23 ) == 1.24
|
||||
ok {test-number} - approx( d ) == 1.24 for: Approx( 1.22999999999999998 ) == 1.23999999999999999
|
||||
# Use a custom approx
|
||||
ok {test-number} - approx( d ) != 1.25 for: Approx( 1.23 ) != 1.25
|
||||
ok {test-number} - approx( d ) != 1.25 for: Approx( 1.22999999999999998 ) != 1.25
|
||||
# Variadic macros
|
||||
ok {test-number} - with 1 message: 'no assertions'
|
||||
# Vector Approx matcher
|
||||
@@ -3951,11 +3951,11 @@ ok {test-number} - # SKIP 'skipping because answer = 43'
|
||||
# empty tags are not allowed
|
||||
ok {test-number} - Catch::TestCaseInfo("", { "test with an empty tag", "[]" }, dummySourceLineInfo)
|
||||
# erfc_inv
|
||||
ok {test-number} - erfc_inv(1.103560) == Approx(-0.09203687623843015) for: -0.0920368762 == Approx( -0.0920368762 )
|
||||
ok {test-number} - erfc_inv(1.103560) == Approx(-0.09203687623843015) for: -0.09203687623843014 == Approx( -0.09203687623843015 )
|
||||
# erfc_inv
|
||||
ok {test-number} - erfc_inv(1.067400) == Approx(-0.05980291115763361) for: -0.0598029112 == Approx( -0.0598029112 )
|
||||
ok {test-number} - erfc_inv(1.067400) == Approx(-0.05980291115763361) for: -0.05980291115763361 == Approx( -0.05980291115763361 )
|
||||
# erfc_inv
|
||||
ok {test-number} - erfc_inv(0.050000) == Approx(1.38590382434967796) for: 1.3859038243 == Approx( 1.3859038243 )
|
||||
ok {test-number} - erfc_inv(0.050000) == Approx(1.38590382434967796) for: 1.38590382434967774 == Approx( 1.38590382434967796 )
|
||||
# estimate_clock_resolution
|
||||
ok {test-number} - res.mean.count() == rate for: 2000.0 == 2000 (0x<hex digits>)
|
||||
# estimate_clock_resolution
|
||||
@@ -4096,22 +4096,12 @@ ok {test-number} - # SKIP
|
||||
ok {test-number} - s == "7" for: "7" == "7"
|
||||
# non-copyable objects
|
||||
ok {test-number} - ti == typeid(int) for: {?} == {?}
|
||||
# normal_cdf
|
||||
ok {test-number} - normal_cdf(0.000000) == Approx(0.50000000000000000) for: 0.5 == Approx( 0.5 )
|
||||
# normal_cdf
|
||||
ok {test-number} - normal_cdf(1.000000) == Approx(0.84134474606854293) for: 0.8413447461 == Approx( 0.8413447461 )
|
||||
# normal_cdf
|
||||
ok {test-number} - normal_cdf(-1.000000) == Approx(0.15865525393145705) for: 0.1586552539 == Approx( 0.1586552539 )
|
||||
# normal_cdf
|
||||
ok {test-number} - normal_cdf(2.809729) == Approx(0.99752083845315409) for: 0.9975208385 == Approx( 0.9975208385 )
|
||||
# normal_cdf
|
||||
ok {test-number} - normal_cdf(-1.352570) == Approx(0.08809652095066035) for: 0.088096521 == Approx( 0.088096521 )
|
||||
# normal_quantile
|
||||
ok {test-number} - normal_quantile(0.551780) == Approx(0.13015979861484198) for: 0.1301597986 == Approx( 0.1301597986 )
|
||||
ok {test-number} - normal_quantile(0.551780) == Approx(0.13015979861484198) for: 0.13015979861484195 == Approx( 0.13015979861484198 )
|
||||
# normal_quantile
|
||||
ok {test-number} - normal_quantile(0.533700) == Approx(0.08457408802851875) for: 0.084574088 == Approx( 0.084574088 )
|
||||
ok {test-number} - normal_quantile(0.533700) == Approx(0.08457408802851875) for: 0.08457408802851875 == Approx( 0.08457408802851875 )
|
||||
# normal_quantile
|
||||
ok {test-number} - normal_quantile(0.025000) == Approx(-1.95996398454005449) for: -1.9599639845 == Approx( -1.9599639845 )
|
||||
ok {test-number} - normal_quantile(0.025000) == Approx(-1.95996398454005449) for: -1.95996398454005405 == Approx( -1.95996398454005449 )
|
||||
# not allowed
|
||||
ok {test-number} -
|
||||
# not prints unscoped info from previous failures
|
||||
@@ -4395,15 +4385,15 @@ ok {test-number} - "{ }" == ::Catch::Detail::stringify(type{}) for: "{ }" == "{
|
||||
# tuple<>
|
||||
ok {test-number} - "{ }" == ::Catch::Detail::stringify(value) for: "{ }" == "{ }"
|
||||
# tuple<float,int>
|
||||
ok {test-number} - "1.2f" == ::Catch::Detail::stringify(float(1.2)) for: "1.2f" == "1.2f"
|
||||
ok {test-number} - "1.5f" == ::Catch::Detail::stringify(float(1.5)) for: "1.5f" == "1.5f"
|
||||
# tuple<float,int>
|
||||
ok {test-number} - "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) for: "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
|
||||
ok {test-number} - "{ 1.5f, 0 }" == ::Catch::Detail::stringify(type{1.5f,0}) for: "{ 1.5f, 0 }" == "{ 1.5f, 0 }"
|
||||
# tuple<int>
|
||||
ok {test-number} - "{ 0 }" == ::Catch::Detail::stringify(type{0}) for: "{ 0 }" == "{ 0 }"
|
||||
# tuple<string,string>
|
||||
ok {test-number} - "{ \"hello\", \"world\" }" == ::Catch::Detail::stringify(type{"hello","world"}) for: "{ "hello", "world" }" == "{ "hello", "world" }"
|
||||
# tuple<tuple<int>,tuple<>,float>
|
||||
ok {test-number} - "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) for: "{ { 42 }, { }, 1.2f }" == "{ { 42 }, { }, 1.2f }"
|
||||
ok {test-number} - "{ { 42 }, { }, 1.5f }" == ::Catch::Detail::stringify(value) for: "{ { 42 }, { }, 1.5f }" == "{ { 42 }, { }, 1.5f }"
|
||||
# uniform samples
|
||||
ok {test-number} - e.point == 23 for: 23.0 == 23
|
||||
# uniform samples
|
||||
@@ -4411,7 +4401,7 @@ ok {test-number} - e.upper_bound == 23 for: 23.0 == 23
|
||||
# uniform samples
|
||||
ok {test-number} - e.lower_bound == 23 for: 23.0 == 23
|
||||
# uniform samples
|
||||
ok {test-number} - e.confidence_interval == 0.95 for: 0.95 == 0.95
|
||||
ok {test-number} - e.confidence_interval == 0.95 for: 0.94999999999999996 == 0.94999999999999996
|
||||
# uniform_integer_distribution can return the bounds
|
||||
ok {test-number} - dist.a() == -10 for: -10 == -10
|
||||
# uniform_integer_distribution can return the bounds
|
||||
@@ -4538,5 +4528,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
|
||||
ok {test-number} -
|
||||
# xmlentitycheck
|
||||
ok {test-number} -
|
||||
1..2272
|
||||
1..2267
|
||||
|
||||
|
@@ -318,16 +318,16 @@
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|n...............................................................................|n|nCondition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven == 6 )|nwith expansion:|n 7 == 6|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven == 8 )|nwith expansion:|n 7 == 8|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven == 0 )|nwith expansion:|n 7 == 0|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 9.11f ) )|nwith expansion:|n 9.1f == Approx( 9.1099996567 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 9.0f ) )|nwith expansion:|n 9.1f == Approx( 9.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 1 ) )|nwith expansion:|n 9.1f == Approx( 1.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 0 ) )|nwith expansion:|n 9.1f == Approx( 0.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.double_pi == Approx( 3.1415 ) )|nwith expansion:|n 3.1415926535 == Approx( 3.1415 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 9.11f ) )|nwith expansion:|n 9.100000381f|n==|nApprox( 9.10999965667724609 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 9.0f ) )|nwith expansion:|n 9.100000381f == Approx( 9.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 1 ) )|nwith expansion:|n 9.100000381f == Approx( 1.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 0 ) )|nwith expansion:|n 9.100000381f == Approx( 0.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.double_pi == Approx( 3.1415 ) )|nwith expansion:|n 3.14159265350000005|n==|nApprox( 3.14150000000000018 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello == "goodbye" )|nwith expansion:|n "hello" == "goodbye"|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello == "hell" )|nwith expansion:|n "hello" == "hell"|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello == "hello1" )|nwith expansion:|n "hello" == "hello1"|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello.size() == 6 )|nwith expansion:|n 5 == 6|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( x == Approx( 1.301 ) )|nwith expansion:|n 1.3 == Approx( 1.301 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( x == Approx( 1.301 ) )|nwith expansion:|n 1.30000000000000027|n==|nApprox( 1.30099999999999993 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testFinished name='Equality checks that should fail' duration="{duration}"]
|
||||
##teamcity[testStarted name='Equality checks that should succeed']
|
||||
##teamcity[testFinished name='Equality checks that should succeed' duration="{duration}"]
|
||||
@@ -415,8 +415,8 @@
|
||||
##teamcity[testFinished name='Incomplete AssertionHandler' duration="{duration}"]
|
||||
##teamcity[testStarted name='Inequality checks that should fail']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|n...............................................................................|n|nCondition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven != 7 )|nwith expansion:|n 7 != 7|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one != Approx( 9.1f ) )|nwith expansion:|n 9.1f != Approx( 9.1000003815 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.double_pi != Approx( 3.1415926535 ) )|nwith expansion:|n 3.1415926535 != Approx( 3.1415926535 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one != Approx( 9.1f ) )|nwith expansion:|n 9.100000381f|n!=|nApprox( 9.10000038146972656 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.double_pi != Approx( 3.1415926535 ) )|nwith expansion:|n 3.14159265350000005|n!=|nApprox( 3.14159265350000005 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello != "hello" )|nwith expansion:|n "hello" != "hello"|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello.size() != 5 )|nwith expansion:|n 5 != 5|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testFinished name='Inequality checks that should fail' duration="{duration}"]
|
||||
@@ -479,9 +479,9 @@
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven < -1 )|nwith expansion:|n 7 < -1|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven >= 8 )|nwith expansion:|n 7 >= 8|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven <= 6 )|nwith expansion:|n 7 <= 6|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one < 9 )|nwith expansion:|n 9.1f < 9|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one > 10 )|nwith expansion:|n 9.1f > 10|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one > 9.2 )|nwith expansion:|n 9.1f > 9.2|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one < 9 )|nwith expansion:|n 9.100000381f < 9|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one > 10 )|nwith expansion:|n 9.100000381f > 10|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one > 9.2 )|nwith expansion:|n 9.100000381f > 9.19999999999999929|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello > "hello" )|nwith expansion:|n "hello" > "hello"|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello < "hello" )|nwith expansion:|n "hello" < "hello"|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello > "hellp" )|nwith expansion:|n "hello" > "hellp"|n']
|
||||
@@ -673,7 +673,7 @@
|
||||
##teamcity[testStarted name='Type conversions of RangeEquals and similar']
|
||||
##teamcity[testFinished name='Type conversions of RangeEquals and similar' duration="{duration}"]
|
||||
##teamcity[testStarted name='Unexpected exceptions can be translated']
|
||||
##teamcity[testFailed name='Unexpected exceptions can be translated' message='Exception.tests.cpp:<line number>|n...............................................................................|n|nException.tests.cpp:<line number>|nunexpected exception with message:|n "3.14"']
|
||||
##teamcity[testFailed name='Unexpected exceptions can be translated' message='Exception.tests.cpp:<line number>|n...............................................................................|n|nException.tests.cpp:<line number>|nunexpected exception with message:|n "3.14000000000000012"']
|
||||
##teamcity[testFinished name='Unexpected exceptions can be translated' duration="{duration}"]
|
||||
##teamcity[testStarted name='Upcasting special member functions']
|
||||
##teamcity[testFinished name='Upcasting special member functions' duration="{duration}"]
|
||||
@@ -861,8 +861,6 @@ loose text artifact
|
||||
##teamcity[testFinished name='non streamable - with conv. op' duration="{duration}"]
|
||||
##teamcity[testStarted name='non-copyable objects']
|
||||
##teamcity[testFinished name='non-copyable objects' duration="{duration}"]
|
||||
##teamcity[testStarted name='normal_cdf']
|
||||
##teamcity[testFinished name='normal_cdf' duration="{duration}"]
|
||||
##teamcity[testStarted name='normal_quantile']
|
||||
##teamcity[testFinished name='normal_quantile' duration="{duration}"]
|
||||
##teamcity[testStarted name='not allowed']
|
||||
|
@@ -318,16 +318,16 @@
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|n...............................................................................|n|nCondition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven == 6 )|nwith expansion:|n 7 == 6|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven == 8 )|nwith expansion:|n 7 == 8|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven == 0 )|nwith expansion:|n 7 == 0|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 9.11f ) )|nwith expansion:|n 9.1f == Approx( 9.1099996567 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 9.0f ) )|nwith expansion:|n 9.1f == Approx( 9.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 1 ) )|nwith expansion:|n 9.1f == Approx( 1.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 0 ) )|nwith expansion:|n 9.1f == Approx( 0.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.double_pi == Approx( 3.1415 ) )|nwith expansion:|n 3.1415926535 == Approx( 3.1415 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 9.11f ) )|nwith expansion:|n 9.100000381f|n==|nApprox( 9.10999965667724609 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 9.0f ) )|nwith expansion:|n 9.100000381f == Approx( 9.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 1 ) )|nwith expansion:|n 9.100000381f == Approx( 1.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 0 ) )|nwith expansion:|n 9.100000381f == Approx( 0.0 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.double_pi == Approx( 3.1415 ) )|nwith expansion:|n 3.14159265350000005|n==|nApprox( 3.14150000000000018 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello == "goodbye" )|nwith expansion:|n "hello" == "goodbye"|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello == "hell" )|nwith expansion:|n "hello" == "hell"|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello == "hello1" )|nwith expansion:|n "hello" == "hello1"|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello.size() == 6 )|nwith expansion:|n 5 == 6|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( x == Approx( 1.301 ) )|nwith expansion:|n 1.3 == Approx( 1.301 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Equality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( x == Approx( 1.301 ) )|nwith expansion:|n 1.30000000000000027|n==|nApprox( 1.30099999999999993 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testFinished name='Equality checks that should fail' duration="{duration}"]
|
||||
##teamcity[testStarted name='Equality checks that should succeed']
|
||||
##teamcity[testFinished name='Equality checks that should succeed' duration="{duration}"]
|
||||
@@ -415,8 +415,8 @@
|
||||
##teamcity[testFinished name='Incomplete AssertionHandler' duration="{duration}"]
|
||||
##teamcity[testStarted name='Inequality checks that should fail']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|n...............................................................................|n|nCondition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven != 7 )|nwith expansion:|n 7 != 7|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one != Approx( 9.1f ) )|nwith expansion:|n 9.1f != Approx( 9.1000003815 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.double_pi != Approx( 3.1415926535 ) )|nwith expansion:|n 3.1415926535 != Approx( 3.1415926535 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one != Approx( 9.1f ) )|nwith expansion:|n 9.100000381f|n!=|nApprox( 9.10000038146972656 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.double_pi != Approx( 3.1415926535 ) )|nwith expansion:|n 3.14159265350000005|n!=|nApprox( 3.14159265350000005 )|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello != "hello" )|nwith expansion:|n "hello" != "hello"|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testIgnored name='Inequality checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello.size() != 5 )|nwith expansion:|n 5 != 5|n- failure ignore as test marked as |'ok to fail|'|n']
|
||||
##teamcity[testFinished name='Inequality checks that should fail' duration="{duration}"]
|
||||
@@ -479,9 +479,9 @@
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven < -1 )|nwith expansion:|n 7 < -1|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven >= 8 )|nwith expansion:|n 7 >= 8|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.int_seven <= 6 )|nwith expansion:|n 7 <= 6|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one < 9 )|nwith expansion:|n 9.1f < 9|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one > 10 )|nwith expansion:|n 9.1f > 10|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one > 9.2 )|nwith expansion:|n 9.1f > 9.2|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one < 9 )|nwith expansion:|n 9.100000381f < 9|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one > 10 )|nwith expansion:|n 9.100000381f > 10|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.float_nine_point_one > 9.2 )|nwith expansion:|n 9.100000381f > 9.19999999999999929|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello > "hello" )|nwith expansion:|n "hello" > "hello"|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello < "hello" )|nwith expansion:|n "hello" < "hello"|n']
|
||||
##teamcity[testFailed name='Ordering comparison checks that should fail' message='Condition.tests.cpp:<line number>|nexpression failed|n CHECK( data.str_hello > "hellp" )|nwith expansion:|n "hello" > "hellp"|n']
|
||||
@@ -673,7 +673,7 @@
|
||||
##teamcity[testStarted name='Type conversions of RangeEquals and similar']
|
||||
##teamcity[testFinished name='Type conversions of RangeEquals and similar' duration="{duration}"]
|
||||
##teamcity[testStarted name='Unexpected exceptions can be translated']
|
||||
##teamcity[testFailed name='Unexpected exceptions can be translated' message='Exception.tests.cpp:<line number>|n...............................................................................|n|nException.tests.cpp:<line number>|nunexpected exception with message:|n "3.14"']
|
||||
##teamcity[testFailed name='Unexpected exceptions can be translated' message='Exception.tests.cpp:<line number>|n...............................................................................|n|nException.tests.cpp:<line number>|nunexpected exception with message:|n "3.14000000000000012"']
|
||||
##teamcity[testFinished name='Unexpected exceptions can be translated' duration="{duration}"]
|
||||
##teamcity[testStarted name='Upcasting special member functions']
|
||||
##teamcity[testFinished name='Upcasting special member functions' duration="{duration}"]
|
||||
@@ -860,8 +860,6 @@
|
||||
##teamcity[testFinished name='non streamable - with conv. op' duration="{duration}"]
|
||||
##teamcity[testStarted name='non-copyable objects']
|
||||
##teamcity[testFinished name='non-copyable objects' duration="{duration}"]
|
||||
##teamcity[testStarted name='normal_cdf']
|
||||
##teamcity[testFinished name='normal_cdf' duration="{duration}"]
|
||||
##teamcity[testStarted name='normal_quantile']
|
||||
##teamcity[testFinished name='normal_quantile' duration="{duration}"]
|
||||
##teamcity[testStarted name='not allowed']
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,7 @@
|
||||
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
#include <catch2/internal/catch_random_integer_helpers.hpp>
|
||||
#include <random>
|
||||
|
||||
namespace {
|
||||
template <typename Int>
|
||||
@@ -20,6 +21,58 @@ namespace {
|
||||
CHECK( extendedMult( b, a ) ==
|
||||
ExtendedMultResult<Int>{ upper_result, lower_result } );
|
||||
}
|
||||
|
||||
// Simple (and slow) implmentation of extended multiplication for tests
|
||||
constexpr Catch::Detail::ExtendedMultResult<std::uint64_t>
|
||||
extendedMultNaive( std::uint64_t lhs, std::uint64_t rhs ) {
|
||||
// This is a simple long multiplication, where we split lhs and rhs
|
||||
// into two 32-bit "digits", so that we can do ops with carry in 64-bits.
|
||||
//
|
||||
// 32b 32b 32b 32b
|
||||
// lhs L1 L2
|
||||
// * rhs R1 R2
|
||||
// ------------------------
|
||||
// | R2 * L2 |
|
||||
// | R2 * L1 |
|
||||
// | R1 * L2 |
|
||||
// | R1 * L1 |
|
||||
// -------------------------
|
||||
// | a | b | c | d |
|
||||
|
||||
#define CarryBits( x ) ( x >> 32 )
|
||||
#define Digits( x ) ( x & 0xFF'FF'FF'FF )
|
||||
|
||||
auto r2l2 = Digits( rhs ) * Digits( lhs );
|
||||
auto r2l1 = Digits( rhs ) * CarryBits( lhs );
|
||||
auto r1l2 = CarryBits( rhs ) * Digits( lhs );
|
||||
auto r1l1 = CarryBits( rhs ) * CarryBits( lhs );
|
||||
|
||||
// Sum to columns first
|
||||
auto d = Digits( r2l2 );
|
||||
auto c = CarryBits( r2l2 ) + Digits( r2l1 ) + Digits( r1l2 );
|
||||
auto b = CarryBits( r2l1 ) + CarryBits( r1l2 ) + Digits( r1l1 );
|
||||
auto a = CarryBits( r1l1 );
|
||||
|
||||
// Propagate carries between columns
|
||||
c += CarryBits( d );
|
||||
b += CarryBits( c );
|
||||
a += CarryBits( b );
|
||||
|
||||
// Remove the used carries
|
||||
c = Digits( c );
|
||||
b = Digits( b );
|
||||
a = Digits( a );
|
||||
|
||||
#undef CarryBits
|
||||
#undef Digits
|
||||
|
||||
return {
|
||||
a << 32 | b, // upper 64 bits
|
||||
c << 32 | d // lower 64 bits
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
TEST_CASE( "extendedMult 64x64", "[Integer][approvals]" ) {
|
||||
@@ -62,6 +115,27 @@ TEST_CASE( "extendedMult 64x64", "[Integer][approvals]" ) {
|
||||
0xdf44'2d22'ce48'59b9 );
|
||||
}
|
||||
|
||||
TEST_CASE("extendedMult 64x64 - all implementations", "[integer][approvals]") {
|
||||
using Catch::Detail::extendedMult;
|
||||
using Catch::Detail::extendedMultPortable;
|
||||
using Catch::Detail::fillBitsFrom;
|
||||
|
||||
std::random_device rng;
|
||||
for (size_t i = 0; i < 100; ++i) {
|
||||
auto a = fillBitsFrom<std::uint64_t>( rng );
|
||||
auto b = fillBitsFrom<std::uint64_t>( rng );
|
||||
CAPTURE( a, b );
|
||||
|
||||
auto naive_ab = extendedMultNaive( a, b );
|
||||
|
||||
REQUIRE( naive_ab == extendedMultNaive( b, a ) );
|
||||
REQUIRE( naive_ab == extendedMultPortable( a, b ) );
|
||||
REQUIRE( naive_ab == extendedMultPortable( b, a ) );
|
||||
REQUIRE( naive_ab == extendedMult( a, b ) );
|
||||
REQUIRE( naive_ab == extendedMult( b, a ) );
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE( "SizedUnsignedType helpers", "[integer][approvals]" ) {
|
||||
using Catch::Detail::SizedUnsignedType_t;
|
||||
using Catch::Detail::DoubleWidthUnsignedType_t;
|
||||
|
@@ -172,7 +172,7 @@ TEST_CASE("uniform samples", "[benchmark]") {
|
||||
}
|
||||
|
||||
|
||||
TEST_CASE("normal_cdf", "[benchmark]") {
|
||||
TEST_CASE("normal_cdf", "[benchmark][approvals]") {
|
||||
using Catch::Benchmark::Detail::normal_cdf;
|
||||
using Catch::Approx;
|
||||
CHECK(normal_cdf(0.000000) == Approx(0.50000000000000000));
|
||||
|
@@ -140,7 +140,9 @@ TEMPLATE_TEST_CASE( "uniform_integer_distribution can handle unit ranges",
|
||||
uint32_t,
|
||||
int32_t,
|
||||
uint64_t,
|
||||
int64_t ) {
|
||||
int64_t,
|
||||
size_t,
|
||||
ptrdiff_t) {
|
||||
// We want random seed to sample different parts of the rng state,
|
||||
// the output is predetermined anyway
|
||||
std::random_device rd;
|
||||
@@ -493,6 +495,22 @@ TEMPLATE_TEST_CASE( "uniform_integer_distribution is reproducible",
|
||||
REQUIRE_THAT(generated, Catch::Matchers::RangeEquals(uniform_integer_test_params<TestType>::expected));
|
||||
}
|
||||
|
||||
// The reproducibility tests assume that operations on `float`/`double`
|
||||
// happen in the same precision as the operated-upon type. This is
|
||||
// generally true, unless the code is compiled for 32 bit targets without
|
||||
// SSE2 enabled, in which case the operations are done in the x87 FPU,
|
||||
// which usually implies doing math in 80 bit floats, and then rounding
|
||||
// into smaller type when the type is saved into memory. This obviously
|
||||
// leads to a different answer, than doing the math in the correct precision.
|
||||
#if ( defined( _MSC_VER ) && _M_IX86_FP < 2 ) || \
|
||||
( defined( __GNUC__ ) && \
|
||||
( ( defined( __i386__ ) || defined( __x86_64__ ) ) ) && \
|
||||
!defined( __SSE2_MATH__ ) )
|
||||
# define CATCH_TEST_CONFIG_DISABLE_FLOAT_REPRODUCIBILITY_TESTS
|
||||
#endif
|
||||
|
||||
#if !defined( CATCH_TEST_CONFIG_DISABLE_FLOAT_REPRODUCIBILITY_TESTS )
|
||||
|
||||
namespace {
|
||||
template <typename T>
|
||||
struct uniform_fp_test_params;
|
||||
@@ -550,20 +568,6 @@ namespace {
|
||||
#endif
|
||||
} // namespace
|
||||
|
||||
// The reproducibility tests assume that operations on `float`/`double`
|
||||
// happen in the same precision as the operated-upon type. This is
|
||||
// generally true, unless the code is compiled for 32 bit targets without
|
||||
// SSE2 enabled, in which case the operations are done in the x87 FPU,
|
||||
// which usually implies doing math in 80 bit floats, and then rounding
|
||||
// into smaller type when the type is saved into memory. This obviously
|
||||
// leads to a different answer, than doing the math in the correct precision.
|
||||
#if ( defined( _MSC_VER ) && _M_IX86_FP < 2 ) || \
|
||||
( defined( __GNUC__ ) && !defined( __SSE2_MATH__ ) )
|
||||
# define CATCH_TEST_CONFIG_DISABLE_FLOAT_REPRODUCIBILITY_TESTS
|
||||
#endif
|
||||
|
||||
#if !defined( CATCH_TEST_CONFIG_DISABLE_FLOAT_REPRODUCIBILITY_TESTS )
|
||||
|
||||
TEMPLATE_TEST_CASE( "uniform_floating_point_distribution is reproducible",
|
||||
"[rng][distribution][floating-point][approvals]",
|
||||
float,
|
||||
@@ -594,7 +598,7 @@ TEMPLATE_TEST_CASE( "uniform_floating_point_distribution can handle unitary rang
|
||||
CAPTURE( seed );
|
||||
Catch::SimplePcg32 pcg( seed );
|
||||
|
||||
const auto highest = uniform_fp_test_params<TestType>::highest;
|
||||
const auto highest = TestType(385.125);
|
||||
Catch::uniform_floating_point_distribution<TestType> dist( highest,
|
||||
highest );
|
||||
|
||||
|
@@ -12,6 +12,7 @@
|
||||
#include <sstream>
|
||||
|
||||
using Catch::TextFlow::Column;
|
||||
using Catch::TextFlow::AnsiSkippingString;
|
||||
|
||||
namespace {
|
||||
static std::string as_written(Column const& c) {
|
||||
@@ -198,3 +199,202 @@ TEST_CASE( "#1400 - TextFlow::Column wrapping would sometimes duplicate words",
|
||||
" in \n"
|
||||
" convallis posuere, libero nisi ultricies orci, nec lobortis.");
|
||||
}
|
||||
|
||||
TEST_CASE( "TextFlow::AnsiSkippingString skips ansi sequences",
|
||||
"[TextFlow][ansiskippingstring][approvals]" ) {
|
||||
|
||||
SECTION("basic string") {
|
||||
std::string text = "a\033[38;2;98;174;239mb\033[38mc\033[0md\033[me";
|
||||
AnsiSkippingString str(text);
|
||||
|
||||
SECTION( "iterates forward" ) {
|
||||
auto it = str.begin();
|
||||
CHECK(*it == 'a');
|
||||
++it;
|
||||
CHECK(*it == 'b');
|
||||
++it;
|
||||
CHECK(*it == 'c');
|
||||
++it;
|
||||
CHECK(*it == 'd');
|
||||
++it;
|
||||
CHECK(*it == 'e');
|
||||
++it;
|
||||
CHECK(it == str.end());
|
||||
}
|
||||
SECTION( "iterates backwards" ) {
|
||||
auto it = str.end();
|
||||
--it;
|
||||
CHECK(*it == 'e');
|
||||
--it;
|
||||
CHECK(*it == 'd');
|
||||
--it;
|
||||
CHECK(*it == 'c');
|
||||
--it;
|
||||
CHECK(*it == 'b');
|
||||
--it;
|
||||
CHECK(*it == 'a');
|
||||
CHECK(it == str.begin());
|
||||
}
|
||||
}
|
||||
|
||||
SECTION( "ansi escape sequences at the start" ) {
|
||||
std::string text = "\033[38;2;98;174;239ma\033[38;2;98;174;239mb\033[38mc\033[0md\033[me";
|
||||
AnsiSkippingString str(text);
|
||||
auto it = str.begin();
|
||||
CHECK(*it == 'a');
|
||||
++it;
|
||||
CHECK(*it == 'b');
|
||||
++it;
|
||||
CHECK(*it == 'c');
|
||||
++it;
|
||||
CHECK(*it == 'd');
|
||||
++it;
|
||||
CHECK(*it == 'e');
|
||||
++it;
|
||||
CHECK(it == str.end());
|
||||
--it;
|
||||
CHECK(*it == 'e');
|
||||
--it;
|
||||
CHECK(*it == 'd');
|
||||
--it;
|
||||
CHECK(*it == 'c');
|
||||
--it;
|
||||
CHECK(*it == 'b');
|
||||
--it;
|
||||
CHECK(*it == 'a');
|
||||
CHECK(it == str.begin());
|
||||
}
|
||||
|
||||
SECTION( "ansi escape sequences at the end" ) {
|
||||
std::string text = "a\033[38;2;98;174;239mb\033[38mc\033[0md\033[me\033[38;2;98;174;239m";
|
||||
AnsiSkippingString str(text);
|
||||
auto it = str.begin();
|
||||
CHECK(*it == 'a');
|
||||
++it;
|
||||
CHECK(*it == 'b');
|
||||
++it;
|
||||
CHECK(*it == 'c');
|
||||
++it;
|
||||
CHECK(*it == 'd');
|
||||
++it;
|
||||
CHECK(*it == 'e');
|
||||
++it;
|
||||
CHECK(it == str.end());
|
||||
--it;
|
||||
CHECK(*it == 'e');
|
||||
--it;
|
||||
CHECK(*it == 'd');
|
||||
--it;
|
||||
CHECK(*it == 'c');
|
||||
--it;
|
||||
CHECK(*it == 'b');
|
||||
--it;
|
||||
CHECK(*it == 'a');
|
||||
CHECK(it == str.begin());
|
||||
}
|
||||
|
||||
SECTION( "skips consecutive escapes" ) {
|
||||
std::string text = "\033[38;2;98;174;239m\033[38;2;98;174;239ma\033[38;2;98;174;239mb\033[38m\033[38m\033[38mc\033[0md\033[me";
|
||||
AnsiSkippingString str(text);
|
||||
auto it = str.begin();
|
||||
CHECK(*it == 'a');
|
||||
++it;
|
||||
CHECK(*it == 'b');
|
||||
++it;
|
||||
CHECK(*it == 'c');
|
||||
++it;
|
||||
CHECK(*it == 'd');
|
||||
++it;
|
||||
CHECK(*it == 'e');
|
||||
++it;
|
||||
CHECK(it == str.end());
|
||||
--it;
|
||||
CHECK(*it == 'e');
|
||||
--it;
|
||||
CHECK(*it == 'd');
|
||||
--it;
|
||||
CHECK(*it == 'c');
|
||||
--it;
|
||||
CHECK(*it == 'b');
|
||||
--it;
|
||||
CHECK(*it == 'a');
|
||||
CHECK(it == str.begin());
|
||||
}
|
||||
|
||||
SECTION( "handles incomplete ansi sequences" ) {
|
||||
std::string text = "a\033[b\033[30c\033[30;d\033[30;2e";
|
||||
AnsiSkippingString str(text);
|
||||
CHECK(std::string(str.begin(), str.end()) == text);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE( "TextFlow::AnsiSkippingString computes the size properly",
|
||||
"[TextFlow][ansiskippingstring][approvals]" ) {
|
||||
std::string text = "\033[38;2;98;174;239m\033[38;2;98;174;239ma\033[38;2;98;174;239mb\033[38m\033[38m\033[38mc\033[0md\033[me";
|
||||
AnsiSkippingString str(text);
|
||||
CHECK(str.size() == 5);
|
||||
}
|
||||
|
||||
TEST_CASE( "TextFlow::AnsiSkippingString substrings properly",
|
||||
"[TextFlow][ansiskippingstring][approvals]" ) {
|
||||
SECTION("basic test") {
|
||||
std::string text = "a\033[38;2;98;174;239mb\033[38mc\033[0md\033[me";
|
||||
AnsiSkippingString str(text);
|
||||
auto a = str.begin();
|
||||
auto b = str.begin();
|
||||
++b;
|
||||
++b;
|
||||
CHECK(str.substring(a, b) == "a\033[38;2;98;174;239mb\033[38m");
|
||||
++a;
|
||||
++b;
|
||||
CHECK(str.substring(a, b) == "b\033[38mc\033[0m");
|
||||
CHECK(str.substring(a, str.end()) == "b\033[38mc\033[0md\033[me");
|
||||
CHECK(str.substring(str.begin(), str.end()) == text);
|
||||
}
|
||||
SECTION("escapes at the start") {
|
||||
std::string text = "\033[38;2;98;174;239m\033[38;2;98;174;239ma\033[38;2;98;174;239mb\033[38m\033[38m\033[38mc\033[0md\033[me";
|
||||
AnsiSkippingString str(text);
|
||||
auto a = str.begin();
|
||||
auto b = str.begin();
|
||||
++b;
|
||||
++b;
|
||||
CHECK(str.substring(a, b) == "\033[38;2;98;174;239m\033[38;2;98;174;239ma\033[38;2;98;174;239mb\033[38m\033[38m\033[38m");
|
||||
++a;
|
||||
++b;
|
||||
CHECK(str.substring(a, b) == "b\033[38m\033[38m\033[38mc\033[0m");
|
||||
CHECK(str.substring(a, str.end()) == "b\033[38m\033[38m\033[38mc\033[0md\033[me");
|
||||
CHECK(str.substring(str.begin(), str.end()) == text);
|
||||
}
|
||||
SECTION("escapes at the end") {
|
||||
std::string text = "a\033[38;2;98;174;239mb\033[38mc\033[0md\033[me\033[38m";
|
||||
AnsiSkippingString str(text);
|
||||
auto a = str.begin();
|
||||
auto b = str.begin();
|
||||
++b;
|
||||
++b;
|
||||
CHECK(str.substring(a, b) == "a\033[38;2;98;174;239mb\033[38m");
|
||||
++a;
|
||||
++b;
|
||||
CHECK(str.substring(a, b) == "b\033[38mc\033[0m");
|
||||
CHECK(str.substring(a, str.end()) == "b\033[38mc\033[0md\033[me\033[38m");
|
||||
CHECK(str.substring(str.begin(), str.end()) == text);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE( "TextFlow::Column skips ansi escape sequences",
|
||||
"[TextFlow][column][approvals]" ) {
|
||||
std::string text = "\033[38;2;98;174;239m\033[38;2;198;120;221mThe quick brown \033[38;2;198;120;221mfox jumped over the lazy dog\033[0m";
|
||||
Column col(text);
|
||||
|
||||
SECTION( "width=20" ) {
|
||||
col.width( 20 );
|
||||
REQUIRE( as_written( col ) == "\033[38;2;98;174;239m\033[38;2;198;120;221mThe quick brown \033[38;2;198;120;221mfox\n"
|
||||
"jumped over the lazy\n"
|
||||
"dog\033[0m" );
|
||||
}
|
||||
|
||||
SECTION( "width=80" ) {
|
||||
col.width( 80 );
|
||||
REQUIRE( as_written( col ) == text );
|
||||
}
|
||||
}
|
||||
|
@@ -20,7 +20,6 @@ CATCH_REGISTER_TAG_ALIAS("[@tricky]", "[tricky]~[.]")
|
||||
#ifdef __clang__
|
||||
# pragma clang diagnostic ignored "-Wpadded"
|
||||
# pragma clang diagnostic ignored "-Wweak-vtables"
|
||||
# pragma clang diagnostic ignored "-Wc++98-compat"
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@@ -357,6 +357,12 @@ namespace {
|
||||
constexpr friend bool operator op( ZeroLiteralConsteval, \
|
||||
TypeWithConstevalLit0Comparison ) { \
|
||||
return false; \
|
||||
} \
|
||||
/* std::orderings only have these for ==, but we add them for all \
|
||||
operators so we can test all overloads for decomposer */ \
|
||||
constexpr friend bool operator op( TypeWithConstevalLit0Comparison, \
|
||||
TypeWithConstevalLit0Comparison ) { \
|
||||
return true; \
|
||||
}
|
||||
|
||||
DEFINE_COMP_OP( < )
|
||||
@@ -394,6 +400,33 @@ TEST_CASE( "#2555 - types that can only be compared with 0 literal implemented a
|
||||
REQUIRE_FALSE( 0 != TypeWithConstevalLit0Comparison{} );
|
||||
}
|
||||
|
||||
// We check all comparison ops to test, even though orderings, the primary
|
||||
// motivation for this functionality, only have self-comparison (and thus
|
||||
// have the ambiguity issue) for `==` and `!=`.
|
||||
TEST_CASE( "Comparing const instances of type registered with capture_by_value",
|
||||
"[regression][approvals][compilation]" ) {
|
||||
SECTION("Type with consteval-int constructor") {
|
||||
auto const const_Lit0Type_1 = TypeWithConstevalLit0Comparison{};
|
||||
auto const const_Lit0Type_2 = TypeWithConstevalLit0Comparison{};
|
||||
REQUIRE( const_Lit0Type_1 == const_Lit0Type_2 );
|
||||
REQUIRE( const_Lit0Type_1 <= const_Lit0Type_2 );
|
||||
REQUIRE( const_Lit0Type_1 < const_Lit0Type_2 );
|
||||
REQUIRE( const_Lit0Type_1 >= const_Lit0Type_2 );
|
||||
REQUIRE( const_Lit0Type_1 > const_Lit0Type_2 );
|
||||
REQUIRE( const_Lit0Type_1 != const_Lit0Type_2 );
|
||||
}
|
||||
SECTION("Type with constexpr-int constructor") {
|
||||
auto const const_Lit0Type_1 = TypeWithLit0Comparisons{};
|
||||
auto const const_Lit0Type_2 = TypeWithLit0Comparisons{};
|
||||
REQUIRE( const_Lit0Type_1 == const_Lit0Type_2 );
|
||||
REQUIRE( const_Lit0Type_1 <= const_Lit0Type_2 );
|
||||
REQUIRE( const_Lit0Type_1 < const_Lit0Type_2 );
|
||||
REQUIRE( const_Lit0Type_1 >= const_Lit0Type_2 );
|
||||
REQUIRE( const_Lit0Type_1 > const_Lit0Type_2 );
|
||||
REQUIRE( const_Lit0Type_1 != const_Lit0Type_2 );
|
||||
}
|
||||
}
|
||||
|
||||
#endif // C++20 consteval
|
||||
|
||||
|
||||
@@ -420,3 +453,17 @@ TEST_CASE("#2571 - tests compile types that have multiple implicit constructors
|
||||
REQUIRE( mic1 > mic2 );
|
||||
REQUIRE( mic1 >= mic2 );
|
||||
}
|
||||
|
||||
#if defined( CATCH_CONFIG_CPP20_COMPARE_OVERLOADS )
|
||||
// This test does not test all the related codepaths, but it is the original
|
||||
// reproducer
|
||||
TEST_CASE( "Comparing const std::weak_ordering instances must compile",
|
||||
"[compilation][approvals][regression]" ) {
|
||||
auto const const_ordering_1 = std::weak_ordering::less;
|
||||
auto const const_ordering_2 = std::weak_ordering::less;
|
||||
auto plain_ordering_1 = std::weak_ordering::less;
|
||||
REQUIRE( const_ordering_1 == plain_ordering_1 );
|
||||
REQUIRE( const_ordering_1 == const_ordering_2 );
|
||||
REQUIRE( plain_ordering_1 == const_ordering_1 );
|
||||
}
|
||||
#endif
|
||||
|
@@ -11,11 +11,6 @@
|
||||
#include <catch2/internal/catch_config_wchar.hpp>
|
||||
#include <catch2/internal/catch_windows_h_proxy.hpp>
|
||||
|
||||
#ifdef __clang__
|
||||
# pragma clang diagnostic ignored "-Wc++98-compat"
|
||||
# pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
|
||||
#endif
|
||||
|
||||
|
||||
#include <iostream>
|
||||
#include <cerrno>
|
||||
|
@@ -124,8 +124,8 @@ TEST_CASE("Precision of floating point stringification can be set", "[toString][
|
||||
const auto oldPrecision = sm::precision;
|
||||
|
||||
const float testFloat = 1.12345678901234567899f;
|
||||
auto str1 = sm::convert(testFloat);
|
||||
sm::precision = 5;
|
||||
auto str1 = sm::convert( testFloat );
|
||||
// "1." prefix = 2 chars, f suffix is another char
|
||||
CHECK(str1.size() == 3 + 5);
|
||||
|
||||
|
@@ -29,8 +29,8 @@ TEST_CASE( "tuple<int>", "[toString][tuple]" )
|
||||
TEST_CASE( "tuple<float,int>", "[toString][tuple]" )
|
||||
{
|
||||
typedef std::tuple<float,int> type;
|
||||
CHECK( "1.2f" == ::Catch::Detail::stringify(float(1.2)) );
|
||||
CHECK( "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) );
|
||||
CHECK( "1.5f" == ::Catch::Detail::stringify(float(1.5)) );
|
||||
CHECK( "{ 1.5f, 0 }" == ::Catch::Detail::stringify(type{1.5f,0}) );
|
||||
}
|
||||
|
||||
TEST_CASE( "tuple<string,string>", "[toString][tuple]" )
|
||||
@@ -42,8 +42,8 @@ TEST_CASE( "tuple<string,string>", "[toString][tuple]" )
|
||||
TEST_CASE( "tuple<tuple<int>,tuple<>,float>", "[toString][tuple]" )
|
||||
{
|
||||
typedef std::tuple<std::tuple<int>,std::tuple<>,float> type;
|
||||
type value { std::tuple<int>{42}, {}, 1.2f };
|
||||
CHECK( "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) );
|
||||
type value { std::tuple<int>{42}, {}, 1.5f };
|
||||
CHECK( "{ { 42 }, { }, 1.5f }" == ::Catch::Detail::stringify(value) );
|
||||
}
|
||||
|
||||
TEST_CASE( "tuple<nullptr,int,const char *>", "[approvals][toString][tuple]" ) {
|
||||
|
@@ -34,6 +34,12 @@ struct TypeWithLit0Comparisons {
|
||||
constexpr friend bool operator op( ZeroLiteralAsPointer, \
|
||||
TypeWithLit0Comparisons ) { \
|
||||
return false; \
|
||||
} \
|
||||
/* std::orderings only have these for ==, but we add them for all \
|
||||
operators so we can test all overloads for decomposer */ \
|
||||
constexpr friend bool operator op( TypeWithLit0Comparisons, \
|
||||
TypeWithLit0Comparisons ) { \
|
||||
return true; \
|
||||
}
|
||||
|
||||
DEFINE_COMP_OP( < )
|
||||
|
@@ -11,6 +11,12 @@ add_executable(tests
|
||||
add_subdirectory(${CATCH2_PATH} catch2-build)
|
||||
target_link_libraries(tests PRIVATE Catch2::Catch2WithMain)
|
||||
|
||||
include(CTest)
|
||||
enable_testing()
|
||||
include(Catch)
|
||||
catch_discover_tests(tests)
|
||||
set(extra_args)
|
||||
if (CMAKE_VERSION GREATER_EQUAL 3.27)
|
||||
list(APPEND extra_args
|
||||
DL_PATHS "${CMAKE_CURRENT_LIST_DIR};${CMAKE_CURRENT_LIST_DIR}/.."
|
||||
)
|
||||
endif ()
|
||||
catch_discover_tests(tests ${extra_args})
|
||||
|
@@ -10,7 +10,24 @@
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import re
|
||||
import json
|
||||
|
||||
cmake_version_regex = re.compile('cmake version (\d+)\.(\d+)\.(\d+)')
|
||||
|
||||
def get_cmake_version():
|
||||
result = subprocess.run(['cmake', '--version'],
|
||||
capture_output = True,
|
||||
check = True,
|
||||
text = True)
|
||||
version_match = cmake_version_regex.match(result.stdout)
|
||||
if not version_match:
|
||||
print('Could not find cmake version in output')
|
||||
print(f"output: '{result.stdout}'")
|
||||
exit(4)
|
||||
return (int(version_match.group(1)),
|
||||
int(version_match.group(2)),
|
||||
int(version_match.group(3)))
|
||||
|
||||
def build_project(sources_dir, output_base_path, catch2_path):
|
||||
build_dir = os.path.join(output_base_path, 'ctest-registration-test')
|
||||
@@ -62,8 +79,7 @@ def get_test_names(build_path):
|
||||
root = ET.fromstring(result.stdout)
|
||||
return [tc.text for tc in root.findall('TestCase/Name')]
|
||||
|
||||
|
||||
def list_ctest_tests(build_path):
|
||||
def get_ctest_listing(build_path):
|
||||
old_path = os.getcwd()
|
||||
os.chdir(build_path)
|
||||
|
||||
@@ -73,10 +89,10 @@ def list_ctest_tests(build_path):
|
||||
check = True,
|
||||
text = True)
|
||||
os.chdir(old_path)
|
||||
return result.stdout
|
||||
|
||||
import json
|
||||
|
||||
ctest_response = json.loads(result.stdout)
|
||||
def extract_tests_from_ctest(ctest_output):
|
||||
ctest_response = json.loads(ctest_output)
|
||||
tests = ctest_response['tests']
|
||||
test_names = []
|
||||
for test in tests:
|
||||
@@ -90,6 +106,15 @@ def list_ctest_tests(build_path):
|
||||
|
||||
return test_names
|
||||
|
||||
def check_DL_PATHS(ctest_output):
|
||||
ctest_response = json.loads(ctest_output)
|
||||
tests = ctest_response['tests']
|
||||
for test in tests:
|
||||
properties = test['properties']
|
||||
for property in properties:
|
||||
if property['name'] == 'ENVIRONMENT_MODIFICATION':
|
||||
assert len(property['value']) == 2, f"The test provides 2 arguments to DL_PATHS, but instead found {len(property['value'])}"
|
||||
|
||||
def escape_catch2_test_name(name):
|
||||
for char in ('\\', ',', '[', ']'):
|
||||
name = name.replace(char, f"\\{char}")
|
||||
@@ -106,7 +131,8 @@ if __name__ == '__main__':
|
||||
build_path = build_project(sources_dir, output_base_path, catch2_path)
|
||||
|
||||
catch_test_names = [escape_catch2_test_name(name) for name in get_test_names(build_path)]
|
||||
ctest_test_names = list_ctest_tests(build_path)
|
||||
ctest_output = get_ctest_listing(build_path)
|
||||
ctest_test_names = extract_tests_from_ctest(ctest_output)
|
||||
|
||||
mismatched = 0
|
||||
for catch_test in catch_test_names:
|
||||
@@ -121,3 +147,7 @@ if __name__ == '__main__':
|
||||
if mismatched:
|
||||
print(f"Found {mismatched} mismatched tests catch test names and ctest test commands!")
|
||||
exit(1)
|
||||
|
||||
cmake_version = get_cmake_version()
|
||||
if cmake_version >= (3, 27):
|
||||
check_DL_PATHS(ctest_output)
|
||||
|
@@ -28,14 +28,23 @@ if len(sys.argv) != 3:
|
||||
catch2_source_path = os.path.abspath(sys.argv[1])
|
||||
build_dir_path = os.path.join(os.path.abspath(sys.argv[2]), 'CMakeConfigTests', 'DefaultReporter')
|
||||
|
||||
output_file = f"{build_dir_path}/foo.xml"
|
||||
# We need to escape backslashes in Windows paths, because otherwise they
|
||||
# are interpreted as escape characters in strings, and cause compilation
|
||||
# error.
|
||||
escaped_output_file = output_file.replace('\\', '\\\\')
|
||||
configure_and_build(catch2_source_path,
|
||||
build_dir_path,
|
||||
[("CATCH_CONFIG_DEFAULT_REPORTER", "xml")])
|
||||
[("CATCH_CONFIG_DEFAULT_REPORTER", f"xml::out={escaped_output_file}")])
|
||||
|
||||
stdout, _ = run_and_return_output(os.path.join(build_dir_path, 'tests'), 'SelfTest', ['[approx][custom]'])
|
||||
|
||||
xml_tag = '</Catch2TestRun>'
|
||||
if xml_tag not in stdout:
|
||||
print("Could not find '{}' in the stdout".format(xml_tag))
|
||||
print('stdout: "{}"'.format(stdout))
|
||||
if not os.path.exists(output_file):
|
||||
print(f'Did not find the {output_file} file')
|
||||
exit(2)
|
||||
|
||||
xml_tag = '</Catch2TestRun>'
|
||||
with open(output_file, 'r', encoding='utf-8') as file:
|
||||
if xml_tag not in file.read():
|
||||
print(f"Could not find '{xml_tag}' in the file")
|
||||
exit(3)
|
||||
|
@@ -5,7 +5,7 @@ reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\AutoExclusion
|
||||
cd Build
|
||||
if "%CONFIGURATION%"=="Debug" (
|
||||
if "%coverage%"=="1" (
|
||||
ctest -j 2 -C %CONFIGURATION% -D ExperimentalMemCheck || exit /b !ERRORLEVEL!
|
||||
ctest -j 2 -C %CONFIGURATION% -D ExperimentalMemCheck -LE uses-signals || exit /b !ERRORLEVEL!
|
||||
python ..\tools\misc\appveyorMergeCoverageScript.py || exit /b !ERRORLEVEL!
|
||||
codecov --root .. --no-color --disable gcov -f cobertura.xml -t %CODECOV_TOKEN% || exit /b !ERRORLEVEL!
|
||||
) else (
|
||||
|
Reference in New Issue
Block a user