1afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes/*
2afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes * Copyright (C) 2015 The Android Open Source Project
3afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes *
4afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License");
5afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes * you may not use this file except in compliance with the License.
6afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes * You may obtain a copy of the License at
7afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes *
8afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes *      http://www.apache.org/licenses/LICENSE-2.0
9afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes *
10afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes * Unless required by applicable law or agreed to in writing, software
11afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
12afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes * See the License for the specific language governing permissions and
14afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes * limitations under the License.
15afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes */
16afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
174f71319df011d796a60a43fc1bc68e16fbf7d321Elliott Hughes#include "android-base/parseint.h"
18afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
19afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes#include <gtest/gtest.h>
20afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
21afe151fb025bada5314cffd1bf7077d2860bf362Elliott HughesTEST(parseint, signed_smoke) {
22da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  int i = 0;
23b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_FALSE(android::base::ParseInt("x", &i));
24b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_FALSE(android::base::ParseInt("123x", &i));
25afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
26b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_TRUE(android::base::ParseInt("123", &i));
27afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes  ASSERT_EQ(123, i);
28b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_TRUE(android::base::ParseInt("-123", &i));
29afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes  ASSERT_EQ(-123, i);
30afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
31da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  short s = 0;
32b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_TRUE(android::base::ParseInt("1234", &s));
33afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes  ASSERT_EQ(1234, s);
34afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
35b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_TRUE(android::base::ParseInt("12", &i, 0, 15));
36afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes  ASSERT_EQ(12, i);
37b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_FALSE(android::base::ParseInt("-12", &i, 0, 15));
38b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_FALSE(android::base::ParseInt("16", &i, 0, 15));
39afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes}
40afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
41afe151fb025bada5314cffd1bf7077d2860bf362Elliott HughesTEST(parseint, unsigned_smoke) {
42da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  unsigned int i = 0u;
43b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_FALSE(android::base::ParseUint("x", &i));
44b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_FALSE(android::base::ParseUint("123x", &i));
45afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
46b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_TRUE(android::base::ParseUint("123", &i));
47afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes  ASSERT_EQ(123u, i);
48b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_FALSE(android::base::ParseUint("-123", &i));
49afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
50da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  unsigned short s = 0u;
51b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_TRUE(android::base::ParseUint("1234", &s));
52afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes  ASSERT_EQ(1234u, s);
53afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
54b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_TRUE(android::base::ParseUint("12", &i, 15u));
55afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes  ASSERT_EQ(12u, i);
56b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_FALSE(android::base::ParseUint("-12", &i, 15u));
57b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_FALSE(android::base::ParseUint("16", &i, 15u));
58afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes}
59afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
60afe151fb025bada5314cffd1bf7077d2860bf362Elliott HughesTEST(parseint, no_implicit_octal) {
61da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  int i = 0;
62b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_TRUE(android::base::ParseInt("0123", &i));
63afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes  ASSERT_EQ(123, i);
64afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes
65da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  unsigned int u = 0u;
66b2d4949cee3739d101d5dc38598a6cae1795b4c8Spencer Low  ASSERT_TRUE(android::base::ParseUint("0123", &u));
67afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes  ASSERT_EQ(123u, u);
68afe151fb025bada5314cffd1bf7077d2860bf362Elliott Hughes}
693ab05869d84357dd54ee27f971bde6514475bcb6Elliott Hughes
703ab05869d84357dd54ee27f971bde6514475bcb6Elliott HughesTEST(parseint, explicit_hex) {
71da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  int i = 0;
723ab05869d84357dd54ee27f971bde6514475bcb6Elliott Hughes  ASSERT_TRUE(android::base::ParseInt("0x123", &i));
733ab05869d84357dd54ee27f971bde6514475bcb6Elliott Hughes  ASSERT_EQ(0x123, i);
743ab05869d84357dd54ee27f971bde6514475bcb6Elliott Hughes
75da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  unsigned int u = 0u;
763ab05869d84357dd54ee27f971bde6514475bcb6Elliott Hughes  ASSERT_TRUE(android::base::ParseUint("0x123", &u));
773ab05869d84357dd54ee27f971bde6514475bcb6Elliott Hughes  ASSERT_EQ(0x123u, u);
783ab05869d84357dd54ee27f971bde6514475bcb6Elliott Hughes}
79da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes
80da46b392f10d2809b5696632f67485f272ec5698Elliott HughesTEST(parseint, string) {
81da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  int i = 0;
82da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  ASSERT_TRUE(android::base::ParseInt(std::string("123"), &i));
83da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  ASSERT_EQ(123, i);
84da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes
85da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  unsigned int u = 0u;
86da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  ASSERT_TRUE(android::base::ParseUint(std::string("123"), &u));
87da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  ASSERT_EQ(123u, u);
88da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes}
89da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes
90da46b392f10d2809b5696632f67485f272ec5698Elliott HughesTEST(parseint, untouched_on_failure) {
91da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  int i = 123;
92da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  ASSERT_FALSE(android::base::ParseInt("456x", &i));
93da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  ASSERT_EQ(123, i);
94da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes
95da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  unsigned int u = 123u;
96da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  ASSERT_FALSE(android::base::ParseInt("456x", &u));
97da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes  ASSERT_EQ(123u, u);
98da46b392f10d2809b5696632f67485f272ec5698Elliott Hughes}
99