1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 #include "base/i18n/number_formatting.h"
8 #include "base/i18n/rtl.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "base/test/icu_test_util.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "third_party/icu/source/i18n/unicode/usearch.h"
17 TEST(NumberFormattingTest
, FormatNumber
) {
20 const char* expected_english
;
21 const char* expected_german
;
24 {1024, "1,024", "1.024"},
25 {std::numeric_limits
<int64
>::max(),
26 "9,223,372,036,854,775,807", "9.223.372.036.854.775.807"},
27 {std::numeric_limits
<int64
>::min(),
28 "-9,223,372,036,854,775,808", "-9.223.372.036.854.775.808"},
32 test::ScopedRestoreICUDefaultLocale restore_locale
;
34 for (size_t i
= 0; i
< arraysize(cases
); ++i
) {
35 i18n::SetICUDefaultLocale("en");
36 testing::ResetFormatters();
37 EXPECT_EQ(cases
[i
].expected_english
,
38 UTF16ToUTF8(FormatNumber(cases
[i
].number
)));
39 i18n::SetICUDefaultLocale("de");
40 testing::ResetFormatters();
41 EXPECT_EQ(cases
[i
].expected_german
,
42 UTF16ToUTF8(FormatNumber(cases
[i
].number
)));
46 TEST(NumberFormattingTest
, FormatDouble
) {
50 const char* expected_english
;
51 const char* expected_german
;
54 #if !defined(OS_ANDROID)
55 // Bionic can't printf negative zero correctly.
56 {-0.0, 4, "-0.0000", "-0,0000"},
58 {1024.2, 0, "1,024", "1.024"},
59 {-1024.223, 2, "-1,024.22", "-1.024,22"},
60 {std::numeric_limits
<double>::max(), 6,
61 "179,769,313,486,232,000,000,000,000,000,000,000,000,000,000,000,000,"
62 "000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,"
63 "000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,"
64 "000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,"
65 "000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,"
66 "000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,"
68 "179.769.313.486.232.000.000.000.000.000.000.000.000.000.000.000.000."
69 "000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000."
70 "000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000."
71 "000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000."
72 "000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000."
73 "000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000."
75 {std::numeric_limits
<double>::min(), 2, "0.00", "0,00"},
76 {-42.7, 3, "-42.700", "-42,700"},
79 test::ScopedRestoreICUDefaultLocale restore_locale
;
80 for (size_t i
= 0; i
< arraysize(cases
); ++i
) {
81 i18n::SetICUDefaultLocale("en");
82 testing::ResetFormatters();
83 EXPECT_EQ(cases
[i
].expected_english
,
84 UTF16ToUTF8(FormatDouble(cases
[i
].number
, cases
[i
].frac_digits
)));
85 i18n::SetICUDefaultLocale("de");
86 testing::ResetFormatters();
87 EXPECT_EQ(cases
[i
].expected_german
,
88 UTF16ToUTF8(FormatDouble(cases
[i
].number
, cases
[i
].frac_digits
)));