@@ -108,4 +108,93 @@ BOOST_AUTO_TEST_CASE(decimalItalianoParsing) {
108108 ret.unpack (beforeValue, afterValue);
109109 BOOST_CHECK_EQUAL (beforeValue, 1234 );
110110 BOOST_CHECK_EQUAL (afterValue, 56 );
111+ }
112+
113+ BOOST_AUTO_TEST_CASE (decimalToStringWithGlobalCLocale) {
114+ std::locale prior_cout_locale = std::cout.getloc ();
115+ std::locale prior_locale = std::locale::global (std::locale (" C" ));
116+
117+ dec::decimal<7 > value = dec::decimal<7 >::buildWithExponent (1234567890987L , -7 );
118+ std::string expected = " 123456.7890987" ;
119+
120+ BOOST_CHECK_EQUAL (dec::toString (value), expected);
121+
122+ std::cout.imbue ( prior_cout_locale );
123+ std::locale::global (prior_locale);
124+ }
125+
126+ BOOST_AUTO_TEST_CASE (decimalToStringWithGlobalItLocale) {
127+ std::locale prior_cout_locale = std::cout.getloc ();
128+ std::locale italiano_locale (std::cout.getloc (), new italiano_separators);
129+ std::locale prior_locale = std::locale::global (italiano_locale);
130+
131+ dec::decimal<7 > value = dec::decimal<7 >::buildWithExponent (1234567890987L , -7 );
132+ std::string expected = " 123.456,7890987" ;
133+
134+ BOOST_CHECK_EQUAL (dec::toString (value), expected);
135+
136+ std::cout.imbue (prior_cout_locale);
137+ std::locale::global (prior_locale);
138+ }
139+
140+ BOOST_AUTO_TEST_CASE (decimalToStringWithGlobalItLocaleAndProvidedFormat) {
141+ std::locale prior_cout_locale = std::cout.getloc ();
142+ std::locale italiano_locale (std::cout.getloc (), new italiano_separators);
143+ std::locale prior_locale = std::locale::global (italiano_locale);
144+
145+ dec::decimal_format format (' .' , ' \0 ' );
146+
147+ dec::decimal<7 > value = dec::decimal<7 >::buildWithExponent (1234567890987L , -7 );
148+ std::string expected = " 123456.7890987" ;
149+
150+ BOOST_CHECK_EQUAL (dec::toString (value, format), expected);
151+
152+ std::cout.imbue (prior_cout_locale);
153+ std::locale::global (prior_locale);
154+ }
155+
156+ BOOST_AUTO_TEST_CASE (decimalFromStringWithGlobalCLocale) {
157+ std::locale prior_cout_locale = std::cout.getloc ();
158+ std::locale prior_locale = std::locale::global (std::locale (" C" ));
159+
160+ std::string value = " 123456.7890987" ;
161+ dec::decimal<7 > expected = dec::decimal<7 >::buildWithExponent (1234567890987L , -7 );
162+ dec::decimal<7 > d7 (value);
163+
164+ BOOST_CHECK_EQUAL (d7, expected);
165+
166+ std::cout.imbue (prior_cout_locale);
167+ std::locale::global (prior_locale);
168+ }
169+
170+ BOOST_AUTO_TEST_CASE (decimalFromStringWithGlobalItLocale) {
171+ std::locale prior_cout_locale = std::cout.getloc ();
172+ std::locale italiano_locale (std::cout.getloc (), new italiano_separators);
173+ std::locale prior_locale = std::locale::global (italiano_locale);
174+
175+ std::string value = " 123.456,7890987" ;
176+ dec::decimal<7 > expected = dec::decimal<7 >::buildWithExponent (1234567890987L , -7 );
177+ dec::decimal<7 > d7 (value);
178+
179+ BOOST_CHECK_EQUAL (d7, expected);
180+
181+ std::cout.imbue (prior_cout_locale);
182+ std::locale::global (prior_locale);
183+ }
184+
185+ BOOST_AUTO_TEST_CASE (decimalFromStringWithGlobalItLocaleAndProvidedFormat) {
186+ std::locale prior_cout_locale = std::cout.getloc ();
187+ std::locale italiano_locale (std::cout.getloc (), new italiano_separators);
188+ std::locale prior_locale = std::locale::global (italiano_locale);
189+
190+ dec::decimal_format cformat (' .' , ' \0 ' );
191+
192+ std::string value = " 123456.7890987" ;
193+ dec::decimal<7 > expected = dec::decimal<7 >::buildWithExponent (1234567890987L , -7 );
194+ dec::decimal<7 > d7 (value, cformat);
195+
196+ BOOST_CHECK_EQUAL (d7, expected);
197+
198+ std::cout.imbue (prior_cout_locale);
199+ std::locale::global (prior_locale);
111200}
0 commit comments