|
5 | 5 | #include <iris/type_traits.hpp> |
6 | 6 | #include <iris/requirements.hpp> |
7 | 7 | #include <iris/compare.hpp> |
| 8 | +#include <iris/string.hpp> |
8 | 9 | #include <iris/fixed_string.hpp> |
9 | 10 | #include <iris/exception.hpp> |
10 | 11 | #include <iris/hash.hpp> |
11 | 12 |
|
12 | 13 | #include <concepts> |
| 14 | +#include <string> |
| 15 | +#include <string_view> |
13 | 16 | #include <utility> |
14 | 17 | #include <type_traits> |
15 | 18 | #include <ranges> |
@@ -448,6 +451,45 @@ TEST_CASE("synth_three_way") |
448 | 451 | STATIC_CHECK(iris::cmp::synth_three_way{}(NoThreeWay{0}, NoThreeWay{1}) == std::weak_ordering::less); |
449 | 452 | } |
450 | 453 |
|
| 454 | +TEST_CASE("StringLike") |
| 455 | +{ |
| 456 | + STATIC_CHECK(iris::StringLike<char const*>); |
| 457 | + STATIC_CHECK(iris::StringLike<wchar_t const*>); |
| 458 | + STATIC_CHECK(iris::StringLike<char8_t const*>); |
| 459 | + STATIC_CHECK(iris::StringLike<char16_t const*>); |
| 460 | + STATIC_CHECK(iris::StringLike<char32_t const*>); |
| 461 | + |
| 462 | + STATIC_CHECK(iris::StringLike<std::string>); |
| 463 | + STATIC_CHECK(iris::StringLike<std::wstring>); |
| 464 | + STATIC_CHECK(iris::StringLike<std::u8string>); |
| 465 | + STATIC_CHECK(iris::StringLike<std::u16string>); |
| 466 | + STATIC_CHECK(iris::StringLike<std::u32string>); |
| 467 | + |
| 468 | + STATIC_CHECK(iris::StringLike<std::string_view>); |
| 469 | + STATIC_CHECK(iris::StringLike<std::wstring_view>); |
| 470 | + STATIC_CHECK(iris::StringLike<std::u8string_view>); |
| 471 | + STATIC_CHECK(iris::StringLike<std::u16string_view>); |
| 472 | + STATIC_CHECK(iris::StringLike<std::u32string_view>); |
| 473 | + |
| 474 | + struct InvalidValueRange |
| 475 | + { |
| 476 | + struct Invalid { Invalid(Invalid const&) = delete; }; |
| 477 | + |
| 478 | + using value_type = Invalid; |
| 479 | + value_type const* begin() const { return nullptr; } |
| 480 | + value_type const* end() const { return nullptr; } |
| 481 | + std::size_t size() const { return 0; } |
| 482 | + }; |
| 483 | + static_assert(std::ranges::sized_range<InvalidValueRange>); |
| 484 | + static_assert(std::ranges::contiguous_range<InvalidValueRange>); |
| 485 | + |
| 486 | + // hard error as per [strings.general]/1 |
| 487 | + //std::basic_string_view sv{InvalidValueRange{}}; |
| 488 | + |
| 489 | + // should NOT yield hard error |
| 490 | + STATIC_CHECK(!iris::StringLike<InvalidValueRange>); |
| 491 | +} |
| 492 | + |
451 | 493 | TEST_CASE("fixed_string") |
452 | 494 | { |
453 | 495 | using namespace std::string_view_literals; |
|
0 commit comments