From 9bd3fac954ca7a54af6d3757ebfd82038644e0b3 Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Tue, 10 Feb 2026 10:57:20 -0500 Subject: [PATCH] Add test set --- test/Jamfile | 1 + test/github_issue_int128_320.cpp | 55 ++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 test/github_issue_int128_320.cpp diff --git a/test/Jamfile b/test/Jamfile index 57f19c5..e542ed7 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -74,3 +74,4 @@ run github_issue_266.cpp ; run github_issue_267.cpp ; run github_issue_280.cpp ; run github_issue_282.cpp ; +run github_issue_int128_320.cpp ; diff --git a/test/github_issue_int128_320.cpp b/test/github_issue_int128_320.cpp new file mode 100644 index 0000000..dc54a65 --- /dev/null +++ b/test/github_issue_int128_320.cpp @@ -0,0 +1,55 @@ +// Copyright 2026 Matt Borland +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt +// +// See: https://github.com/cppalliance/int128/issues/320 + +#include + +#ifdef BOOST_CHARCONV_HAS_INT128 + +#include +#include +#include + +void toChars(char* ptr, char* ptrEnd, boost::int128_type i128) +{ + auto r = boost::charconv::to_chars(ptr, ptrEnd, i128); + *r.ptr = '\0'; +} + +void toChars(char* ptr, char* ptrEnd, boost::uint128_type u128) +{ + auto r = boost::charconv::to_chars(ptr, ptrEnd, u128); + *r.ptr = '\0'; +} + +int main() +{ + boost::int128_type i128 = -123; + boost::uint128_type u128 = 123; + + std::int64_t ref_value = -123; + + for (int i = 1; i < 5; ++i) + { + i128 *= i; + u128 *= static_cast(i); + ref_value *= i; + + char buf[64] = {}; + toChars(buf, buf + 64, i128); + BOOST_TEST_CSTR_EQ(buf, std::to_string(ref_value).c_str()); + + toChars(buf, buf + 64, u128); + BOOST_TEST_CSTR_EQ(buf, std::to_string(std::abs(ref_value)).c_str()); + }; + + return boost::report_errors(); +} + +#else + +int main() { return 0; } + +#endif