brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · b1f2c77 Raw
96 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++11, c++1410 11// ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-steps): -fconstexpr-steps=1271242012 13// <charconv>14 15// constexpr from_chars_result from_chars(const char* first, const char* last,16//                                        Integral& value, int base = 10)17 18#include <charconv>19#include <system_error>20 21#include "test_macros.h"22#include "charconv_test_helpers.h"23 24template <typename T>25struct test_basics : roundtrip_test_base<T>26{27    using roundtrip_test_base<T>::test;28 29    TEST_CONSTEXPR_CXX23 void operator()()30    {31        test(0);32        test(42);33        test(32768);34        test(0, 10);35        test(42, 10);36        test(32768, 10);37        test(0xf, 16);38        test(0xdeadbeaf, 16);39        test(0755, 8);40 41        for (int b = 2; b < 37; ++b)42        {43            using xl = std::numeric_limits<T>;44 45            test(1, b);46            test(-1, b);47            test(xl::lowest(), b);48            test((xl::max)(), b);49            test((xl::max)() / 2, b);50        }51    }52};53 54template <typename T>55struct test_signed : roundtrip_test_base<T>56{57    using roundtrip_test_base<T>::test;58 59    TEST_CONSTEXPR_CXX23 void operator()()60    {61        test(-1);62        test(-12);63        test(-1, 10);64        test(-12, 10);65        test(-21734634, 10);66        test(-2647, 2);67        test(-0xcc1, 16);68 69        for (int b = 2; b < 37; ++b)70        {71            using xl = std::numeric_limits<T>;72 73            test(0, b);74            test(xl::lowest(), b);75            test((xl::max)(), b);76        }77    }78};79 80TEST_CONSTEXPR_CXX23 bool test()81{82    run<test_basics>(integrals);83    run<test_signed>(all_signed);84 85    return true;86}87 88int main(int, char**) {89    test();90#if TEST_STD_VER > 2091    static_assert(test());92#endif93 94    return 0;95}96