blob: c5489f5f3af2acc1a433c8baab9785c8f9263ab6 [file] [log] [blame]
//===-- Unittests for strfromf --------------------------------------------===//
//
// 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 "src/stdlib/strfromf.h"
#include "test/UnitTest/Test.h"
TEST(LlvmLibcStrfromfTest, DecimalFloatFormat) {
char buff[100];
int written;
written = LIBC_NAMESPACE::strfromf(buff, 16, "%f", 1.0);
EXPECT_EQ(written, 8);
ASSERT_STREQ(buff, "1.000000");
written = LIBC_NAMESPACE::strfromf(buff, 20, "%f", 1234567890.0);
EXPECT_EQ(written, 17);
ASSERT_STREQ(buff, "1234567936.000000");
written = LIBC_NAMESPACE::strfromf(buff, 5, "%f", 1234567890.0);
EXPECT_EQ(written, 17);
ASSERT_STREQ(buff, "1234");
written = LIBC_NAMESPACE::strfromf(buff, 67, "%.3f", 1.0);
EXPECT_EQ(written, 5);
ASSERT_STREQ(buff, "1.000");
written = LIBC_NAMESPACE::strfromf(buff, 20, "%1f", 1234567890.0);
EXPECT_EQ(written, 3);
ASSERT_STREQ(buff, "%1f");
}
TEST(LlvmLibcStrfromfTest, HexExpFloatFormat) {
char buff[100];
int written;
written = LIBC_NAMESPACE::strfromf(buff, 0, "%a", 1234567890.0);
EXPECT_EQ(written, 14);
written = LIBC_NAMESPACE::strfromf(buff, 20, "%a", 1234567890.0);
EXPECT_EQ(written, 14);
ASSERT_STREQ(buff, "0x1.26580cp+30");
written = LIBC_NAMESPACE::strfromf(buff, 20, "%A", 1234567890.0);
EXPECT_EQ(written, 14);
ASSERT_STREQ(buff, "0X1.26580CP+30");
}
TEST(LlvmLibcStrfromfTest, DecimalExpFloatFormat) {
char buff[100];
int written;
written = LIBC_NAMESPACE::strfromf(buff, 20, "%.9e", 1234567890.0);
EXPECT_EQ(written, 15);
ASSERT_STREQ(buff, "1.234567936e+09");
written = LIBC_NAMESPACE::strfromf(buff, 20, "%.9E", 1234567890.0);
EXPECT_EQ(written, 15);
ASSERT_STREQ(buff, "1.234567936E+09");
}
TEST(LlvmLibcStrfromfTest, AutoDecimalFloatFormat) {
char buff[100];
int written;
written = LIBC_NAMESPACE::strfromf(buff, 20, "%.9g", 1234567890.0);
EXPECT_EQ(written, 14);
ASSERT_STREQ(buff, "1.23456794e+09");
written = LIBC_NAMESPACE::strfromf(buff, 20, "%.9G", 1234567890.0);
EXPECT_EQ(written, 14);
ASSERT_STREQ(buff, "1.23456794E+09");
written = LIBC_NAMESPACE::strfromf(buff, 0, "%G", 1.0);
EXPECT_EQ(written, 1);
}
TEST(LlvmLibcStrfromfTest, ImproperFormatString) {
char buff[100];
int retval;
retval = LIBC_NAMESPACE::strfromf(
buff, 37, "A simple string with no conversions.", 1.0);
EXPECT_EQ(retval, 36);
ASSERT_STREQ(buff, "A simple string with no conversions.");
retval = LIBC_NAMESPACE::strfromf(
buff, 37, "%A simple string with one conversion, should overwrite.", 1.0);
EXPECT_EQ(retval, 6);
ASSERT_STREQ(buff, "0X1P+0");
retval = LIBC_NAMESPACE::strfromf(buff, 74,
"A simple string with one conversion in %A "
"between, writes string as it is",
1.0);
EXPECT_EQ(retval, 73);
ASSERT_STREQ(buff, "A simple string with one conversion in %A between, "
"writes string as it is");
retval = LIBC_NAMESPACE::strfromf(buff, 36,
"A simple string with one conversion", 1.0);
EXPECT_EQ(retval, 35);
ASSERT_STREQ(buff, "A simple string with one conversion");
}