xref: /aosp_15_r20/system/libbase/parsedouble_test.cpp (revision 8f0ba417480079999ba552f1087ae592091b9d02)
1*8f0ba417SAndroid Build Coastguard Worker /*
2*8f0ba417SAndroid Build Coastguard Worker  * Copyright (C) 2016 The Android Open Source Project
3*8f0ba417SAndroid Build Coastguard Worker  *
4*8f0ba417SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*8f0ba417SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*8f0ba417SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*8f0ba417SAndroid Build Coastguard Worker  *
8*8f0ba417SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*8f0ba417SAndroid Build Coastguard Worker  *
10*8f0ba417SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*8f0ba417SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*8f0ba417SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*8f0ba417SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*8f0ba417SAndroid Build Coastguard Worker  * limitations under the License.
15*8f0ba417SAndroid Build Coastguard Worker  */
16*8f0ba417SAndroid Build Coastguard Worker 
17*8f0ba417SAndroid Build Coastguard Worker #include "android-base/parsedouble.h"
18*8f0ba417SAndroid Build Coastguard Worker 
19*8f0ba417SAndroid Build Coastguard Worker #include <gtest/gtest.h>
20*8f0ba417SAndroid Build Coastguard Worker 
TEST(parsedouble,double_smoke)21*8f0ba417SAndroid Build Coastguard Worker TEST(parsedouble, double_smoke) {
22*8f0ba417SAndroid Build Coastguard Worker   double d;
23*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseDouble("", &d));
24*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseDouble("x", &d));
25*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseDouble("123.4x", &d));
26*8f0ba417SAndroid Build Coastguard Worker 
27*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseDouble("123.4", &d));
28*8f0ba417SAndroid Build Coastguard Worker   ASSERT_DOUBLE_EQ(123.4, d);
29*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseDouble("-123.4", &d));
30*8f0ba417SAndroid Build Coastguard Worker   ASSERT_DOUBLE_EQ(-123.4, d);
31*8f0ba417SAndroid Build Coastguard Worker 
32*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseDouble("0", &d, 0.0));
33*8f0ba417SAndroid Build Coastguard Worker   ASSERT_DOUBLE_EQ(0.0, d);
34*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseDouble("0", &d, 1e-9));
35*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseDouble("3.0", &d, -1.0, 2.0));
36*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseDouble("1.0", &d, 0.0, 2.0));
37*8f0ba417SAndroid Build Coastguard Worker   ASSERT_DOUBLE_EQ(1.0, d);
38*8f0ba417SAndroid Build Coastguard Worker 
39*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseDouble("123.4x", nullptr));
40*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseDouble("-123.4", nullptr));
41*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseDouble("3.0", nullptr, -1.0, 2.0));
42*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseDouble("1.0", nullptr, 0.0, 2.0));
43*8f0ba417SAndroid Build Coastguard Worker }
44*8f0ba417SAndroid Build Coastguard Worker 
TEST(parsedouble,float_smoke)45*8f0ba417SAndroid Build Coastguard Worker TEST(parsedouble, float_smoke) {
46*8f0ba417SAndroid Build Coastguard Worker   float f;
47*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseFloat("", &f));
48*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseFloat("x", &f));
49*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseFloat("123.4x", &f));
50*8f0ba417SAndroid Build Coastguard Worker 
51*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseFloat("123.4", &f));
52*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FLOAT_EQ(123.4, f);
53*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseFloat("-123.4", &f));
54*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FLOAT_EQ(-123.4, f);
55*8f0ba417SAndroid Build Coastguard Worker 
56*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseFloat("0", &f, 0.0));
57*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FLOAT_EQ(0.0, f);
58*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseFloat("0", &f, 1e-9));
59*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseFloat("3.0", &f, -1.0, 2.0));
60*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseFloat("1.0", &f, 0.0, 2.0));
61*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FLOAT_EQ(1.0, f);
62*8f0ba417SAndroid Build Coastguard Worker 
63*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseFloat("123.4x", nullptr));
64*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseFloat("-123.4", nullptr));
65*8f0ba417SAndroid Build Coastguard Worker   ASSERT_FALSE(android::base::ParseFloat("3.0", nullptr, -1.0, 2.0));
66*8f0ba417SAndroid Build Coastguard Worker   ASSERT_TRUE(android::base::ParseFloat("1.0", nullptr, 0.0, 2.0));
67*8f0ba417SAndroid Build Coastguard Worker }
68