diff --git a/test/std/concepts/callable/invocable.compile.pass.cpp b/test/std/concepts/concepts.callable/concept.invocable/invocable.compile.pass.cpp
similarity index 98%
rename from test/std/concepts/callable/invocable.compile.pass.cpp
rename to test/std/concepts/concepts.callable/concept.invocable/invocable.compile.pass.cpp
index 7bda033..f201910 100644
--- a/test/std/concepts/callable/invocable.compile.pass.cpp
+++ b/test/std/concepts/concepts.callable/concept.invocable/invocable.compile.pass.cpp
@@ -18,7 +18,7 @@
 #include <random>
 #include <type_traits>
 
-#include "functions.h"
+#include "../functions.h"
 
 // clang-format off
 template <class F, class... Args>
diff --git a/test/std/concepts/callable/regularinvocable.compile.pass.cpp b/test/std/concepts/concepts.callable/concept.regularinvocable/regular_invocable.pass.cpp
similarity index 98%
rename from test/std/concepts/callable/regularinvocable.compile.pass.cpp
rename to test/std/concepts/concepts.callable/concept.regularinvocable/regular_invocable.pass.cpp
index 4e0da43..3912504 100644
--- a/test/std/concepts/callable/regularinvocable.compile.pass.cpp
+++ b/test/std/concepts/concepts.callable/concept.regularinvocable/regular_invocable.pass.cpp
@@ -17,7 +17,7 @@
 #include <random>
 #include <type_traits>
 
-#include "functions.h"
+#include "../functions.h"
 
 // clang-format off
 template <class F, class... Args>
diff --git a/test/std/concepts/callable/functions.h b/test/std/concepts/concepts.callable/functions.h
similarity index 100%
rename from test/std/concepts/callable/functions.h
rename to test/std/concepts/concepts.callable/functions.h
diff --git a/test/std/concepts/comparison/concepts.equalitycomparable/equality_comparable.compile.pass.cpp b/test/std/concepts/concepts.compare/concept.equalitycomparable/equality_comparable.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/comparison/concepts.equalitycomparable/equality_comparable.compile.pass.cpp
rename to test/std/concepts/concepts.compare/concept.equalitycomparable/equality_comparable.compile.pass.cpp
diff --git a/test/std/concepts/comparison/concepts.equalitycomparable/equality_comparable_with.compile.pass.cpp b/test/std/concepts/concepts.compare/concept.equalitycomparable/equality_comparable_with.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/comparison/concepts.equalitycomparable/equality_comparable_with.compile.pass.cpp
rename to test/std/concepts/concepts.compare/concept.equalitycomparable/equality_comparable_with.compile.pass.cpp
diff --git a/test/std/concepts/comparison/types.h b/test/std/concepts/concepts.compare/types.h
similarity index 100%
rename from test/std/concepts/comparison/types.h
rename to test/std/concepts/concepts.compare/types.h
diff --git a/test/std/concepts/lang/assignable.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.assignable/assignable_from.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/lang/assignable.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.assignable/assignable_from.compile.pass.cpp
diff --git a/test/std/concepts/lang/common.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.common/common_with.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/lang/common.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.common/common_with.compile.pass.cpp
diff --git a/test/std/concepts/lang/commonreference.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.commonref/common_reference.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/lang/commonreference.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.commonref/common_reference.compile.pass.cpp
diff --git a/test/std/concepts/concept.constructible/constructible_from.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.constructible/constructible_from.compile.pass.cpp
similarity index 98%
rename from test/std/concepts/concept.constructible/constructible_from.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.constructible/constructible_from.compile.pass.cpp
index 2e59b42..4db2f92 100644
--- a/test/std/concepts/concept.constructible/constructible_from.compile.pass.cpp
+++ b/test/std/concepts/concepts.lang/concept.constructible/constructible_from.compile.pass.cpp
@@ -149,3 +149,5 @@
   test<std::array<int, 1>, int>();
   test<std::array<int, 1>, int, int>();
 }
