12c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
22c6217f2SLouis Dionne //
32c6217f2SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42c6217f2SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
52c6217f2SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62c6217f2SLouis Dionne //
72c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
82c6217f2SLouis Dionne //
92c6217f2SLouis Dionne // WARNING: This test was generated by generate_feature_test_macro_components.py
102c6217f2SLouis Dionne // and should not be edited manually.
112c6217f2SLouis Dionne //
122c6217f2SLouis Dionne // clang-format off
132c6217f2SLouis Dionne 
142c6217f2SLouis Dionne // <numeric>
152c6217f2SLouis Dionne 
162c6217f2SLouis Dionne // Test the feature test macros defined by <numeric>
172c6217f2SLouis Dionne 
182c6217f2SLouis Dionne /*  Constant                           Value
192c6217f2SLouis Dionne     __cpp_lib_constexpr_numeric        201911L [C++20]
202c6217f2SLouis Dionne     __cpp_lib_gcd_lcm                  201606L [C++17]
212c6217f2SLouis Dionne     __cpp_lib_interpolate              201902L [C++20]
222c6217f2SLouis Dionne     __cpp_lib_parallel_algorithm       201603L [C++17]
2371400505SMark de Wever     __cpp_lib_ranges_iota              202202L [C++23]
24*9c18f031SMark de Wever     __cpp_lib_saturation_arithmetic    202311L [C++26]
252c6217f2SLouis Dionne */
262c6217f2SLouis Dionne 
272c6217f2SLouis Dionne #include <numeric>
282c6217f2SLouis Dionne #include "test_macros.h"
292c6217f2SLouis Dionne 
302c6217f2SLouis Dionne #if TEST_STD_VER < 14
312c6217f2SLouis Dionne 
322c6217f2SLouis Dionne # ifdef __cpp_lib_constexpr_numeric
332c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_numeric should not be defined before c++20"
342c6217f2SLouis Dionne # endif
352c6217f2SLouis Dionne 
362c6217f2SLouis Dionne # ifdef __cpp_lib_gcd_lcm
372c6217f2SLouis Dionne #   error "__cpp_lib_gcd_lcm should not be defined before c++17"
382c6217f2SLouis Dionne # endif
392c6217f2SLouis Dionne 
402c6217f2SLouis Dionne # ifdef __cpp_lib_interpolate
412c6217f2SLouis Dionne #   error "__cpp_lib_interpolate should not be defined before c++20"
422c6217f2SLouis Dionne # endif
432c6217f2SLouis Dionne 
442c6217f2SLouis Dionne # ifdef __cpp_lib_parallel_algorithm
452c6217f2SLouis Dionne #   error "__cpp_lib_parallel_algorithm should not be defined before c++17"
462c6217f2SLouis Dionne # endif
472c6217f2SLouis Dionne 
482c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_iota
4971400505SMark de Wever #   error "__cpp_lib_ranges_iota should not be defined before c++23"
502c6217f2SLouis Dionne # endif
512c6217f2SLouis Dionne 
52*9c18f031SMark de Wever # ifdef __cpp_lib_saturation_arithmetic
53*9c18f031SMark de Wever #   error "__cpp_lib_saturation_arithmetic should not be defined before c++26"
54*9c18f031SMark de Wever # endif
55*9c18f031SMark de Wever 
562c6217f2SLouis Dionne #elif TEST_STD_VER == 14
572c6217f2SLouis Dionne 
582c6217f2SLouis Dionne # ifdef __cpp_lib_constexpr_numeric
592c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_numeric should not be defined before c++20"
602c6217f2SLouis Dionne # endif
612c6217f2SLouis Dionne 
622c6217f2SLouis Dionne # ifdef __cpp_lib_gcd_lcm
632c6217f2SLouis Dionne #   error "__cpp_lib_gcd_lcm should not be defined before c++17"
642c6217f2SLouis Dionne # endif
652c6217f2SLouis Dionne 
662c6217f2SLouis Dionne # ifdef __cpp_lib_interpolate
672c6217f2SLouis Dionne #   error "__cpp_lib_interpolate should not be defined before c++20"
682c6217f2SLouis Dionne # endif
692c6217f2SLouis Dionne 
702c6217f2SLouis Dionne # ifdef __cpp_lib_parallel_algorithm
712c6217f2SLouis Dionne #   error "__cpp_lib_parallel_algorithm should not be defined before c++17"
722c6217f2SLouis Dionne # endif
732c6217f2SLouis Dionne 
742c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_iota
7571400505SMark de Wever #   error "__cpp_lib_ranges_iota should not be defined before c++23"
762c6217f2SLouis Dionne # endif
772c6217f2SLouis Dionne 
78*9c18f031SMark de Wever # ifdef __cpp_lib_saturation_arithmetic
79*9c18f031SMark de Wever #   error "__cpp_lib_saturation_arithmetic should not be defined before c++26"
80*9c18f031SMark de Wever # endif
81*9c18f031SMark de Wever 
822c6217f2SLouis Dionne #elif TEST_STD_VER == 17
832c6217f2SLouis Dionne 
842c6217f2SLouis Dionne # ifdef __cpp_lib_constexpr_numeric
852c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_numeric should not be defined before c++20"
862c6217f2SLouis Dionne # endif
872c6217f2SLouis Dionne 
882c6217f2SLouis Dionne # ifndef __cpp_lib_gcd_lcm
892c6217f2SLouis Dionne #   error "__cpp_lib_gcd_lcm should be defined in c++17"
902c6217f2SLouis Dionne # endif
912c6217f2SLouis Dionne # if __cpp_lib_gcd_lcm != 201606L
922c6217f2SLouis Dionne #   error "__cpp_lib_gcd_lcm should have the value 201606L in c++17"
932c6217f2SLouis Dionne # endif
942c6217f2SLouis Dionne 
952c6217f2SLouis Dionne # ifdef __cpp_lib_interpolate
962c6217f2SLouis Dionne #   error "__cpp_lib_interpolate should not be defined before c++20"
972c6217f2SLouis Dionne # endif
982c6217f2SLouis Dionne 
992c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
1002c6217f2SLouis Dionne #   ifndef __cpp_lib_parallel_algorithm
1012c6217f2SLouis Dionne #     error "__cpp_lib_parallel_algorithm should be defined in c++17"
1022c6217f2SLouis Dionne #   endif
1032c6217f2SLouis Dionne #   if __cpp_lib_parallel_algorithm != 201603L
1042c6217f2SLouis Dionne #     error "__cpp_lib_parallel_algorithm should have the value 201603L in c++17"
1052c6217f2SLouis Dionne #   endif
1062c6217f2SLouis Dionne # else // _LIBCPP_VERSION
1072c6217f2SLouis Dionne #   ifdef __cpp_lib_parallel_algorithm
1082c6217f2SLouis Dionne #     error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
1092c6217f2SLouis Dionne #   endif
1102c6217f2SLouis Dionne # endif
1112c6217f2SLouis Dionne 
1122c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_iota
11371400505SMark de Wever #   error "__cpp_lib_ranges_iota should not be defined before c++23"
1142c6217f2SLouis Dionne # endif
1152c6217f2SLouis Dionne 
116*9c18f031SMark de Wever # ifdef __cpp_lib_saturation_arithmetic
117*9c18f031SMark de Wever #   error "__cpp_lib_saturation_arithmetic should not be defined before c++26"
118*9c18f031SMark de Wever # endif
119*9c18f031SMark de Wever 
1202c6217f2SLouis Dionne #elif TEST_STD_VER == 20
1212c6217f2SLouis Dionne 
1222c6217f2SLouis Dionne # ifndef __cpp_lib_constexpr_numeric
1232c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_numeric should be defined in c++20"
1242c6217f2SLouis Dionne # endif
1252c6217f2SLouis Dionne # if __cpp_lib_constexpr_numeric != 201911L
1262c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_numeric should have the value 201911L in c++20"
1272c6217f2SLouis Dionne # endif
1282c6217f2SLouis Dionne 
1292c6217f2SLouis Dionne # ifndef __cpp_lib_gcd_lcm
1302c6217f2SLouis Dionne #   error "__cpp_lib_gcd_lcm should be defined in c++20"
1312c6217f2SLouis Dionne # endif
1322c6217f2SLouis Dionne # if __cpp_lib_gcd_lcm != 201606L
1332c6217f2SLouis Dionne #   error "__cpp_lib_gcd_lcm should have the value 201606L in c++20"
1342c6217f2SLouis Dionne # endif
1352c6217f2SLouis Dionne 
1362c6217f2SLouis Dionne # ifndef __cpp_lib_interpolate
1372c6217f2SLouis Dionne #   error "__cpp_lib_interpolate should be defined in c++20"
1382c6217f2SLouis Dionne # endif
1392c6217f2SLouis Dionne # if __cpp_lib_interpolate != 201902L
1402c6217f2SLouis Dionne #   error "__cpp_lib_interpolate should have the value 201902L in c++20"
1412c6217f2SLouis Dionne # endif
1422c6217f2SLouis Dionne 
1432c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
1442c6217f2SLouis Dionne #   ifndef __cpp_lib_parallel_algorithm
1452c6217f2SLouis Dionne #     error "__cpp_lib_parallel_algorithm should be defined in c++20"
1462c6217f2SLouis Dionne #   endif
1472c6217f2SLouis Dionne #   if __cpp_lib_parallel_algorithm != 201603L
1482c6217f2SLouis Dionne #     error "__cpp_lib_parallel_algorithm should have the value 201603L in c++20"
1492c6217f2SLouis Dionne #   endif
1502c6217f2SLouis Dionne # else // _LIBCPP_VERSION
1512c6217f2SLouis Dionne #   ifdef __cpp_lib_parallel_algorithm
1522c6217f2SLouis Dionne #     error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
1532c6217f2SLouis Dionne #   endif
1542c6217f2SLouis Dionne # endif
1552c6217f2SLouis Dionne 
1562c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_iota
15771400505SMark de Wever #   error "__cpp_lib_ranges_iota should not be defined before c++23"
1582c6217f2SLouis Dionne # endif
1592c6217f2SLouis Dionne 
160*9c18f031SMark de Wever # ifdef __cpp_lib_saturation_arithmetic
161*9c18f031SMark de Wever #   error "__cpp_lib_saturation_arithmetic should not be defined before c++26"
162*9c18f031SMark de Wever # endif
163*9c18f031SMark de Wever 
16400c97cbcSMark de Wever #elif TEST_STD_VER == 23
1652c6217f2SLouis Dionne 
1662c6217f2SLouis Dionne # ifndef __cpp_lib_constexpr_numeric
16771400505SMark de Wever #   error "__cpp_lib_constexpr_numeric should be defined in c++23"
1682c6217f2SLouis Dionne # endif
1692c6217f2SLouis Dionne # if __cpp_lib_constexpr_numeric != 201911L
17071400505SMark de Wever #   error "__cpp_lib_constexpr_numeric should have the value 201911L in c++23"
1712c6217f2SLouis Dionne # endif
1722c6217f2SLouis Dionne 
1732c6217f2SLouis Dionne # ifndef __cpp_lib_gcd_lcm
17471400505SMark de Wever #   error "__cpp_lib_gcd_lcm should be defined in c++23"
1752c6217f2SLouis Dionne # endif
1762c6217f2SLouis Dionne # if __cpp_lib_gcd_lcm != 201606L
17771400505SMark de Wever #   error "__cpp_lib_gcd_lcm should have the value 201606L in c++23"
1782c6217f2SLouis Dionne # endif
1792c6217f2SLouis Dionne 
1802c6217f2SLouis Dionne # ifndef __cpp_lib_interpolate
18171400505SMark de Wever #   error "__cpp_lib_interpolate should be defined in c++23"
1822c6217f2SLouis Dionne # endif
1832c6217f2SLouis Dionne # if __cpp_lib_interpolate != 201902L
18471400505SMark de Wever #   error "__cpp_lib_interpolate should have the value 201902L in c++23"
1852c6217f2SLouis Dionne # endif
1862c6217f2SLouis Dionne 
1872c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
1882c6217f2SLouis Dionne #   ifndef __cpp_lib_parallel_algorithm
18971400505SMark de Wever #     error "__cpp_lib_parallel_algorithm should be defined in c++23"
1902c6217f2SLouis Dionne #   endif
1912c6217f2SLouis Dionne #   if __cpp_lib_parallel_algorithm != 201603L
19271400505SMark de Wever #     error "__cpp_lib_parallel_algorithm should have the value 201603L in c++23"
1932c6217f2SLouis Dionne #   endif
1942c6217f2SLouis Dionne # else // _LIBCPP_VERSION
1952c6217f2SLouis Dionne #   ifdef __cpp_lib_parallel_algorithm
1962c6217f2SLouis Dionne #     error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
1972c6217f2SLouis Dionne #   endif
1982c6217f2SLouis Dionne # endif
1992c6217f2SLouis Dionne 
2002c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
2012c6217f2SLouis Dionne #   ifndef __cpp_lib_ranges_iota
20271400505SMark de Wever #     error "__cpp_lib_ranges_iota should be defined in c++23"
2032c6217f2SLouis Dionne #   endif
2042c6217f2SLouis Dionne #   if __cpp_lib_ranges_iota != 202202L
20571400505SMark de Wever #     error "__cpp_lib_ranges_iota should have the value 202202L in c++23"
2062c6217f2SLouis Dionne #   endif
2072c6217f2SLouis Dionne # else // _LIBCPP_VERSION
2082c6217f2SLouis Dionne #   ifdef __cpp_lib_ranges_iota
2092c6217f2SLouis Dionne #     error "__cpp_lib_ranges_iota should not be defined because it is unimplemented in libc++!"
2102c6217f2SLouis Dionne #   endif
2112c6217f2SLouis Dionne # endif
2122c6217f2SLouis Dionne 
213*9c18f031SMark de Wever # ifdef __cpp_lib_saturation_arithmetic
214*9c18f031SMark de Wever #   error "__cpp_lib_saturation_arithmetic should not be defined before c++26"
215*9c18f031SMark de Wever # endif
216*9c18f031SMark de Wever 
21700c97cbcSMark de Wever #elif TEST_STD_VER > 23
21800c97cbcSMark de Wever 
21900c97cbcSMark de Wever # ifndef __cpp_lib_constexpr_numeric
22000c97cbcSMark de Wever #   error "__cpp_lib_constexpr_numeric should be defined in c++26"
22100c97cbcSMark de Wever # endif
22200c97cbcSMark de Wever # if __cpp_lib_constexpr_numeric != 201911L
22300c97cbcSMark de Wever #   error "__cpp_lib_constexpr_numeric should have the value 201911L in c++26"
22400c97cbcSMark de Wever # endif
22500c97cbcSMark de Wever 
22600c97cbcSMark de Wever # ifndef __cpp_lib_gcd_lcm
22700c97cbcSMark de Wever #   error "__cpp_lib_gcd_lcm should be defined in c++26"
22800c97cbcSMark de Wever # endif
22900c97cbcSMark de Wever # if __cpp_lib_gcd_lcm != 201606L
23000c97cbcSMark de Wever #   error "__cpp_lib_gcd_lcm should have the value 201606L in c++26"
23100c97cbcSMark de Wever # endif
23200c97cbcSMark de Wever 
23300c97cbcSMark de Wever # ifndef __cpp_lib_interpolate
23400c97cbcSMark de Wever #   error "__cpp_lib_interpolate should be defined in c++26"
23500c97cbcSMark de Wever # endif
23600c97cbcSMark de Wever # if __cpp_lib_interpolate != 201902L
23700c97cbcSMark de Wever #   error "__cpp_lib_interpolate should have the value 201902L in c++26"
23800c97cbcSMark de Wever # endif
23900c97cbcSMark de Wever 
24000c97cbcSMark de Wever # if !defined(_LIBCPP_VERSION)
24100c97cbcSMark de Wever #   ifndef __cpp_lib_parallel_algorithm
24200c97cbcSMark de Wever #     error "__cpp_lib_parallel_algorithm should be defined in c++26"
24300c97cbcSMark de Wever #   endif
24400c97cbcSMark de Wever #   if __cpp_lib_parallel_algorithm != 201603L
24500c97cbcSMark de Wever #     error "__cpp_lib_parallel_algorithm should have the value 201603L in c++26"
24600c97cbcSMark de Wever #   endif
24700c97cbcSMark de Wever # else // _LIBCPP_VERSION
24800c97cbcSMark de Wever #   ifdef __cpp_lib_parallel_algorithm
24900c97cbcSMark de Wever #     error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
25000c97cbcSMark de Wever #   endif
25100c97cbcSMark de Wever # endif
25200c97cbcSMark de Wever 
25300c97cbcSMark de Wever # if !defined(_LIBCPP_VERSION)
25400c97cbcSMark de Wever #   ifndef __cpp_lib_ranges_iota
25500c97cbcSMark de Wever #     error "__cpp_lib_ranges_iota should be defined in c++26"
25600c97cbcSMark de Wever #   endif
25700c97cbcSMark de Wever #   if __cpp_lib_ranges_iota != 202202L
25800c97cbcSMark de Wever #     error "__cpp_lib_ranges_iota should have the value 202202L in c++26"
25900c97cbcSMark de Wever #   endif
26000c97cbcSMark de Wever # else // _LIBCPP_VERSION
26100c97cbcSMark de Wever #   ifdef __cpp_lib_ranges_iota
26200c97cbcSMark de Wever #     error "__cpp_lib_ranges_iota should not be defined because it is unimplemented in libc++!"
26300c97cbcSMark de Wever #   endif
26400c97cbcSMark de Wever # endif
26500c97cbcSMark de Wever 
266*9c18f031SMark de Wever # ifndef __cpp_lib_saturation_arithmetic
267*9c18f031SMark de Wever #   error "__cpp_lib_saturation_arithmetic should be defined in c++26"
268*9c18f031SMark de Wever # endif
269*9c18f031SMark de Wever # if __cpp_lib_saturation_arithmetic != 202311L
270*9c18f031SMark de Wever #   error "__cpp_lib_saturation_arithmetic should have the value 202311L in c++26"
271*9c18f031SMark de Wever # endif
272*9c18f031SMark de Wever 
27300c97cbcSMark de Wever #endif // TEST_STD_VER > 23
2742c6217f2SLouis Dionne 
275