57 lines
1.8 KiB
C++
57 lines
1.8 KiB
C++
//===-- Unittests for shared string to number functions -------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "shared/str_to_float.h"
|
|
#include "shared/str_to_integer.h"
|
|
#include "test/UnitTest/Test.h"
|
|
|
|
namespace LIBC_NAMESPACE_DECL {
|
|
|
|
TEST(LlvmLibcSharedStrToNumTest, IntegerTests) {
|
|
{
|
|
auto result = shared::strtointeger<int>("123", 10);
|
|
EXPECT_EQ(result.value, 123);
|
|
EXPECT_EQ(result.parsed_len, ptrdiff_t(3));
|
|
EXPECT_EQ(result.error, 0);
|
|
}
|
|
{
|
|
auto result = shared::strtointeger<int>(" -0x123", 0);
|
|
EXPECT_EQ(result.value, -0x123);
|
|
EXPECT_EQ(result.parsed_len, ptrdiff_t(8));
|
|
EXPECT_EQ(result.error, 0);
|
|
}
|
|
}
|
|
|
|
TEST(LlvmLibcSharedStrToNumTest, FloatTests) {
|
|
{
|
|
// 1.25 = 1.01b = 5 * 2^-2
|
|
shared::ExpandedFloat<double> input;
|
|
input.mantissa = 5;
|
|
input.exponent = -2;
|
|
auto result = shared::binary_exp_to_float<double>(
|
|
input, false, shared::RoundDirection::Nearest);
|
|
EXPECT_EQ(result.num.mantissa, uint64_t(0x4000000000000));
|
|
EXPECT_EQ(result.num.exponent, 1023);
|
|
EXPECT_EQ(result.error, 0);
|
|
}
|
|
{
|
|
// 1.25 = 125 * 10^-2
|
|
shared::ExpandedFloat<double> input;
|
|
input.mantissa = 125;
|
|
input.exponent = -2;
|
|
const char *str = "1.25";
|
|
auto result = shared::decimal_exp_to_float<double>(
|
|
input, false, shared::RoundDirection::Nearest, str);
|
|
EXPECT_EQ(result.num.mantissa, uint64_t(0x14000000000000));
|
|
EXPECT_EQ(result.num.exponent, 1023);
|
|
EXPECT_EQ(result.error, 0);
|
|
}
|
|
}
|
|
|
|
} // namespace LIBC_NAMESPACE_DECL
|