| //===----------------------------------------------------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| /// | |
| /// \file | |
| /// Helper utilities for character literals in tests. | |
| /// | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_LIBC_TEST_UNITTEST_CHARLITERALUTILS_H | |
| #define LLVM_LIBC_TEST_UNITTEST_CHARLITERALUTILS_H | |
| #include "src/__support/CPP/type_traits.h" | |
| #include "src/__support/macros/config.h" | |
| // Returns the ordinary character or multicharacter `Literal` with the encoding | |
| // prefix associated with `CharType`, if any. | |
| // | |
| // E.g. | |
| // ENCODED(char, "hello") -> "hello" | |
| // ENCODED(wchar_t, "hello") -> L"hello" | |
| #define ENCODED(CharType, Literal) \ | |
| ::LIBC_NAMESPACE::testing::choose_literal<CharType>(Literal, L##Literal) | |
| namespace LIBC_NAMESPACE_DECL { | |
| namespace testing { | |
| template <typename CharT> | |
| const CharT *choose_literal(const char *CharStr, const wchar_t *WCharStr) { | |
| if constexpr (LIBC_NAMESPACE::cpp::is_same_v<CharT, char>) | |
| return CharStr; | |
| else { | |
| static_assert(LIBC_NAMESPACE::cpp::is_same_v<CharT, wchar_t>); | |
| return WCharStr; | |
| } | |
| } | |
| template <typename CharT> | |
| CharT choose_literal(char CharValue, wchar_t WCharValue) { | |
| if constexpr (LIBC_NAMESPACE::cpp::is_same_v<CharT, char>) | |
| return CharValue; | |
| else { | |
| static_assert(LIBC_NAMESPACE::cpp::is_same_v<CharT, wchar_t>); | |
| return WCharValue; | |
| } | |
| } | |
| } // namespace testing | |
| } // namespace LIBC_NAMESPACE_DECL | |
| #endif // LLVM_LIBC_TEST_UNITTEST_CHARLITERALUTILS_H |