brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 8d44f3a Raw
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