File: git_issue_167.cpp

package info (click to toggle)
boost1.90 1.90.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 593,120 kB
  • sloc: cpp: 4,190,908; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,774; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (65 lines) | stat: -rw-r--r-- 2,009 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
///////////////////////////////////////////////////////////////////////////////
//  Copyright 2019 - 2025 John Maddock.
//  Copyright 2025 Christopher Kormanyos.
//  Distributed under the Boost
//  Software License, Version 1.0. (See accompanying file
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

#include <test.hpp>

#include <boost/multiprecision/cpp_dec_float.hpp>

#include <locale>
#include <string>

int main()
{
   std::string str { };

   // Test strings with a decimal point. Keep in the spirit of the
   // original test case. But don't simply try-catch out of it.

   try
   {
      using local_dec_float_type = boost::multiprecision::cpp_dec_float_50;

      // Test a string with a decimal point.
      local_dec_float_type d_first("1234.56");
      str = d_first.str();
      BOOST_CHECK(str == "1234.56");

      #if (defined(__GNUC__) && defined(__x86_64__) && !(defined(_WIN32) || defined(__MINGW32__)) && !defined(__APPLE__))

      // That preprocessor line is detailed, but it really essentially is
      // just trying to isolate Ubuntu runners on GHA for test and coverage.

      // Set a new local locale. All these compilers have different
      // locale names. In this particular case, we stay with the
      // original spirit of the test in issue167 at least on Ubuntu
      // GHA runners. We also wanto to pick up these lines of coverage.

      const char* p_str_loc = std::setlocale(LC_ALL, "C.UTF-8");

      std::cout << "A local locale was set: " << p_str_loc << std::endl;

      {
         std::stringstream strm { };

         strm << p_str_loc;

         // Check the new local locale.
         BOOST_CHECK(strm.str().find("UTF") != std::string::npos);
      }
      #endif

      local_dec_float_type d_other("123.789");
      str = d_other.str();

      BOOST_CHECK(str == "123.789");
   }
   catch(const std::runtime_error&) { }  // LCOV_EXCL_LINE No locale was found.

   BOOST_CHECK(str == "123.789");

   return boost::report_errors();
}