+
+int main(int, char**) { return 0; }
diff --git a/test/std/concepts/lang/convertible.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.convertible/convertible_to.pass.cpp
similarity index 100%
rename from test/std/concepts/lang/convertible.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.convertible/convertible_to.pass.cpp
diff --git a/test/std/concepts/lang/copyconstructible.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.copyconstructible/copy_constructible.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/lang/copyconstructible.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.copyconstructible/copy_constructible.compile.pass.cpp
diff --git a/test/std/concepts/concept.default.init/default_initializable.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.default.init/default_initializable.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/concept.default.init/default_initializable.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.default.init/default_initializable.compile.pass.cpp
diff --git a/test/std/concepts/concept.default.init/default_initializable.verify.cpp b/test/std/concepts/concepts.lang/concept.default.init/default_initializable.verify.cpp
similarity index 100%
rename from test/std/concepts/concept.default.init/default_initializable.verify.cpp
rename to test/std/concepts/concepts.lang/concept.default.init/default_initializable.verify.cpp
diff --git a/test/std/concepts/lang/derived.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.derived/derived_from.pass.cpp
similarity index 100%
rename from test/std/concepts/lang/derived.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.derived/derived_from.pass.cpp
diff --git a/test/std/concepts/concept.destructible/destructible.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.destructible/destructible.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/concept.destructible/destructible.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.destructible/destructible.compile.pass.cpp
diff --git a/test/std/concepts/lang/moveconstructible.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.moveconstructible/move_constructible.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/lang/moveconstructible.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.moveconstructible/move_constructible.compile.pass.cpp
diff --git a/test/std/concepts/lang/same_as.pass.cpp b/test/std/concepts/concepts.lang/concept.same/same_as.pass.cpp
similarity index 100%
rename from test/std/concepts/lang/same_as.pass.cpp
rename to test/std/concepts/concepts.lang/concept.same/same_as.pass.cpp
diff --git a/test/std/concepts/lang/swappable.pass.cpp b/test/std/concepts/concepts.lang/concept.swappable/swappable.pass.cpp
similarity index 100%
rename from test/std/concepts/lang/swappable.pass.cpp
rename to test/std/concepts/concepts.lang/concept.swappable/swappable.pass.cpp
diff --git a/test/std/concepts/lang/swappable_with.compile.pass.cpp b/test/std/concepts/concepts.lang/concept.swappable/swappable_with.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/lang/swappable_with.compile.pass.cpp
rename to test/std/concepts/concepts.lang/concept.swappable/swappable_with.compile.pass.cpp
diff --git a/test/std/concepts/concepts.lang/concepts.arithmetic/arithmetic.h b/test/std/concepts/concepts.lang/concepts.arithmetic/arithmetic.h
new file mode 100644
index 0000000..bb70165
--- /dev/null
+++ b/test/std/concepts/concepts.lang/concepts.arithmetic/arithmetic.h
@@ -0,0 +1,37 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+#ifndef LIBCXX_TEST_CONCEPTS_LANG_CONCEPTS_ARITHMETIC_H_
+#define LIBCXX_TEST_CONCEPTS_LANG_CONCEPTS_ARITHMETIC_H_
+
+#include <concepts>
+
+// This overload should never be called. It exists solely to force subsumption.
+template <std::integral I>
+[[nodiscard]] constexpr bool CheckSubsumption(I) {
+  return false;
+}
+
+// clang-format off
+template <std::integral I>
+requires std::signed_integral<I> && (!std::unsigned_integral<I>)
+[[nodiscard]] constexpr bool CheckSubsumption(I) {
+  return std::is_signed_v<I>;
+}
+
+template <std::integral I>
+requires std::unsigned_integral<I> && (!std::signed_integral<I>)
+[[nodiscard]] constexpr bool CheckSubsumption(I) {
+  return std::is_unsigned_v<I>;
+}
+// clang-format on
+
+enum ClassicEnum { a, b, c };
+enum class ScopedEnum { x, y, z };
+struct EmptyStruct {};
+
+#endif // LIBCXX_TEST_CONCEPTS_LANG_CONCEPTS_ARITHMETIC_H_
diff --git a/test/std/concepts/concepts.lang/concepts.arithmetic/floating_point.pass.cpp b/test/std/concepts/concepts.lang/concepts.arithmetic/floating_point.pass.cpp
new file mode 100644
index 0000000..b540ceb
--- /dev/null
+++ b/test/std/concepts/concepts.lang/concepts.arithmetic/floating_point.pass.cpp
@@ -0,0 +1,79 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17
+// UNSUPPORTED: libcpp-no-concepts
+
+// template<class T>
+// concept floating_point = // see below
+
+#include <concepts>
+#include <type_traits>
+
+#include "arithmetic.h"
+
+template <typename T>
+constexpr bool CheckFloatingPointQualifiers() {
+  constexpr bool result = std::floating_point<T>;
+  static_assert(std::floating_point<const T> == result);
+  static_assert(std::floating_point<volatile T> == result);
+  static_assert(std::floating_point<const volatile T> == result);
+
+  static_assert(!std::floating_point<T&>);
+  static_assert(!std::floating_point<const T&>);
+  static_assert(!std::floating_point<volatile T&>);
+  static_assert(!std::floating_point<const volatile T&>);
+
+  static_assert(!std::floating_point<T&&>);
+  static_assert(!std::floating_point<const T&&>);
+  static_assert(!std::floating_point<volatile T&&>);
+  static_assert(!std::floating_point<const volatile T&&>);
+
+  static_assert(!std::floating_point<T*>);
+  static_assert(!std::floating_point<const T*>);
+  static_assert(!std::floating_point<volatile T*>);
+  static_assert(!std::floating_point<const volatile T*>);
+
+  static_assert(!std::floating_point<T (*)()>);
+  static_assert(!std::floating_point<T (&)()>);
+  static_assert(!std::floating_point<T(&&)()>);
+
+  return result;
+}
+
+// floating-point types
+static_assert(CheckFloatingPointQualifiers<float>());
+static_assert(CheckFloatingPointQualifiers<double>());
+static_assert(CheckFloatingPointQualifiers<long double>());
+
+// types that aren't floating-point
+static_assert(!CheckFloatingPointQualifiers<signed char>());
+static_assert(!CheckFloatingPointQualifiers<unsigned char>());
+static_assert(!CheckFloatingPointQualifiers<short>());
+static_assert(!CheckFloatingPointQualifiers<unsigned short>());
+static_assert(!CheckFloatingPointQualifiers<int>());
+static_assert(!CheckFloatingPointQualifiers<unsigned int>());
+static_assert(!CheckFloatingPointQualifiers<long>());
+static_assert(!CheckFloatingPointQualifiers<unsigned long>());
+static_assert(!CheckFloatingPointQualifiers<long long>());
+static_assert(!CheckFloatingPointQualifiers<unsigned long long>());
+static_assert(!CheckFloatingPointQualifiers<wchar_t>());
+static_assert(!CheckFloatingPointQualifiers<bool>());
+static_assert(!CheckFloatingPointQualifiers<char>());
+static_assert(!CheckFloatingPointQualifiers<char8_t>());
+static_assert(!CheckFloatingPointQualifiers<char16_t>());
+static_assert(!CheckFloatingPointQualifiers<char32_t>());
+static_assert(!std::floating_point<void>);
+
+static_assert(!CheckFloatingPointQualifiers<ClassicEnum>());
+static_assert(!CheckFloatingPointQualifiers<ScopedEnum>());
+static_assert(!CheckFloatingPointQualifiers<EmptyStruct>());
+static_assert(!CheckFloatingPointQualifiers<int EmptyStruct::*>());
+static_assert(!CheckFloatingPointQualifiers<int (EmptyStruct::*)()>());
+
+int main(int, char**) { return 0; }
diff --git a/test/std/concepts/concepts.lang/concepts.arithmetic/integral.pass.cpp b/test/std/concepts/concepts.lang/concepts.arithmetic/integral.pass.cpp
new file mode 100644
index 0000000..42b85a1
--- /dev/null
+++ b/test/std/concepts/concepts.lang/concepts.arithmetic/integral.pass.cpp
@@ -0,0 +1,92 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17
+// UNSUPPORTED: libcpp-no-concepts
+
+// template<class T>
+// concept integral = // see below
+
+#include <concepts>
+#include <type_traits>
+
+#include "arithmetic.h"
+
+template <typename T>
+constexpr bool CheckIntegralQualifiers() {
+  constexpr bool result = std::integral<T>;
+  static_assert(std::integral<const T> == result);
+  static_assert(std::integral<volatile T> == result);
+  static_assert(std::integral<const volatile T> == result);
+
+  static_assert(!std::integral<T&>);
+  static_assert(!std::integral<const T&>);
+  static_assert(!std::integral<volatile T&>);
+  static_assert(!std::integral<const volatile T&>);
+
+  static_assert(!std::integral<T&&>);
+  static_assert(!std::integral<const T&&>);
+  static_assert(!std::integral<volatile T&&>);
+  static_assert(!std::integral<const volatile T&&>);
+
+  static_assert(!std::integral<T*>);
+  static_assert(!std::integral<const T*>);
+  static_assert(!std::integral<volatile T*>);
+  static_assert(!std::integral<const volatile T*>);
+
+  static_assert(!std::integral<T (*)()>);
+  static_assert(!std::integral<T (&)()>);
+  static_assert(!std::integral<T(&&)()>);
+
+  return result;
+}
+
+// standard signed and unsigned integers
+static_assert(CheckIntegralQualifiers<signed char>());
+static_assert(CheckIntegralQualifiers<unsigned char>());
+static_assert(CheckIntegralQualifiers<short>());
+static_assert(CheckIntegralQualifiers<unsigned short>());
+static_assert(CheckIntegralQualifiers<int>());
+static_assert(CheckIntegralQualifiers<unsigned int>());
+static_assert(CheckIntegralQualifiers<long>());
+static_assert(CheckIntegralQualifiers<unsigned long>());
+static_assert(CheckIntegralQualifiers<long long>());
+static_assert(CheckIntegralQualifiers<unsigned long long>());
+
+// extended integers
+#ifndef _LIBCPP_HAS_NO_INT128
+static_assert(CheckIntegralQualifiers<__int128_t>());
+static_assert(CheckIntegralQualifiers<__uint128_t>());
+#endif
+
+// bool and char types are also integral
+static_assert(CheckIntegralQualifiers<wchar_t>());
+static_assert(CheckIntegralQualifiers<bool>());
+static_assert(CheckIntegralQualifiers<char>());
+static_assert(CheckIntegralQualifiers<char8_t>());
+static_assert(CheckIntegralQualifiers<char16_t>());
+static_assert(CheckIntegralQualifiers<char32_t>());
+
+// types that aren't integral
+static_assert(!std::integral<void>);
+static_assert(!CheckIntegralQualifiers<float>());
+static_assert(!CheckIntegralQualifiers<double>());
+static_assert(!CheckIntegralQualifiers<long double>());
+
+static_assert(!CheckIntegralQualifiers<ClassicEnum>());
+
+static_assert(!CheckIntegralQualifiers<ScopedEnum>());
+
+static_assert(!CheckIntegralQualifiers<EmptyStruct>());
+static_assert(!CheckIntegralQualifiers<int EmptyStruct::*>());
+static_assert(!CheckIntegralQualifiers<int (EmptyStruct::*)()>());
+
+static_assert(CheckSubsumption(0));
+static_assert(CheckSubsumption(0U));
+
+int main(int, char**) { return 0; }
diff --git a/test/std/concepts/concepts.lang/concepts.arithmetic/signed_integral.pass.cpp b/test/std/concepts/concepts.lang/concepts.arithmetic/signed_integral.pass.cpp
new file mode 100644
index 0000000..df97b39
--- /dev/null
+++ b/test/std/concepts/concepts.lang/concepts.arithmetic/signed_integral.pass.cpp
@@ -0,0 +1,96 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17
+// UNSUPPORTED: libcpp-no-concepts
+
+// template<class T>
+// concept signed_integral = // see below
+
+#include <concepts>
+#include <type_traits>
+
+#include "arithmetic.h"
+
+template <typename T>
+constexpr bool CheckSignedIntegralQualifiers() {
+  constexpr bool result = std::signed_integral<T>;
+  static_assert(std::signed_integral<const T> == result);
+  static_assert(std::signed_integral<volatile T> == result);
+  static_assert(std::signed_integral<const volatile T> == result);
+
+  static_assert(!std::signed_integral<T&>);
+  static_assert(!std::signed_integral<const T&>);
+  static_assert(!std::signed_integral<volatile T&>);
+  static_assert(!std::signed_integral<const volatile T&>);
+
+  static_assert(!std::signed_integral<T&&>);
+  static_assert(!std::signed_integral<const T&&>);
+  static_assert(!std::signed_integral<volatile T&&>);
+  static_assert(!std::signed_integral<const volatile T&&>);
+
+  static_assert(!std::signed_integral<T*>);
+  static_assert(!std::signed_integral<const T*>);
+  static_assert(!std::signed_integral<volatile T*>);
+  static_assert(!std::signed_integral<const volatile T*>);
+
+  static_assert(!std::signed_integral<T (*)()>);
+  static_assert(!std::signed_integral<T (&)()>);
+  static_assert(!std::signed_integral<T(&&)()>);
+
+  return result;
+}
+
+// standard signed integers
+static_assert(CheckSignedIntegralQualifiers<signed char>());
+static_assert(CheckSignedIntegralQualifiers<short>());
+static_assert(CheckSignedIntegralQualifiers<int>());
+static_assert(CheckSignedIntegralQualifiers<long>());
+static_assert(CheckSignedIntegralQualifiers<long long>());
+
+// bool and character *may* be signed
+static_assert(CheckSignedIntegralQualifiers<wchar_t>() ==
+              std::is_signed_v<wchar_t>);
+static_assert(CheckSignedIntegralQualifiers<bool>() == std::is_signed_v<bool>);
+static_assert(CheckSignedIntegralQualifiers<char>() == std::is_signed_v<char>);
+static_assert(CheckSignedIntegralQualifiers<char8_t>() ==
+              std::is_signed_v<char8_t>);
+static_assert(CheckSignedIntegralQualifiers<char16_t>() ==
+              std::is_signed_v<char16_t>);
+static_assert(CheckSignedIntegralQualifiers<char32_t>() ==
+              std::is_signed_v<char32_t>);
+
+// integers that aren't signed integrals
+static_assert(!CheckSignedIntegralQualifiers<unsigned char>());
+static_assert(!CheckSignedIntegralQualifiers<unsigned short>());
+static_assert(!CheckSignedIntegralQualifiers<unsigned int>());
+static_assert(!CheckSignedIntegralQualifiers<unsigned long>());
+static_assert(!CheckSignedIntegralQualifiers<unsigned long long>());
+
+// extended integers
+#ifndef _LIBCPP_HAS_NO_INT128
+static_assert(CheckSignedIntegralQualifiers<__int128_t>());
+static_assert(!CheckSignedIntegralQualifiers<__uint128_t>());
+#endif
+
+// types that aren't even integers shouldn't be signed integers!
+static_assert(!std::signed_integral<void>);
+static_assert(!CheckSignedIntegralQualifiers<float>());
+static_assert(!CheckSignedIntegralQualifiers<double>());
+static_assert(!CheckSignedIntegralQualifiers<long double>());
+
+static_assert(!CheckSignedIntegralQualifiers<ClassicEnum>());
+static_assert(!CheckSignedIntegralQualifiers<ScopedEnum>());
+static_assert(!CheckSignedIntegralQualifiers<EmptyStruct>());
+static_assert(!CheckSignedIntegralQualifiers<int EmptyStruct::*>());
+static_assert(!CheckSignedIntegralQualifiers<int (EmptyStruct::*)()>());
+
+static_assert(CheckSubsumption(0));
+static_assert(CheckSubsumption(0U));
+
+int main(int, char**) { return 0; }
diff --git a/test/std/concepts/concepts.lang/concepts.arithmetic/unsigned_integral.pass.cpp b/test/std/concepts/concepts.lang/concepts.arithmetic/unsigned_integral.pass.cpp
new file mode 100644
index 0000000..02a6286
--- /dev/null
+++ b/test/std/concepts/concepts.lang/concepts.arithmetic/unsigned_integral.pass.cpp
@@ -0,0 +1,97 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17
+// UNSUPPORTED: libcpp-no-concepts
+
+// template<class T>
+// concept unsigned_integral = // see below
+
+#include <concepts>
+#include <type_traits>
+
+#include "arithmetic.h"
+
+template <typename T>
+constexpr bool CheckUnsignedIntegralQualifiers() {
+  constexpr bool result = std::unsigned_integral<T>;
+  static_assert(std::unsigned_integral<const T> == result);
+  static_assert(std::unsigned_integral<volatile T> == result);
+  static_assert(std::unsigned_integral<const volatile T> == result);
+
+  static_assert(!std::unsigned_integral<T&>);
+  static_assert(!std::unsigned_integral<const T&>);
+  static_assert(!std::unsigned_integral<volatile T&>);
+  static_assert(!std::unsigned_integral<const volatile T&>);
+
+  static_assert(!std::unsigned_integral<T&&>);
+  static_assert(!std::unsigned_integral<const T&&>);
+  static_assert(!std::unsigned_integral<volatile T&&>);
+  static_assert(!std::unsigned_integral<const volatile T&&>);
+
+  static_assert(!std::unsigned_integral<T*>);
+  static_assert(!std::unsigned_integral<const T*>);
+  static_assert(!std::unsigned_integral<volatile T*>);
+  static_assert(!std::unsigned_integral<const volatile T*>);
+
+  static_assert(!std::unsigned_integral<T (*)()>);
+  static_assert(!std::unsigned_integral<T (&)()>);
+  static_assert(!std::unsigned_integral<T(&&)()>);
+
+  return result;
+}
+
+// standard unsigned types
+static_assert(CheckUnsignedIntegralQualifiers<unsigned char>());
+static_assert(CheckUnsignedIntegralQualifiers<unsigned short>());
+static_assert(CheckUnsignedIntegralQualifiers<unsigned int>());
+static_assert(CheckUnsignedIntegralQualifiers<unsigned long>());
+static_assert(CheckUnsignedIntegralQualifiers<unsigned long long>());
+
+// Whether bool and character types are signed or unsigned is impl-defined
+static_assert(CheckUnsignedIntegralQualifiers<wchar_t>() ==
+              !std::is_signed_v<wchar_t>);
+static_assert(CheckUnsignedIntegralQualifiers<bool>() ==
+              !std::is_signed_v<bool>);
+static_assert(CheckUnsignedIntegralQualifiers<char>() ==
+              !std::is_signed_v<char>);
+static_assert(CheckUnsignedIntegralQualifiers<char8_t>() ==
+              !std::is_signed_v<char8_t>);
+static_assert(CheckUnsignedIntegralQualifiers<char16_t>() ==
+              !std::is_signed_v<char16_t>);
+static_assert(CheckUnsignedIntegralQualifiers<char32_t>() ==
+              !std::is_signed_v<char32_t>);
+
+// extended integers
+#ifndef _LIBCPP_HAS_NO_INT128
+static_assert(CheckUnsignedIntegralQualifiers<__uint128_t>());
+static_assert(!CheckUnsignedIntegralQualifiers<__int128_t>());
+#endif
+
+// integer types that aren't unsigned integrals
+static_assert(!CheckUnsignedIntegralQualifiers<signed char>());
+static_assert(!CheckUnsignedIntegralQualifiers<short>());
+static_assert(!CheckUnsignedIntegralQualifiers<int>());
+static_assert(!CheckUnsignedIntegralQualifiers<long>());
+static_assert(!CheckUnsignedIntegralQualifiers<long long>());
+
+static_assert(!std::unsigned_integral<void>);
+static_assert(!CheckUnsignedIntegralQualifiers<float>());
+static_assert(!CheckUnsignedIntegralQualifiers<double>());
+static_assert(!CheckUnsignedIntegralQualifiers<long double>());
+
+static_assert(!CheckUnsignedIntegralQualifiers<ClassicEnum>());
+static_assert(!CheckUnsignedIntegralQualifiers<ScopedEnum>());
+static_assert(!CheckUnsignedIntegralQualifiers<EmptyStruct>());
+static_assert(!CheckUnsignedIntegralQualifiers<int EmptyStruct::*>());
+static_assert(!CheckUnsignedIntegralQualifiers<int (EmptyStruct::*)()>());
+
+static_assert(CheckSubsumption(0));
+static_assert(CheckSubsumption(0U));
+
+int main(int, char**) { return 0; }
diff --git a/test/std/concepts/object/copyable.compile.pass.cpp b/test/std/concepts/concepts.object/copyable.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/object/copyable.compile.pass.cpp
rename to test/std/concepts/concepts.object/copyable.compile.pass.cpp
diff --git a/test/std/concepts/object/movable.compile.pass.cpp b/test/std/concepts/concepts.object/movable.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/object/movable.compile.pass.cpp
rename to test/std/concepts/concepts.object/movable.compile.pass.cpp
diff --git a/test/std/concepts/object/regular.compile.pass.cpp b/test/std/concepts/concepts.object/regular.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/object/regular.compile.pass.cpp
rename to test/std/concepts/concepts.object/regular.compile.pass.cpp
diff --git a/test/std/concepts/object/semiregular.compile.pass.cpp b/test/std/concepts/concepts.object/semiregular.compile.pass.cpp
similarity index 100%
rename from test/std/concepts/object/semiregular.compile.pass.cpp
rename to test/std/concepts/concepts.object/semiregular.compile.pass.cpp
diff --git a/test/std/concepts/lang/arithmetic.pass.cpp b/test/std/concepts/lang/arithmetic.pass.cpp
deleted file mode 100644
index 9b7b75b..0000000
--- a/test/std/concepts/lang/arithmetic.pass.cpp
+++ /dev/null
@@ -1,346 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++03, c++11, c++14, c++17
-// UNSUPPORTED: libcpp-no-concepts
-
-// template<class T>
-// concept integral = // see below
-
-// template<class T>
-// concept signed_integral = // see below
-
-// template<class T>
-// concept unsigned_integral = // see below
-
-// template<class T>
-// concept floating_point = // see below
-
-#include <concepts>
-#include <type_traits>
-
-namespace {
-template <typename T>
-constexpr bool CheckIntegralQualifiers() {
-  constexpr bool result = std::integral<T>;
-  static_assert(std::integral<const T> == result);
-  static_assert(std::integral<volatile T> == result);
-  static_assert(std::integral<const volatile T> == result);
-
-  static_assert(!std::integral<T&>);
-  static_assert(!std::integral<const T&>);
-  static_assert(!std::integral<volatile T&>);
-  static_assert(!std::integral<const volatile T&>);
-
-  static_assert(!std::integral<T&&>);
-  static_assert(!std::integral<const T&&>);
-  static_assert(!std::integral<volatile T&&>);
-  static_assert(!std::integral<const volatile T&&>);
-
-  static_assert(!std::integral<T*>);
-  static_assert(!std::integral<const T*>);
-  static_assert(!std::integral<volatile T*>);
-  static_assert(!std::integral<const volatile T*>);
-
-  static_assert(!std::integral<T (*)()>);
-  static_assert(!std::integral<T (&)()>);
-  static_assert(!std::integral<T(&&)()>);
-
-  return result;
-}
-
-enum ClassicEnum { a, b, c };
-enum class ScopedEnum { x, y, z };
-struct EmptyStruct {};
-
-constexpr void CheckIntegral() {
-  // standard signed and unsigned integers
-  static_assert(CheckIntegralQualifiers<signed char>());
-  static_assert(CheckIntegralQualifiers<unsigned char>());
-  static_assert(CheckIntegralQualifiers<short>());
-  static_assert(CheckIntegralQualifiers<unsigned short>());
-  static_assert(CheckIntegralQualifiers<int>());
-  static_assert(CheckIntegralQualifiers<unsigned int>());
-  static_assert(CheckIntegralQualifiers<long>());
-  static_assert(CheckIntegralQualifiers<unsigned long>());
-  static_assert(CheckIntegralQualifiers<long long>());
-  static_assert(CheckIntegralQualifiers<unsigned long long>());
-
-  // extended integers
-#ifndef _LIBCPP_HAS_NO_INT128
-  static_assert(CheckIntegralQualifiers<__int128_t>());
-  static_assert(CheckIntegralQualifiers<__uint128_t>());
-#endif
-
-  // bool and char types are also integral
-  static_assert(CheckIntegralQualifiers<wchar_t>());
-  static_assert(CheckIntegralQualifiers<bool>());
-  static_assert(CheckIntegralQualifiers<char>());
-  static_assert(CheckIntegralQualifiers<char8_t>());
-  static_assert(CheckIntegralQualifiers<char16_t>());
-  static_assert(CheckIntegralQualifiers<char32_t>());
-
-  // types that aren't integral
-  static_assert(!std::integral<void>);
-  static_assert(!CheckIntegralQualifiers<float>());
-  static_assert(!CheckIntegralQualifiers<double>());
-  static_assert(!CheckIntegralQualifiers<long double>());
-
-  static_assert(!CheckIntegralQualifiers<ClassicEnum>());
-
-  static_assert(!CheckIntegralQualifiers<ScopedEnum>());
-
-  static_assert(!CheckIntegralQualifiers<EmptyStruct>());
-  static_assert(!CheckIntegralQualifiers<int EmptyStruct::*>());
-  static_assert(!CheckIntegralQualifiers<int (EmptyStruct::*)()>());
-}
-
-template <typename T>
-constexpr bool CheckSignedIntegralQualifiers() {
-  constexpr bool result = std::signed_integral<T>;
-  static_assert(std::signed_integral<const T> == result);
-  static_assert(std::signed_integral<volatile T> == result);
-  static_assert(std::signed_integral<const volatile T> == result);
-
-  static_assert(!std::signed_integral<T&>);
-  static_assert(!std::signed_integral<const T&>);
-  static_assert(!std::signed_integral<volatile T&>);
-  static_assert(!std::signed_integral<const volatile T&>);
-
-  static_assert(!std::signed_integral<T&&>);
-  static_assert(!std::signed_integral<const T&&>);
-  static_assert(!std::signed_integral<volatile T&&>);
-  static_assert(!std::signed_integral<const volatile T&&>);
-
-  static_assert(!std::signed_integral<T*>);
-  static_assert(!std::signed_integral<const T*>);
-  static_assert(!std::signed_integral<volatile T*>);
-  static_assert(!std::signed_integral<const volatile T*>);
-
-  static_assert(!std::signed_integral<T (*)()>);
-  static_assert(!std::signed_integral<T (&)()>);
-  static_assert(!std::signed_integral<T(&&)()>);
-
-  return result;
-}
-
-constexpr void CheckSignedIntegral() {
-  // standard signed integers
-  static_assert(CheckSignedIntegralQualifiers<signed char>());
-  static_assert(CheckSignedIntegralQualifiers<short>());
-  static_assert(CheckSignedIntegralQualifiers<int>());
-  static_assert(CheckSignedIntegralQualifiers<long>());
-  static_assert(CheckSignedIntegralQualifiers<long long>());
-
-  // bool and character *may* be signed
-  static_assert(CheckSignedIntegralQualifiers<wchar_t>() ==
-                std::is_signed_v<wchar_t>);
-  static_assert(CheckSignedIntegralQualifiers<bool>() ==
-                std::is_signed_v<bool>);
-  static_assert(CheckSignedIntegralQualifiers<char>() ==
-                std::is_signed_v<char>);
-  static_assert(CheckSignedIntegralQualifiers<char8_t>() ==
-                std::is_signed_v<char8_t>);
-  static_assert(CheckSignedIntegralQualifiers<char16_t>() ==
-                std::is_signed_v<char16_t>);
-  static_assert(CheckSignedIntegralQualifiers<char32_t>() ==
-                std::is_signed_v<char32_t>);
-
-  // integers that aren't signed integrals
-  static_assert(!CheckSignedIntegralQualifiers<unsigned char>());
-  static_assert(!CheckSignedIntegralQualifiers<unsigned short>());
-  static_assert(!CheckSignedIntegralQualifiers<unsigned int>());
-  static_assert(!CheckSignedIntegralQualifiers<unsigned long>());
-  static_assert(!CheckSignedIntegralQualifiers<unsigned long long>());
-
-  // extended integers
-#ifndef _LIBCPP_HAS_NO_INT128
-  static_assert(CheckSignedIntegralQualifiers<__int128_t>());
-  static_assert(!CheckSignedIntegralQualifiers<__uint128_t>());
-#endif
-
-  // types that aren't even integers shouldn't be signed integers!
-  static_assert(!std::signed_integral<void>);
-  static_assert(!CheckSignedIntegralQualifiers<float>());
-  static_assert(!CheckSignedIntegralQualifiers<double>());
-  static_assert(!CheckSignedIntegralQualifiers<long double>());
-
-  static_assert(!CheckSignedIntegralQualifiers<ClassicEnum>());
-  static_assert(!CheckSignedIntegralQualifiers<ScopedEnum>());
-  static_assert(!CheckSignedIntegralQualifiers<EmptyStruct>());
-  static_assert(!CheckSignedIntegralQualifiers<int EmptyStruct::*>());
-  static_assert(!CheckSignedIntegralQualifiers<int (EmptyStruct::*)()>());
-}
-
-template <typename T>
-constexpr bool CheckUnsignedIntegralQualifiers() {
-  constexpr bool result = std::unsigned_integral<T>;
-  static_assert(std::unsigned_integral<const T> == result);
-  static_assert(std::unsigned_integral<volatile T> == result);
-  static_assert(std::unsigned_integral<const volatile T> == result);
-
-  static_assert(!std::unsigned_integral<T&>);
-  static_assert(!std::unsigned_integral<const T&>);
-  static_assert(!std::unsigned_integral<volatile T&>);
-  static_assert(!std::unsigned_integral<const volatile T&>);
-
-  static_assert(!std::unsigned_integral<T&&>);
-  static_assert(!std::unsigned_integral<const T&&>);
-  static_assert(!std::unsigned_integral<volatile T&&>);
-  static_assert(!std::unsigned_integral<const volatile T&&>);
-
-  static_assert(!std::unsigned_integral<T*>);
-  static_assert(!std::unsigned_integral<const T*>);
-  static_assert(!std::unsigned_integral<volatile T*>);
-  static_assert(!std::unsigned_integral<const volatile T*>);
-
-  static_assert(!std::unsigned_integral<T (*)()>);
-  static_assert(!std::unsigned_integral<T (&)()>);
-  static_assert(!std::unsigned_integral<T(&&)()>);
-
-  return result;
-}
-
-constexpr void CheckUnsignedIntegral() {
-  // standard unsigned types
-  static_assert(CheckUnsignedIntegralQualifiers<unsigned char>());
-  static_assert(CheckUnsignedIntegralQualifiers<unsigned short>());
-  static_assert(CheckUnsignedIntegralQualifiers<unsigned int>());
-  static_assert(CheckUnsignedIntegralQualifiers<unsigned long>());
-  static_assert(CheckUnsignedIntegralQualifiers<unsigned long long>());
-
-  // Whether bool and character types are signed or unsigned is impl-defined
-  static_assert(CheckUnsignedIntegralQualifiers<wchar_t>() ==
-                !std::is_signed_v<wchar_t>);
-  static_assert(CheckUnsignedIntegralQualifiers<bool>() ==
-                !std::is_signed_v<bool>);
-  static_assert(CheckUnsignedIntegralQualifiers<char>() ==
-                !std::is_signed_v<char>);
-  static_assert(CheckUnsignedIntegralQualifiers<char8_t>() ==
-                !std::is_signed_v<char8_t>);
-  static_assert(CheckUnsignedIntegralQualifiers<char16_t>() ==
-                !std::is_signed_v<char16_t>);
-  static_assert(CheckUnsignedIntegralQualifiers<char32_t>() ==
-                !std::is_signed_v<char32_t>);
-
-  // extended integers
-#ifndef _LIBCPP_HAS_NO_INT128
-  static_assert(CheckUnsignedIntegralQualifiers<__uint128_t>());
-  static_assert(!CheckUnsignedIntegralQualifiers<__int128_t>());
-#endif
-
-  // integer types that aren't unsigned integrals
-  static_assert(!CheckUnsignedIntegralQualifiers<signed char>());
-  static_assert(!CheckUnsignedIntegralQualifiers<short>());
-  static_assert(!CheckUnsignedIntegralQualifiers<int>());
-  static_assert(!CheckUnsignedIntegralQualifiers<long>());
-  static_assert(!CheckUnsignedIntegralQualifiers<long long>());
-
-  static_assert(!std::unsigned_integral<void>);
-  static_assert(!CheckUnsignedIntegralQualifiers<float>());
-  static_assert(!CheckUnsignedIntegralQualifiers<double>());
-  static_assert(!CheckUnsignedIntegralQualifiers<long double>());
-
-  static_assert(!CheckUnsignedIntegralQualifiers<ClassicEnum>());
-  static_assert(!CheckUnsignedIntegralQualifiers<ScopedEnum>());
-  static_assert(!CheckUnsignedIntegralQualifiers<EmptyStruct>());
-  static_assert(!CheckUnsignedIntegralQualifiers<int EmptyStruct::*>());
-  static_assert(!CheckUnsignedIntegralQualifiers<int (EmptyStruct::*)()>());
-}
-
-// This overload should never be called. It exists solely to force subsumption.
-template <std::integral I>
-[[nodiscard]] constexpr bool CheckSubsumption(I) {
-  return false;
-}
-
-// clang-format off
-template <std::integral I>
-requires std::signed_integral<I> && (!std::unsigned_integral<I>)
-[[nodiscard]] constexpr bool CheckSubsumption(I) {
-  return std::is_signed_v<I>;
-}
-
-template <std::integral I>
-requires std::unsigned_integral<I> && (!std::signed_integral<I>)
-[[nodiscard]] constexpr bool CheckSubsumption(I) {
-  return std::is_unsigned_v<I>;
-}
-// clang-format on
-
-template <typename T>
-constexpr bool CheckFloatingPointQualifiers() {
-  constexpr bool result = std::floating_point<T>;
-  static_assert(std::floating_point<const T> == result);
-  static_assert(std::floating_point<volatile T> == result);
-  static_assert(std::floating_point<const volatile T> == result);
-
-  static_assert(!std::floating_point<T&>);
-  static_assert(!std::floating_point<const T&>);
-  static_assert(!std::floating_point<volatile T&>);
-  static_assert(!std::floating_point<const volatile T&>);
-
-  static_assert(!std::floating_point<T&&>);
-  static_assert(!std::floating_point<const T&&>);
-  static_assert(!std::floating_point<volatile T&&>);
-  static_assert(!std::floating_point<const volatile T&&>);
-
-  static_assert(!std::floating_point<T*>);
-  static_assert(!std::floating_point<const T*>);
-  static_assert(!std::floating_point<volatile T*>);
-  static_assert(!std::floating_point<const volatile T*>);
-
-  static_assert(!std::floating_point<T (*)()>);
-  static_assert(!std::floating_point<T (&)()>);
-  static_assert(!std::floating_point<T(&&)()>);
-
-  return result;
-}
-
-constexpr void CheckFloatingPoint() {
-  // floating-point types
-  static_assert(CheckFloatingPointQualifiers<float>());
-  static_assert(CheckFloatingPointQualifiers<double>());
-  static_assert(CheckFloatingPointQualifiers<long double>());
-
-  // types that aren't floating-point
-  static_assert(!CheckFloatingPointQualifiers<signed char>());
-  static_assert(!CheckFloatingPointQualifiers<unsigned char>());
-  static_assert(!CheckFloatingPointQualifiers<short>());
-  static_assert(!CheckFloatingPointQualifiers<unsigned short>());
-  static_assert(!CheckFloatingPointQualifiers<int>());
-  static_assert(!CheckFloatingPointQualifiers<unsigned int>());
-  static_assert(!CheckFloatingPointQualifiers<long>());
-  static_assert(!CheckFloatingPointQualifiers<unsigned long>());
-  static_assert(!CheckFloatingPointQualifiers<long long>());
-  static_assert(!CheckFloatingPointQualifiers<unsigned long long>());
-  static_assert(!CheckFloatingPointQualifiers<wchar_t>());
-  static_assert(!CheckFloatingPointQualifiers<bool>());
-  static_assert(!CheckFloatingPointQualifiers<char>());
-  static_assert(!CheckFloatingPointQualifiers<char8_t>());
-  static_assert(!CheckFloatingPointQualifiers<char16_t>());
-  static_assert(!CheckFloatingPointQualifiers<char32_t>());
-  static_assert(!std::floating_point<void>);
-
-  static_assert(!CheckFloatingPointQualifiers<ClassicEnum>());
-  static_assert(!CheckFloatingPointQualifiers<ScopedEnum>());
-  static_assert(!CheckFloatingPointQualifiers<EmptyStruct>());
-  static_assert(!CheckFloatingPointQualifiers<int EmptyStruct::*>());
-  static_assert(!CheckFloatingPointQualifiers<int (EmptyStruct::*)()>());
-}
-} // namespace
-
-int main(int, char**) {
-  CheckIntegral();
-  CheckSignedIntegral();
-  CheckUnsignedIntegral();
-  static_assert(CheckSubsumption(0));
-  static_assert(CheckSubsumption(0U));
-  CheckFloatingPoint();
-  return 0;
-}
