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. 4 5 #include <limits> 6 7 #include "base/i18n/number_formatting.h" 8 #include "base/i18n/rtl.h" 9 #include "base/strings/utf_string_conversions.h" 10 #include "testing/gtest/include/gtest/gtest.h" 11 12 namespace base { 13 namespace { 14 15 TEST(NumberFormattingTest, FormatNumber) { 16 static const struct { 17 int64 number; 18 const char* expected_english; 19 const char* expected_german; 20 } cases[] = { 21 {0, "0", "0"}, 22 {1024, "1,024", "1.024"}, 23 {std::numeric_limits<int64>::max(), 24 "9,223,372,036,854,775,807", "9.223.372.036.854.775.807"}, 25 {std::numeric_limits<int64>::min(), 26 "-9,223,372,036,854,775,808", "-9.223.372.036.854.775.808"}, 27 {-42, "-42", "-42"}, 28 }; 29 30 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 31 i18n::SetICUDefaultLocale("en"); 32 testing::ResetFormatters(); 33 EXPECT_EQ(cases[i].expected_english, 34 UTF16ToUTF8(FormatNumber(cases[i].number))); 35 i18n::SetICUDefaultLocale("de"); 36 testing::ResetFormatters(); 37 EXPECT_EQ(cases[i].expected_german, 38 UTF16ToUTF8(FormatNumber(cases[i].number))); 39 } 40 } 41 42 TEST(NumberFormattingTest, FormatDouble) { 43 static const struct { 44 double number; 45 int frac_digits; 46 const char* expected_english; 47 const char* expected_german; 48 } cases[] = { 49 {0.0, 0, "0", "0"}, 50 #if !defined(OS_ANDROID) 51 // Bionic can't printf negative zero correctly. 52 {-0.0, 4, "-0.0000", "-0,0000"}, 53 #endif 54 {1024.2, 0, "1,024", "1.024"}, 55 {-1024.223, 2, "-1,024.22", "-1.024,22"}, 56 {std::numeric_limits<double>::max(), 6, 57 "179,769,313,486,232,000,000,000,000,000,000,000,000,000,000,000,000," 58 "000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000," 59 "000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000," 60 "000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000," 61 "000,000,000,000,000,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.000000", 64 "179.769.313.486.232.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." 67 "000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000." 68 "000.000.000.000.000.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,000000"}, 71 {std::numeric_limits<double>::min(), 2, "0.00", "0,00"}, 72 {-42.7, 3, "-42.700", "-42,700"}, 73 }; 74 75 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 76 i18n::SetICUDefaultLocale("en"); 77 testing::ResetFormatters(); 78 EXPECT_EQ(cases[i].expected_english, 79 UTF16ToUTF8(FormatDouble(cases[i].number, cases[i].frac_digits))); 80 i18n::SetICUDefaultLocale("de"); 81 testing::ResetFormatters(); 82 EXPECT_EQ(cases[i].expected_german, 83 UTF16ToUTF8(FormatDouble(cases[i].number, cases[i].frac_digits))); 84 } 85 } 86 87 } // namespace 88 } // namespace base 89