187c01607SMichael Jones //===-- Unittests for atof ------------------------------------------------===//
287c01607SMichael Jones //
387c01607SMichael Jones // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
487c01607SMichael Jones // See https://llvm.org/LICENSE.txt for license information.
587c01607SMichael Jones // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
687c01607SMichael Jones //
787c01607SMichael Jones //===----------------------------------------------------------------------===//
887c01607SMichael Jones 
987c01607SMichael Jones #include "src/__support/FPUtil/FPBits.h"
1087c01607SMichael Jones #include "src/stdlib/atof.h"
1187c01607SMichael Jones 
1287c01607SMichael Jones #include "utils/UnitTest/Test.h"
1387c01607SMichael Jones 
1487c01607SMichael Jones #include <errno.h>
1587c01607SMichael Jones #include <limits.h>
1687c01607SMichael Jones #include <stddef.h>
1787c01607SMichael Jones 
1887c01607SMichael Jones // This is just a simple test to make sure that this function works at all. It's
1987c01607SMichael Jones // functionally identical to strtod so the bulk of the testing is there.
TEST(LlvmLibcAToFTest,SimpleTest)2087c01607SMichael Jones TEST(LlvmLibcAToFTest, SimpleTest) {
21*25226f3eSMichael Jones   __llvm_libc::fputil::FPBits<double> expected_fp =
2287c01607SMichael Jones       __llvm_libc::fputil::FPBits<double>(uint64_t(0x405ec00000000000));
2387c01607SMichael Jones 
2487c01607SMichael Jones   errno = 0;
2587c01607SMichael Jones   double result = __llvm_libc::atof("123");
2687c01607SMichael Jones 
27*25226f3eSMichael Jones   __llvm_libc::fputil::FPBits<double> actual_fp =
2887c01607SMichael Jones       __llvm_libc::fputil::FPBits<double>(result);
2987c01607SMichael Jones 
30*25226f3eSMichael Jones   EXPECT_EQ(actual_fp.bits, expected_fp.bits);
31*25226f3eSMichael Jones   EXPECT_EQ(actual_fp.get_sign(), expected_fp.get_sign());
32*25226f3eSMichael Jones   EXPECT_EQ(actual_fp.get_exponent(), expected_fp.get_exponent());
33*25226f3eSMichael Jones   EXPECT_EQ(actual_fp.get_mantissa(), expected_fp.get_mantissa());
3487c01607SMichael Jones   EXPECT_EQ(errno, 0);
3587c01607SMichael Jones }
3687c01607SMichael Jones 
TEST(LlvmLibcAToFTest,FailedParsingTest)3787c01607SMichael Jones TEST(LlvmLibcAToFTest, FailedParsingTest) {
38*25226f3eSMichael Jones   __llvm_libc::fputil::FPBits<double> expected_fp =
3987c01607SMichael Jones       __llvm_libc::fputil::FPBits<double>(uint64_t(0));
4087c01607SMichael Jones 
4187c01607SMichael Jones   errno = 0;
4287c01607SMichael Jones   double result = __llvm_libc::atof("???");
4387c01607SMichael Jones 
44*25226f3eSMichael Jones   __llvm_libc::fputil::FPBits<double> actual_fp =
4587c01607SMichael Jones       __llvm_libc::fputil::FPBits<double>(result);
4687c01607SMichael Jones 
47*25226f3eSMichael Jones   EXPECT_EQ(actual_fp.bits, expected_fp.bits);
48*25226f3eSMichael Jones   EXPECT_EQ(actual_fp.get_sign(), expected_fp.get_sign());
49*25226f3eSMichael Jones   EXPECT_EQ(actual_fp.get_exponent(), expected_fp.get_exponent());
50*25226f3eSMichael Jones   EXPECT_EQ(actual_fp.get_mantissa(), expected_fp.get_mantissa());
5187c01607SMichael Jones   EXPECT_EQ(errno, 0);
5287c01607SMichael Jones }
53