1*993b0882SAndroid Build Coastguard Worker /*
2*993b0882SAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project
3*993b0882SAndroid Build Coastguard Worker *
4*993b0882SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*993b0882SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*993b0882SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*993b0882SAndroid Build Coastguard Worker *
8*993b0882SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*993b0882SAndroid Build Coastguard Worker *
10*993b0882SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*993b0882SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*993b0882SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*993b0882SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*993b0882SAndroid Build Coastguard Worker * limitations under the License.
15*993b0882SAndroid Build Coastguard Worker */
16*993b0882SAndroid Build Coastguard Worker
17*993b0882SAndroid Build Coastguard Worker #include "utils/strings/numbers.h"
18*993b0882SAndroid Build Coastguard Worker
19*993b0882SAndroid Build Coastguard Worker #include "utils/base/integral_types.h"
20*993b0882SAndroid Build Coastguard Worker #include "gtest/gtest.h"
21*993b0882SAndroid Build Coastguard Worker
22*993b0882SAndroid Build Coastguard Worker namespace libtextclassifier3 {
23*993b0882SAndroid Build Coastguard Worker namespace {
24*993b0882SAndroid Build Coastguard Worker
TestParseInt32(const char * c_str,bool expected_parsing_success,int32 expected_parsed_value=0)25*993b0882SAndroid Build Coastguard Worker void TestParseInt32(const char *c_str, bool expected_parsing_success,
26*993b0882SAndroid Build Coastguard Worker int32 expected_parsed_value = 0) {
27*993b0882SAndroid Build Coastguard Worker int32 parsed_value = 0;
28*993b0882SAndroid Build Coastguard Worker EXPECT_EQ(expected_parsing_success, ParseInt32(c_str, &parsed_value));
29*993b0882SAndroid Build Coastguard Worker if (expected_parsing_success) {
30*993b0882SAndroid Build Coastguard Worker EXPECT_EQ(expected_parsed_value, parsed_value);
31*993b0882SAndroid Build Coastguard Worker }
32*993b0882SAndroid Build Coastguard Worker }
33*993b0882SAndroid Build Coastguard Worker
TEST(ParseInt32Test,Normal)34*993b0882SAndroid Build Coastguard Worker TEST(ParseInt32Test, Normal) {
35*993b0882SAndroid Build Coastguard Worker TestParseInt32("2", true, 2);
36*993b0882SAndroid Build Coastguard Worker TestParseInt32("-357", true, -357);
37*993b0882SAndroid Build Coastguard Worker TestParseInt32("7", true, 7);
38*993b0882SAndroid Build Coastguard Worker TestParseInt32("+7", true, 7);
39*993b0882SAndroid Build Coastguard Worker TestParseInt32(" +7", true, 7);
40*993b0882SAndroid Build Coastguard Worker TestParseInt32("-23", true, -23);
41*993b0882SAndroid Build Coastguard Worker TestParseInt32(" -23", true, -23);
42*993b0882SAndroid Build Coastguard Worker TestParseInt32("04", true, 4);
43*993b0882SAndroid Build Coastguard Worker TestParseInt32("07", true, 7);
44*993b0882SAndroid Build Coastguard Worker TestParseInt32("08", true, 8);
45*993b0882SAndroid Build Coastguard Worker TestParseInt32("09", true, 9);
46*993b0882SAndroid Build Coastguard Worker }
47*993b0882SAndroid Build Coastguard Worker
TEST(ParseInt32Test,ErrorCases)48*993b0882SAndroid Build Coastguard Worker TEST(ParseInt32Test, ErrorCases) {
49*993b0882SAndroid Build Coastguard Worker TestParseInt32("", false);
50*993b0882SAndroid Build Coastguard Worker TestParseInt32(" ", false);
51*993b0882SAndroid Build Coastguard Worker TestParseInt32("not-a-number", false);
52*993b0882SAndroid Build Coastguard Worker TestParseInt32("123a", false);
53*993b0882SAndroid Build Coastguard Worker }
54*993b0882SAndroid Build Coastguard Worker
TestParseInt64(const char * c_str,bool expected_parsing_success,int64 expected_parsed_value=0)55*993b0882SAndroid Build Coastguard Worker void TestParseInt64(const char *c_str, bool expected_parsing_success,
56*993b0882SAndroid Build Coastguard Worker int64 expected_parsed_value = 0) {
57*993b0882SAndroid Build Coastguard Worker int64 parsed_value = 0;
58*993b0882SAndroid Build Coastguard Worker EXPECT_EQ(expected_parsing_success, ParseInt64(c_str, &parsed_value));
59*993b0882SAndroid Build Coastguard Worker if (expected_parsing_success) {
60*993b0882SAndroid Build Coastguard Worker EXPECT_EQ(expected_parsed_value, parsed_value);
61*993b0882SAndroid Build Coastguard Worker }
62*993b0882SAndroid Build Coastguard Worker }
63*993b0882SAndroid Build Coastguard Worker
TEST(ParseInt64Test,Normal)64*993b0882SAndroid Build Coastguard Worker TEST(ParseInt64Test, Normal) {
65*993b0882SAndroid Build Coastguard Worker TestParseInt64("2", true, 2);
66*993b0882SAndroid Build Coastguard Worker TestParseInt64("-357", true, -357);
67*993b0882SAndroid Build Coastguard Worker TestParseInt64("7", true, 7);
68*993b0882SAndroid Build Coastguard Worker TestParseInt64("+7", true, 7);
69*993b0882SAndroid Build Coastguard Worker TestParseInt64(" +7", true, 7);
70*993b0882SAndroid Build Coastguard Worker TestParseInt64("-23", true, -23);
71*993b0882SAndroid Build Coastguard Worker TestParseInt64(" -23", true, -23);
72*993b0882SAndroid Build Coastguard Worker TestParseInt64("07", true, 7);
73*993b0882SAndroid Build Coastguard Worker TestParseInt64("08", true, 8);
74*993b0882SAndroid Build Coastguard Worker }
75*993b0882SAndroid Build Coastguard Worker
TEST(ParseInt64Test,ErrorCases)76*993b0882SAndroid Build Coastguard Worker TEST(ParseInt64Test, ErrorCases) {
77*993b0882SAndroid Build Coastguard Worker TestParseInt64("", false);
78*993b0882SAndroid Build Coastguard Worker TestParseInt64(" ", false);
79*993b0882SAndroid Build Coastguard Worker TestParseInt64("not-a-number", false);
80*993b0882SAndroid Build Coastguard Worker TestParseInt64("23z", false);
81*993b0882SAndroid Build Coastguard Worker }
82*993b0882SAndroid Build Coastguard Worker
TestParseDouble(const char * c_str,bool expected_parsing_success,double expected_parsed_value=0.0)83*993b0882SAndroid Build Coastguard Worker void TestParseDouble(const char *c_str, bool expected_parsing_success,
84*993b0882SAndroid Build Coastguard Worker double expected_parsed_value = 0.0) {
85*993b0882SAndroid Build Coastguard Worker double parsed_value = 0.0;
86*993b0882SAndroid Build Coastguard Worker EXPECT_EQ(expected_parsing_success, ParseDouble(c_str, &parsed_value));
87*993b0882SAndroid Build Coastguard Worker if (expected_parsing_success) {
88*993b0882SAndroid Build Coastguard Worker EXPECT_NEAR(expected_parsed_value, parsed_value, 0.00001);
89*993b0882SAndroid Build Coastguard Worker }
90*993b0882SAndroid Build Coastguard Worker }
91*993b0882SAndroid Build Coastguard Worker
TEST(ParseDoubleTest,Normal)92*993b0882SAndroid Build Coastguard Worker TEST(ParseDoubleTest, Normal) {
93*993b0882SAndroid Build Coastguard Worker TestParseDouble("2", true, 2.0);
94*993b0882SAndroid Build Coastguard Worker TestParseDouble("-357.023", true, -357.023);
95*993b0882SAndroid Build Coastguard Worker TestParseDouble("7.04", true, 7.04);
96*993b0882SAndroid Build Coastguard Worker TestParseDouble("+7.2", true, 7.2);
97*993b0882SAndroid Build Coastguard Worker TestParseDouble(" +7.236", true, 7.236);
98*993b0882SAndroid Build Coastguard Worker TestParseDouble("-23.4", true, -23.4);
99*993b0882SAndroid Build Coastguard Worker TestParseDouble(" -23.4", true, -23.4);
100*993b0882SAndroid Build Coastguard Worker }
101*993b0882SAndroid Build Coastguard Worker
TEST(ParseDoubleTest,ErrorCases)102*993b0882SAndroid Build Coastguard Worker TEST(ParseDoubleTest, ErrorCases) {
103*993b0882SAndroid Build Coastguard Worker TestParseDouble("", false);
104*993b0882SAndroid Build Coastguard Worker TestParseDouble(" ", false);
105*993b0882SAndroid Build Coastguard Worker TestParseDouble("not-a-number", false);
106*993b0882SAndroid Build Coastguard Worker TestParseDouble("23.5a", false);
107*993b0882SAndroid Build Coastguard Worker }
108*993b0882SAndroid Build Coastguard Worker } // namespace
109*993b0882SAndroid Build Coastguard Worker } // namespace libtextclassifier3
110