brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 083a6aa Raw
124 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// long stol(const string& str, size_t *idx = 0, int base = 10);12// long stol(const wstring& str, size_t *idx = 0, int base = 10);13 14#include <string>15#include <cassert>16#include <limits>17#include <stdexcept>18 19#include "test_macros.h"20 21int main(int, char**) {22  assert(std::stol("0") == 0);23  assert(std::stol("-0") == 0);24  assert(std::stol("-10") == -10);25  assert(std::stol(" 10") == 10);26  {27    std::size_t idx = 0;28    assert(std::stol("10g", &idx, 16) == 16);29    assert(idx == 2);30  }31#ifndef TEST_HAS_NO_EXCEPTIONS32  {33    std::size_t idx = 0;34    try {35      (void)std::stol("", &idx);36      assert(false);37    } catch (const std::invalid_argument&) {38      assert(idx == 0);39    }40  }41  {42    std::size_t idx = 0;43    try {44      (void)std::stol("  - 8", &idx);45      assert(false);46    } catch (const std::invalid_argument&) {47      assert(idx == 0);48    }49  }50  {51    std::size_t idx = 0;52    try {53      (void)std::stol("a1", &idx);54      assert(false);55    } catch (const std::invalid_argument&) {56      assert(idx == 0);57    }58  }59  {60    std::size_t idx = 0;61    try {62      // LWG#2009 and PR1491963      (void)std::stol("9999999999999999999999999999999999999999999999999", &idx);64      assert(false);65    } catch (const std::out_of_range&) {66      assert(idx == 0);67    }68  }69#endif // TEST_HAS_NO_EXCEPTIONS70 71#ifndef TEST_HAS_NO_WIDE_CHARACTERS72  assert(std::stol(L"0") == 0);73  assert(std::stol(L"-0") == 0);74  assert(std::stol(L"-10") == -10);75  assert(std::stol(L" 10") == 10);76  {77    std::size_t idx = 0;78    assert(std::stol(L"10g", &idx, 16) == 16);79    assert(idx == 2);80  }81#  ifndef TEST_HAS_NO_EXCEPTIONS82  {83    std::size_t idx = 0;84    try {85      (void)std::stol(L"", &idx);86      assert(false);87    } catch (const std::invalid_argument&) {88      assert(idx == 0);89    }90  }91  {92    std::size_t idx = 0;93    try {94      (void)std::stol(L"  - 8", &idx);95      assert(false);96    } catch (const std::invalid_argument&) {97      assert(idx == 0);98    }99  }100  {101    std::size_t idx = 0;102    try {103      (void)std::stol(L"a1", &idx);104      assert(false);105    } catch (const std::invalid_argument&) {106      assert(idx == 0);107    }108  }109  {110    std::size_t idx = 0;111    try {112      // LWG#2009 and PR14919113      (void)std::stol(L"9999999999999999999999999999999999999999999999999", &idx);114      assert(false);115    } catch (const std::out_of_range&) {116      assert(idx == 0);117    }118  }119#  endif // TEST_HAS_NO_EXCEPTIONS120#endif   // TEST_HAS_NO_WIDE_CHARACTERS121 122  return 0;123}124