-
-
Save melak47/8d8429c102fda933ce98dca31cb400fc to your computer and use it in GitHub Desktop.
catch2 benchmark
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <catch2/catch.hpp> | |
#include <catch2/catch_matchers_string.h> | |
#include <catch2/catch_matchers_vector.h> | |
template<typename Range> | |
struct EqualsRangeMatcher : Catch::MatcherBaseGeneric<EqualsRangeMatcher<Range>> { | |
EqualsRangeMatcher(Range const& range) : range{range} {} | |
template<typename OtherRange> | |
bool match(OtherRange const& other) const { | |
using std::begin; | |
using std::end; | |
return std::equal(begin(range), end(range), begin(other), end(other)); | |
} | |
std::string describe() const { | |
return "Equals: " + Catch::rangeToString(range); | |
} | |
private: | |
Range const& range; | |
}; | |
template<typename Range> | |
auto EqualsRange(const Range& range) -> EqualsRangeMatcher<Range> { | |
return EqualsRangeMatcher<Range>{range}; | |
} | |
#include <array> | |
#include <vector> | |
#include <list> | |
TEST_CASE("example") { | |
std::array<int, 3> container{1,2,3}; | |
std::array<int, 3> a{1,2,3}; | |
std::vector<int> b{0,1,2}; | |
std::list<int> c{4,5,6}; | |
CHECK_THAT(container, EqualsRange(a) || EqualsRange(b) || EqualsRange(c)); | |
CHECK_THAT(container, EqualsRange(a) || EqualsRange(b)); | |
CHECK_THAT(container, EqualsRange(a) && EqualsRange(b) && EqualsRange(c)); | |
CHECK_THAT(container, EqualsRange(a) || EqualsRange(b) && EqualsRange(b) || EqualsRange(c)); | |
CHECK_THAT(container, | |
(!!EqualsRange(c) || EqualsRange(c)) || (EqualsRange(c) || EqualsRange(c)) | |
); | |
CHECK_THAT(container, | |
!EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
&& !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
&& !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
|| !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) && | |
!EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
&& !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
&& !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
|| !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) && | |
!(!EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
&& !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
&& !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
|| !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c))) | |
); | |
} | |
TEST_CASE("old and new matchers") { | |
using Catch::Matchers::EndsWith; | |
using Catch::Matchers::Equals; | |
std::string text = "foobar"; | |
std::array<char, 6> arr{'f', 'o', 'o', 'b', 'a', 'r'}; | |
std::vector<char> vec(text.begin(), text.end()); | |
CHECK_THAT(text, EqualsRange(arr) && EndsWith("bar") ); | |
CHECK_THAT(text, EndsWith("bar") || EqualsRange(arr) ); | |
} | |
TEST_CASE("a", "[matchers][templated]") { | |
std::array<int, 3> container{{ 1,2,3 }}; | |
std::array<int, 3> a{{ 1,2,3 }}; | |
std::vector<int> b{ 0,1,2 }; | |
std::list<int> c{ 4,5,6 }; | |
for(int i = 0; i < 1'000'000; ++i) { | |
REQUIRE_THAT(container, EqualsRange(a) || EqualsRange(b) || EqualsRange(c)); | |
} | |
} | |
TEST_CASE("b", "[matchers][templated]") { | |
const std::string str = "foobar"; | |
const std::array<char, 6> arr{{ 'f', 'o', 'o', 'b', 'a', 'r' }}; | |
const std::array<char, 6> bad_arr{{ 'o', 'o', 'f', 'b', 'a', 'r' }}; | |
using Catch::Matchers::StartsWith; | |
using Catch::Matchers::EndsWith; | |
for(int i = 0; i < 1'000'000; ++i) { | |
REQUIRE_THAT(str, StartsWith("foo") && EqualsRange(arr) && EndsWith("bar")); | |
REQUIRE_THAT(str, StartsWith("foo") && !EqualsRange(bad_arr) && EndsWith("bar")); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <catch2/catch.hpp> | |
#include <catch2/catch_matchers_string.h> | |
#include <catch2/catch_matchers_vector.h> | |
#include <catch2/catch_matchers_templates.hpp> | |
template<typename Range> | |
struct EqualsRangeMatcher final : Catch::MatcherGenericBase { | |
EqualsRangeMatcher(Range const& range) : range{range} {} | |
template<typename OtherRange> | |
bool match(OtherRange const& other) const { | |
using std::begin; | |
using std::end; | |
return std::equal(begin(range), end(range), begin(other), end(other)); | |
} | |
std::string describe() const override { | |
return "Equals: " + Catch::rangeToString(range); | |
} | |
private: | |
Range const& range; | |
}; | |
template<typename Range> | |
auto EqualsRange(const Range& range) -> EqualsRangeMatcher<Range> { | |
return EqualsRangeMatcher<Range>{range}; | |
} | |
#include <array> | |
#include <vector> | |
#include <list> | |
TEST_CASE("example") { | |
std::array<int, 3> container{1,2,3}; | |
std::array<int, 3> a{1,2,3}; | |
std::vector<int> b{0,1,2}; | |
std::list<int> c{4,5,6}; | |
CHECK_THAT(container, EqualsRange(a) || EqualsRange(b) || EqualsRange(c)); | |
CHECK_THAT(container, EqualsRange(a) || EqualsRange(b)); | |
CHECK_THAT(container, EqualsRange(a) && EqualsRange(b) && EqualsRange(c)); | |
CHECK_THAT(container, EqualsRange(a) || EqualsRange(b) && EqualsRange(b) || EqualsRange(c)); | |
CHECK_THAT(container, | |
(!!EqualsRange(c) || EqualsRange(c)) || (EqualsRange(c) || EqualsRange(c)) | |
); | |
CHECK_THAT(container, | |
!EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
&& !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
&& !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
|| !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) && | |
!EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
&& !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
&& !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
|| !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) && | |
!(!EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
&& !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c) | |
|| !(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
&& !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c)) | |
|| !!(EqualsRange(b) && EqualsRange(c) || EqualsRange(b) && EqualsRange(c) || !EqualsRange(c))) | |
); | |
} | |
TEST_CASE("old and new matchers") { | |
using Catch::Matchers::EndsWith; | |
using Catch::Matchers::Equals; | |
std::string text = "foobar"; | |
std::array<char, 6> arr{'f', 'o', 'o', 'b', 'a', 'r'}; | |
std::vector<char> vec(text.begin(), text.end()); | |
CHECK_THAT(text, EqualsRange(arr) && EndsWith("bar") ); | |
CHECK_THAT(text, EndsWith("bar") || EqualsRange(arr) ); | |
} | |
TEST_CASE("a", "[matchers][templated]") { | |
std::array<int, 3> container{{ 1,2,3 }}; | |
std::array<int, 3> a{{ 1,2,3 }}; | |
std::vector<int> b{ 0,1,2 }; | |
std::list<int> c{ 4,5,6 }; | |
for(int i = 0; i < 1'000'000; ++i) { | |
REQUIRE_THAT(container, EqualsRange(a) || EqualsRange(b) || EqualsRange(c)); | |
} | |
} | |
TEST_CASE("b", "[matchers][templated]") { | |
const std::string str = "foobar"; | |
const std::array<char, 6> arr{{ 'f', 'o', 'o', 'b', 'a', 'r' }}; | |
const std::array<char, 6> bad_arr{{ 'o', 'o', 'f', 'b', 'a', 'r' }}; | |
using Catch::Matchers::StartsWith; | |
using Catch::Matchers::EndsWith; | |
for(int i = 0; i < 1'000'000; ++i) { | |
REQUIRE_THAT(str, StartsWith("foo") && EqualsRange(arr) && EndsWith("bar")); | |
REQUIRE_THAT(str, StartsWith("foo") && !EqualsRange(bad_arr) && EndsWith("bar")); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment