- add sources.
[platform/framework/web/crosswalk.git] / src / base / i18n / number_formatting_unittest.cc
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