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