brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 0a91f33 Raw
121 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// <string>10 11// unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);12// unsigned long long stoull(const wstring& str, size_t *idx = 0, int base = 10);13 14#include <string>15#include <cassert>16#include <stdexcept>17 18#include "test_macros.h"19 20int main(int, char**) {21  assert(std::stoull("0") == 0);22  assert(std::stoull("-0") == 0);23  assert(std::stoull(" 10") == 10);24  {25    std::size_t idx = 0;26    assert(std::stoull("10g", &idx, 16) == 16);27    assert(idx == 2);28  }29#ifndef TEST_HAS_NO_EXCEPTIONS30  {31    std::size_t idx = 0;32    try {33      (void)std::stoull("", &idx);34      assert(false);35    } catch (const std::invalid_argument&) {36      assert(idx == 0);37    }38  }39  {40    std::size_t idx = 0;41    try {42      (void)std::stoull("  - 8", &idx);43      assert(false);44    } catch (const std::invalid_argument&) {45      assert(idx == 0);46    }47  }48  {49    std::size_t idx = 0;50    try {51      (void)std::stoull("a1", &idx);52      assert(false);53    } catch (const std::invalid_argument&) {54      assert(idx == 0);55    }56  }57  {58    std::size_t idx = 0;59    try {60      // LWG#2009 and PR1491961      (void)std::stoull("9999999999999999999999999999999999999999999999999", &idx);62      assert(false);63    } catch (const std::out_of_range&) {64      assert(idx == 0);65    }66  }67#endif // TEST_HAS_NO_EXCEPTIONS68 69#ifndef TEST_HAS_NO_WIDE_CHARACTERS70  assert(std::stoull(L"0") == 0);71  assert(std::stoull(L"-0") == 0);72  assert(std::stoull(L" 10") == 10);73  {74    std::size_t idx = 0;75    assert(std::stoull(L"10g", &idx, 16) == 16);76    assert(idx == 2);77  }78#  ifndef TEST_HAS_NO_EXCEPTIONS79  {80    std::size_t idx = 0;81    try {82      (void)std::stoull(L"", &idx);83      assert(false);84    } catch (const std::invalid_argument&) {85      assert(idx == 0);86    }87  }88  {89    std::size_t idx = 0;90    try {91      (void)std::stoull(L"  - 8", &idx);92      assert(false);93    } catch (const std::invalid_argument&) {94      assert(idx == 0);95    }96  }97  {98    std::size_t idx = 0;99    try {100      (void)std::stoull(L"a1", &idx);101      assert(false);102    } catch (const std::invalid_argument&) {103      assert(idx == 0);104    }105  }106  {107    std::size_t idx = 0;108    try {109      // LWG#2009 and PR14919110      (void)std::stoull(L"9999999999999999999999999999999999999999999999999", &idx);111      assert(false);112    } catch (const std::out_of_range&) {113      assert(idx == 0);114    }115  }116#  endif // TEST_HAS_NO_EXCEPTIONS117#endif   // TEST_HAS_NO_WIDE_CHARACTERS118 119  return 0;120}121