Changes imported from Abseil "staging" branch:

- 5d8235b05f4ea2b33a138712f463a30b6ae75719 Incorporate PR https://github.com/abseil/abseil-cpp/pull/... by Xiaoyi Zhang <zhangxy@google.com>
  - f2bc653acdaa983aa2765693476c17cd1142d59b Run the StrSplit WorksWithLargeStrings test in all configs. by Matt Armstrong <marmstrong@google.com>
  - 43aed1ea7dffcd656e1916c2d5637650fc3a8de3 Incorporate PR https://github.com/abseil/abseil-cpp/pull/... by Xiaoyi Zhang <zhangxy@google.com>
  - d58511d60904c7090e44638339ba63b97ca96f1a Add a new simple Mutex lifetime test, to be extended later. by Greg Falcon <gfalcon@google.com>
  - db5c86c186c09ad57963bcbd2b6182f62bce8ed0 Actually use the exception in TestCheckerAtCountdown by Jon Cohen <cohenjon@google.com>
  - 29c01a72b62d9a4b90f9bd935e3575adbafd85ed Use factories instead of explicitly passing pointers to T... by Jon Cohen <cohenjon@google.com>
  - 54d5526ee6ab7784992845f6e6e2c7d48ba008a5 Fix uint128 ostream operator and improve ostream test. by Alex Strelnikov <strel@google.com>
  - 4e49abe7e569cf6bd0eae95ce2b2fe2faa051fa2 Fix documentation: strings::PairFormatter -> absl::PairFo... by Derek Mauro <dmauro@google.com>
  - 4044297f0e1a8a6c6ae3f781a65080e0d57c6751 Cut the memory used by the StrSplit WorksWithLargeStrings... by Jorg Brown <jorg@google.com>

GitOrigin-RevId: 5d8235b05f4ea2b33a138712f463a30b6ae75719
Change-Id: Ib6b6b0161c26e5326b53a126454754e33678eefc
This commit is contained in:
Abseil Team 2017-12-01 12:15:49 -08:00 committed by Xiaoyi Zhang
parent 579f2879ac
commit 8b727aa7ab
11 changed files with 1207 additions and 269 deletions

View file

@ -428,79 +428,18 @@ TEST(Uint128, ConstexprTest) {
}
TEST(Uint128, OStream) {
struct {
struct StreamCase {
absl::uint128 val;
std::ios_base::fmtflags flags;
std::streamsize width;
char fill;
const char* rep;
} cases[] = {
// zero with different bases
{absl::uint128(0), std::ios::dec, 0, '_', "0"},
{absl::uint128(0), std::ios::oct, 0, '_', "0"},
{absl::uint128(0), std::ios::hex, 0, '_', "0"},
// crossover between lo_ and hi_
{absl::MakeUint128(0, -1), std::ios::dec, 0, '_', "18446744073709551615"},
{absl::MakeUint128(0, -1), std::ios::oct, 0, '_',
"1777777777777777777777"},
{absl::MakeUint128(0, -1), std::ios::hex, 0, '_', "ffffffffffffffff"},
{absl::MakeUint128(1, 0), std::ios::dec, 0, '_', "18446744073709551616"},
{absl::MakeUint128(1, 0), std::ios::oct, 0, '_',
"2000000000000000000000"},
{absl::MakeUint128(1, 0), std::ios::hex, 0, '_', "10000000000000000"},
// just the top bit
{absl::MakeUint128(0x8000000000000000, 0), std::ios::dec, 0, '_',
"170141183460469231731687303715884105728"},
{absl::MakeUint128(0x8000000000000000, 0), std::ios::oct, 0, '_',
"2000000000000000000000000000000000000000000"},
{absl::MakeUint128(0x8000000000000000, 0), std::ios::hex, 0, '_',
"80000000000000000000000000000000"},
// maximum absl::uint128 value
{absl::MakeUint128(-1, -1), std::ios::dec, 0, '_',
"340282366920938463463374607431768211455"},
{absl::MakeUint128(-1, -1), std::ios::oct, 0, '_',
"3777777777777777777777777777777777777777777"},
{absl::MakeUint128(-1, -1), std::ios::hex, 0, '_',
"ffffffffffffffffffffffffffffffff"},
// uppercase
{absl::MakeUint128(-1, -1), std::ios::hex | std::ios::uppercase, 0, '_',
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},
// showbase
{absl::uint128(1), std::ios::dec | std::ios::showbase, 0, '_', "1"},
{absl::uint128(1), std::ios::oct | std::ios::showbase, 0, '_', "01"},
{absl::uint128(1), std::ios::hex | std::ios::showbase, 0, '_', "0x1"},
// showbase does nothing on zero
{absl::uint128(0), std::ios::dec | std::ios::showbase, 0, '_', "0"},
{absl::uint128(0), std::ios::oct | std::ios::showbase, 0, '_', "0"},
{absl::uint128(0), std::ios::hex | std::ios::showbase, 0, '_', "0"},
// showpos does nothing on unsigned types
{absl::uint128(1), std::ios::dec | std::ios::showpos, 0, '_', "1"},
// right adjustment
{absl::uint128(9), std::ios::dec, 6, '_', "_____9"},
{absl::uint128(12345), std::ios::dec, 6, '_', "_12345"},
{absl::uint128(31), std::ios::hex | std::ios::showbase, 6, '_', "__0x1f"},
{absl::uint128(7), std::ios::oct | std::ios::showbase, 6, '_', "____07"},
// left adjustment
{absl::uint128(9), std::ios::dec | std::ios::left, 6, '_', "9_____"},
{absl::uint128(12345), std::ios::dec | std::ios::left, 6, '_', "12345_"},
{absl::uint128(31), std::ios::hex | std::ios::left | std::ios::showbase,
6, '_', "0x1f__"},
{absl::uint128(7), std::ios::oct | std::ios::left | std::ios::showbase, 6,
'_', "07____"},
// internal adjustment
{absl::uint128(123),
std::ios::dec | std::ios::internal | std::ios::showbase, 6, '_',
"___123"},
{absl::uint128(31),
std::ios::hex | std::ios::internal | std::ios::showbase, 6, '_',
"0x__1f"},
{absl::uint128(7),
std::ios::oct | std::ios::internal | std::ios::showbase, 6, '_',
"0____7"},
{absl::uint128(34), std::ios::hex | std::ios::internal, 6, '_', "____22"},
{absl::uint128(9), std::ios::oct | std::ios::internal, 6, '_', "____11"},
};
for (const auto& test_case : cases) {
std::vector<StreamCase> cases = {
#include "absl/numeric/int128_test_unsigned_ostream_cases.inc"
};
for (const StreamCase& test_case : cases) {
std::ostringstream os;
os.flags(test_case.flags);
os.width(test_case.width);