Skip to content

Commit c104d2c

Browse files
author
Hana Dusíková
committed
fix support for zero-terminated backreferences + is_prime test
1 parent b1141c2 commit c104d2c

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

include/ctre/evaluation.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ constexpr CTRE_FORCE_INLINE R evaluate(const Iterator begin, Iterator current, c
380380

381381
// backreference support (match agains content of iterators)
382382
template <typename Iterator, typename EndIterator> constexpr CTRE_FORCE_INLINE string_match_result<Iterator> match_against_range(Iterator current, const EndIterator end, Iterator range_current, const Iterator range_end) noexcept {
383-
while (current != end && range_current != range_end) {
383+
while (end != current && range_end != range_current) {
384384
if (*current == *range_current) {
385385
current++;
386386
range_current++;

tests/is_prime.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include <ctre.hpp>
2+
3+
static constexpr auto pattern = ctll::fixed_string(".?|(..+?)\\g{1}+");
4+
5+
constexpr bool is_prime(std::string_view input) {
6+
return !ctre::match<pattern>(input);
7+
}
8+
9+
int main()
10+
{
11+
static_assert(!is_prime(""));
12+
static_assert(!is_prime("a"));
13+
static_assert( is_prime("aa"));
14+
static_assert( is_prime("aaa"));
15+
static_assert(!is_prime("aaaa"));
16+
static_assert( is_prime("aaaaa"));
17+
static_assert(!is_prime("aaaaaa"));
18+
static_assert( is_prime("aaaaaaa"));
19+
static_assert(!is_prime("aaaaaaaa"));
20+
static_assert(!is_prime("aaaaaaaaa"));
21+
static_assert(!is_prime("aaaaaaaaaa"));
22+
static_assert( is_prime("aaaaaaaaaaa"));
23+
}

0 commit comments

Comments
 (0)