summaryrefslogtreecommitdiff
path: root/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2015-09-06 18:46:46 +0000
committerDimitry Andric <dim@FreeBSD.org>2015-09-06 18:46:46 +0000
commit61b9a7258a7693d7f3674a5a1daf7b036ff1d382 (patch)
treeec41ed70ffca97240e76f9a78bb2dedba28f310c /test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t
parentf857581820d15e410e9945d2fcd5f7163be25a96 (diff)
Notes
Diffstat (limited to 'test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t')
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2.pass.cpp28
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3.pass.cpp30
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare.pass.cpp45
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy.pass.cpp31
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof.pass.cpp24
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq.pass.cpp28
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type.pass.cpp30
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find.pass.cpp30
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length.pass.cpp30
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt.pass.cpp28
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move.pass.cpp35
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof.pass.cpp30
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type.pass.cpp28
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type.pass.cpp28
-rw-r--r--test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/types.pass.cpp33
15 files changed, 458 insertions, 0 deletions
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2.pass.cpp
new file mode 100644
index 0000000000000..35dcd9602d3cf
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2.pass.cpp
@@ -0,0 +1,28 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static void assign(char_type& c1, const char_type& c2);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+#if __cplusplus >= 201103L
+ char32_t c = U'\0';
+ std::char_traits<char32_t>::assign(c, U'a');
+ assert(c == U'a');
+#endif
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3.pass.cpp
new file mode 100644
index 0000000000000..0c31ea7ae97e2
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3.pass.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static char_type* assign(char_type* s, size_t n, char_type a);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ char32_t s1[] = {1, 2, 3};
+ char32_t s2[3] = {0};
+ assert(std::char_traits<char32_t>::assign(s2, 3, char32_t(5)) == s2);
+ assert(s2[0] == char32_t(5));
+ assert(s2[1] == char32_t(5));
+ assert(s2[2] == char32_t(5));
+ assert(std::char_traits<char32_t>::assign(NULL, 0, char32_t(5)) == NULL);
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare.pass.cpp
new file mode 100644
index 0000000000000..25f2099896a64
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare.pass.cpp
@@ -0,0 +1,45 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static int compare(const char_type* s1, const char_type* s2, size_t n);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+#if __cplusplus >= 201103L
+ assert(std::char_traits<char32_t>::compare(U"", U"", 0) == 0);
+ assert(std::char_traits<char32_t>::compare(NULL, NULL, 0) == 0);
+
+ assert(std::char_traits<char32_t>::compare(U"1", U"1", 1) == 0);
+ assert(std::char_traits<char32_t>::compare(U"1", U"2", 1) < 0);
+ assert(std::char_traits<char32_t>::compare(U"2", U"1", 1) > 0);
+
+ assert(std::char_traits<char32_t>::compare(U"12", U"12", 2) == 0);
+ assert(std::char_traits<char32_t>::compare(U"12", U"13", 2) < 0);
+ assert(std::char_traits<char32_t>::compare(U"12", U"22", 2) < 0);
+ assert(std::char_traits<char32_t>::compare(U"13", U"12", 2) > 0);
+ assert(std::char_traits<char32_t>::compare(U"22", U"12", 2) > 0);
+
+ assert(std::char_traits<char32_t>::compare(U"123", U"123", 3) == 0);
+ assert(std::char_traits<char32_t>::compare(U"123", U"223", 3) < 0);
+ assert(std::char_traits<char32_t>::compare(U"123", U"133", 3) < 0);
+ assert(std::char_traits<char32_t>::compare(U"123", U"124", 3) < 0);
+ assert(std::char_traits<char32_t>::compare(U"223", U"123", 3) > 0);
+ assert(std::char_traits<char32_t>::compare(U"133", U"123", 3) > 0);
+ assert(std::char_traits<char32_t>::compare(U"124", U"123", 3) > 0);
+#endif
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy.pass.cpp
new file mode 100644
index 0000000000000..89c22250b3063
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy.pass.cpp
@@ -0,0 +1,31 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static char_type* copy(char_type* s1, const char_type* s2, size_t n);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ char32_t s1[] = {1, 2, 3};
+ char32_t s2[3] = {0};
+ assert(std::char_traits<char32_t>::copy(s2, s1, 3) == s2);
+ assert(s2[0] == char32_t(1));
+ assert(s2[1] == char32_t(2));
+ assert(s2[2] == char32_t(3));
+ assert(std::char_traits<char32_t>::copy(NULL, s1, 0) == NULL);
+ assert(std::char_traits<char32_t>::copy(s1, NULL, 0) == s1);
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof.pass.cpp
new file mode 100644
index 0000000000000..8f804aa22e7a2
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof.pass.cpp
@@ -0,0 +1,24 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static constexpr int_type eof();
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ std::char_traits<char32_t>::int_type i = std::char_traits<char32_t>::eof();
+#endif
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq.pass.cpp
new file mode 100644
index 0000000000000..ffeff0cf45a40
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq.pass.cpp
@@ -0,0 +1,28 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static constexpr bool eq(char_type c1, char_type c2);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+#if __cplusplus >= 201103L
+ char32_t c = U'\0';
+ assert(std::char_traits<char32_t>::eq(U'a', U'a'));
+ assert(!std::char_traits<char32_t>::eq(U'a', U'A'));
+#endif
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type.pass.cpp
new file mode 100644
index 0000000000000..eb5c696610146
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type.pass.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static constexpr bool eq_int_type(int_type c1, int_type c2);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+#if __cplusplus >= 201103L
+ assert( std::char_traits<char32_t>::eq_int_type(U'a', U'a'));
+ assert(!std::char_traits<char32_t>::eq_int_type(U'a', U'A'));
+ assert(!std::char_traits<char32_t>::eq_int_type(std::char_traits<char32_t>::eof(), U'A'));
+#endif
+ assert( std::char_traits<char32_t>::eq_int_type(std::char_traits<char32_t>::eof(),
+ std::char_traits<char32_t>::eof()));
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find.pass.cpp
new file mode 100644
index 0000000000000..d0b17999d3e16
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find.pass.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static const char_type* find(const char_type* s, size_t n, const char_type& a);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ char32_t s1[] = {1, 2, 3};
+ assert(std::char_traits<char32_t>::find(s1, 3, char32_t(1)) == s1);
+ assert(std::char_traits<char32_t>::find(s1, 3, char32_t(2)) == s1+1);
+ assert(std::char_traits<char32_t>::find(s1, 3, char32_t(3)) == s1+2);
+ assert(std::char_traits<char32_t>::find(s1, 3, char32_t(4)) == 0);
+ assert(std::char_traits<char32_t>::find(s1, 3, char32_t(0)) == 0);
+ assert(std::char_traits<char32_t>::find(NULL, 0, char32_t(0)) == 0);
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length.pass.cpp
new file mode 100644
index 0000000000000..d80ce051d1fa7
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length.pass.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static size_t length(const char_type* s);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+#if __cplusplus >= 201103L
+ assert(std::char_traits<char32_t>::length(U"") == 0);
+ assert(std::char_traits<char32_t>::length(U"a") == 1);
+ assert(std::char_traits<char32_t>::length(U"aa") == 2);
+ assert(std::char_traits<char32_t>::length(U"aaa") == 3);
+ assert(std::char_traits<char32_t>::length(U"aaaa") == 4);
+#endif
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt.pass.cpp
new file mode 100644
index 0000000000000..f667507f04571
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt.pass.cpp
@@ -0,0 +1,28 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static constexpr bool lt(char_type c1, char_type c2);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+#if __cplusplus >= 201103L
+ char32_t c = U'\0';
+ assert(!std::char_traits<char32_t>::lt(U'a', U'a'));
+ assert( std::char_traits<char32_t>::lt(U'A', U'a'));
+#endif
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move.pass.cpp
new file mode 100644
index 0000000000000..8641525d92bdb
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move.pass.cpp
@@ -0,0 +1,35 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static char_type* move(char_type* s1, const char_type* s2, size_t n);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ char32_t s1[] = {1, 2, 3};
+ assert(std::char_traits<char32_t>::move(s1, s1+1, 2) == s1);
+ assert(s1[0] == char32_t(2));
+ assert(s1[1] == char32_t(3));
+ assert(s1[2] == char32_t(3));
+ s1[2] = char32_t(0);
+ assert(std::char_traits<char32_t>::move(s1+1, s1, 2) == s1+1);
+ assert(s1[0] == char32_t(2));
+ assert(s1[1] == char32_t(2));
+ assert(s1[2] == char32_t(3));
+ assert(std::char_traits<char32_t>::move(NULL, s1, 0) == NULL);
+ assert(std::char_traits<char32_t>::move(s1, NULL, 0) == s1);
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof.pass.cpp
new file mode 100644
index 0000000000000..d794417bfd7aa
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof.pass.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static constexpr int_type not_eof(int_type c);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+#if __cplusplus >= 201103L
+ assert(std::char_traits<char32_t>::not_eof(U'a') == U'a');
+ assert(std::char_traits<char32_t>::not_eof(U'A') == U'A');
+#endif
+ assert(std::char_traits<char32_t>::not_eof(0) == 0);
+ assert(std::char_traits<char32_t>::not_eof(std::char_traits<char32_t>::eof()) !=
+ std::char_traits<char32_t>::eof());
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type.pass.cpp
new file mode 100644
index 0000000000000..1f67242b2aec5
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type.pass.cpp
@@ -0,0 +1,28 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static constexpr char_type to_char_type(int_type c);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+#if __cplusplus >= 201103L
+ assert(std::char_traits<char32_t>::to_char_type(U'a') == U'a');
+ assert(std::char_traits<char32_t>::to_char_type(U'A') == U'A');
+#endif
+ assert(std::char_traits<char32_t>::to_char_type(0) == 0);
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type.pass.cpp
new file mode 100644
index 0000000000000..a378186bdd6fb
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type.pass.cpp
@@ -0,0 +1,28 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// static constexpr int_type to_int_type(char_type c);
+
+#include <string>
+#include <cassert>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+#if __cplusplus >= 201103L
+ assert(std::char_traits<char32_t>::to_int_type(U'a') == U'a');
+ assert(std::char_traits<char32_t>::to_int_type(U'A') == U'A');
+#endif
+ assert(std::char_traits<char32_t>::to_int_type(0) == 0);
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}
diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/types.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/types.pass.cpp
new file mode 100644
index 0000000000000..3b48af14f963b
--- /dev/null
+++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/types.pass.cpp
@@ -0,0 +1,33 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<> struct char_traits<char32_t>
+
+// typedef char32_t char_type;
+// typedef uint_least32_t int_type;
+// typedef streamoff off_type;
+// typedef u32streampos pos_type;
+// typedef mbstate_t state_type;
+
+#include <string>
+#include <type_traits>
+#include <cstdint>
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ static_assert((std::is_same<std::char_traits<char32_t>::char_type, char32_t>::value), "");
+ static_assert((std::is_same<std::char_traits<char32_t>::int_type, std::uint_least32_t>::value), "");
+ static_assert((std::is_same<std::char_traits<char32_t>::off_type, std::streamoff>::value), "");
+ static_assert((std::is_same<std::char_traits<char32_t>::pos_type, std::u32streampos>::value), "");
+ static_assert((std::is_same<std::char_traits<char32_t>::state_type, std::mbstate_t>::value), "");
+#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
+}