Skip to content

A modern, C++-native, header-only, framework for unit-tests, TDD and BDD

License

Notifications You must be signed in to change notification settings

Corvusoft/catch-dependency

This branch is 33 commits behind catchorg/Catch2:devel.

Folders and files

NameName
Last commit message
Last commit date
Mar 12, 2024
Aug 13, 2024
Apr 30, 2024
Nov 22, 2022
Aug 14, 2024
Aug 5, 2024
Aug 14, 2024
Aug 24, 2023
Aug 14, 2024
Aug 14, 2024
Jul 22, 2020
Apr 21, 2024
Dec 28, 2023
Jan 5, 2023
Mar 1, 2024
Jul 23, 2018
Jul 19, 2024
Jul 19, 2023
Aug 14, 2024
Jun 14, 2023
Aug 17, 2017
Dec 23, 2023
Mar 20, 2017
Jul 22, 2024
Dec 18, 2022
Nov 25, 2021
Jul 22, 2024
Feb 23, 2024
Oct 23, 2020
Apr 20, 2024
Oct 28, 2020
Aug 14, 2024
May 26, 2023

Catch2 logo

Github Releases Linux build status Linux build status MacOS build status Build Status Code Coverage Try online Join the chat in Discord: https://discord.gg/4CWS9zD

What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural. Test names do not have to be valid identifiers, assertions look like normal C++ boolean expressions, and sections provide a nice and local way to share set-up and tear-down code in tests.

Example unit test

#include <catch2/catch_test_macros.hpp>

#include <cstdint>

uint32_t factorial( uint32_t number ) {
    return number <= 1 ? number : factorial(number-1) * number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( factorial( 1) == 1 );
    REQUIRE( factorial( 2) == 2 );
    REQUIRE( factorial( 3) == 6 );
    REQUIRE( factorial(10) == 3'628'800 );
}

Example microbenchmark

#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>

#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number - 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);

    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}

Note that benchmarks are not run by default, so you need to run it explicitly with the [!benchmark] tag.

Catch2 v3 has been released!

You are on the devel branch, where the v3 version is being developed. v3 brings a bunch of significant changes, the big one being that Catch2 is no longer a single-header library. Catch2 now behaves as a normal library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at our documentation. It provides a simple guidelines on getting started, and collects most common migration problems.

For the previous major version of Catch2 look into the v2.x branch here on GitHub.

How to use it

This documentation comprises these three parts:

More

About

A modern, C++-native, header-only, framework for unit-tests, TDD and BDD

C++ Automated Test Cases in Headers

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 90.2%
  • CMake 5.5%
  • Python 3.2%
  • Meson 0.6%
  • Starlark 0.3%
  • Batchfile 0.1%
  • Other 0.1%