/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "util/strings/numbers.h"
#include "util/base/integral_types.h"
#include "gtest/gtest.h"
namespace libtextclassifier {
namespace {
void TestParseInt32(const char *c_str, bool expected_parsing_success,
int32 expected_parsed_value = 0) {
int32 parsed_value = 0;
EXPECT_EQ(expected_parsing_success, ParseInt32(c_str, &parsed_value));
if (expected_parsing_success) {
EXPECT_EQ(expected_parsed_value, parsed_value);
}
}
TEST(ParseInt32Test, Normal) {
TestParseInt32("2", true, 2);
TestParseInt32("-357", true, -357);
TestParseInt32("7", true, 7);
TestParseInt32("+7", true, 7);
TestParseInt32(" +7", true, 7);
TestParseInt32("-23", true, -23);
TestParseInt32(" -23", true, -23);
}
TEST(ParseInt32Test, ErrorCases) {
TestParseInt32("", false);
TestParseInt32(" ", false);
TestParseInt32("not-a-number", false);
TestParseInt32("123a", false);
}
void TestParseInt64(const char *c_str, bool expected_parsing_success,
int64 expected_parsed_value = 0) {
int64 parsed_value = 0;
EXPECT_EQ(expected_parsing_success, ParseInt64(c_str, &parsed_value));
if (expected_parsing_success) {
EXPECT_EQ(expected_parsed_value, parsed_value);
}
}
TEST(ParseInt64Test, Normal) {
TestParseInt64("2", true, 2);
TestParseInt64("-357", true, -357);
TestParseInt64("7", true, 7);
TestParseInt64("+7", true, 7);
TestParseInt64(" +7", true, 7);
TestParseInt64("-23", true, -23);
TestParseInt64(" -23", true, -23);
}
TEST(ParseInt64Test, ErrorCases) {
TestParseInt64("", false);
TestParseInt64(" ", false);
TestParseInt64("not-a-number", false);
TestParseInt64("23z", false);
}
void TestParseDouble(const char *c_str, bool expected_parsing_success,
double expected_parsed_value = 0.0) {
double parsed_value = 0.0;
EXPECT_EQ(expected_parsing_success, ParseDouble(c_str, &parsed_value));
if (expected_parsing_success) {
EXPECT_NEAR(expected_parsed_value, parsed_value, 0.00001);
}
}
TEST(ParseDoubleTest, Normal) {
TestParseDouble("2", true, 2.0);
TestParseDouble("-357.023", true, -357.023);
TestParseDouble("7.04", true, 7.04);
TestParseDouble("+7.2", true, 7.2);
TestParseDouble(" +7.236", true, 7.236);
TestParseDouble("-23.4", true, -23.4);
TestParseDouble(" -23.4", true, -23.4);
}
TEST(ParseDoubleTest, ErrorCases) {
TestParseDouble("", false);
TestParseDouble(" ", false);
TestParseDouble("not-a-number", false);
TestParseDouble("23.5a", false);
}
} // namespace
} // namespace libtextclassifier