140 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <regex>10 11// class regex_token_iterator<BidirectionalIterator, charT, traits>12 13// regex_token_iterator& operator++(int);14 15#include <regex>16#include <cassert>17#include <iterator>18 19#include "test_macros.h"20 21int main(int, char**)22{23 {24 std::regex phone_numbers("\\d{3}-\\d{4}");25 const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";26 std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,27 phone_numbers, -1);28 std::cregex_token_iterator i2 = i;29 std::cregex_token_iterator i3;30 assert(i != std::cregex_token_iterator());31 assert(i2 != std::cregex_token_iterator());32 assert(i->str() == "start ");33 assert(i2->str() == "start ");34 i3 = i++;35 assert(i != std::cregex_token_iterator());36 assert(i2 != std::cregex_token_iterator());37 assert(i3 != std::cregex_token_iterator());38 assert(i->str() == ", ");39 assert(i2->str() == "start ");40 assert(i3->str() == "start ");41 i3 = i++;42 assert(i != std::cregex_token_iterator());43 assert(i2 != std::cregex_token_iterator());44 assert(i3 != std::cregex_token_iterator());45 assert(i->str() == ", ");46 assert(i2->str() == "start ");47 assert(i3->str() == ", ");48 i3 = i++;49 assert(i != std::cregex_token_iterator());50 assert(i2 != std::cregex_token_iterator());51 assert(i3 != std::cregex_token_iterator());52 assert(i->str() == " end");53 assert(i2->str() == "start ");54 assert(i3->str() == ", ");55 i3 = i++;56 assert(i == std::cregex_token_iterator());57 assert(i2 != std::cregex_token_iterator());58 assert(i3 != std::cregex_token_iterator());59 assert(i2->str() == "start ");60 assert(i3->str() == " end");61 }62 {63 std::regex phone_numbers("\\d{3}-\\d{4}");64 const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";65 std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,66 phone_numbers, -1);67 std::cregex_token_iterator i2 = i;68 std::cregex_token_iterator i3;69 assert(i != std::cregex_token_iterator());70 assert(i2 != std::cregex_token_iterator());71 assert(i->str() == "start ");72 assert(i2->str() == "start ");73 i3 = i;74 ++i;75 assert(i != std::cregex_token_iterator());76 assert(i2 != std::cregex_token_iterator());77 assert(i3 != std::cregex_token_iterator());78 assert(i->str() == ", ");79 assert(i2->str() == "start ");80 assert(i3->str() == "start ");81 i3 = i;82 ++i;83 assert(i != std::cregex_token_iterator());84 assert(i2 != std::cregex_token_iterator());85 assert(i3 != std::cregex_token_iterator());86 assert(i->str() == ", ");87 assert(i2->str() == "start ");88 assert(i3->str() == ", ");89 i3 = i;90 ++i;91 assert(i != std::cregex_token_iterator());92 assert(i2 != std::cregex_token_iterator());93 assert(i3 != std::cregex_token_iterator());94 assert(i->str() == " end");95 assert(i2->str() == "start ");96 assert(i3->str() == ", ");97 i3 = i;98 ++i;99 assert(i == std::cregex_token_iterator());100 assert(i2 != std::cregex_token_iterator());101 assert(i3 != std::cregex_token_iterator());102 assert(i2->str() == "start ");103 assert(i3->str() == " end");104 }105 {106 std::regex phone_numbers("\\d{3}-\\d{4}");107 const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";108 std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,109 phone_numbers);110 assert(i != std::cregex_token_iterator());111 assert(i->str() == "555-1234");112 i++;113 assert(i != std::cregex_token_iterator());114 assert(i->str() == "555-2345");115 i++;116 assert(i != std::cregex_token_iterator());117 assert(i->str() == "555-3456");118 i++;119 assert(i == std::cregex_token_iterator());120 }121 {122 std::regex phone_numbers("\\d{3}-(\\d{4})");123 const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";124 std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,125 phone_numbers, 1);126 assert(i != std::cregex_token_iterator());127 assert(i->str() == "1234");128 i++;129 assert(i != std::cregex_token_iterator());130 assert(i->str() == "2345");131 i++;132 assert(i != std::cregex_token_iterator());133 assert(i->str() == "3456");134 i++;135 assert(i == std::cregex_token_iterator());136 }137 138 return 0;139}140