Page MenuHomeFreeBSD

D41512.id126331.diff
No OneTemporary

D41512.id126331.diff

diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c b/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c
--- a/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c
@@ -94,6 +94,12 @@
{ "01234567", 342391, 0, NULL },
{ "0123456789", 123456789, 10, NULL },
{ "0x75bcd15", 123456789, 0, NULL },
+#ifdef __FreeBSD__
+ { "0x", 0, 0, "x" },
+ { "0b111010110111100110100010101", 123456789, 0, NULL },
+ { "0b0123", 1, 0, "23" },
+ { "0b", 0, 0, "b" },
+#endif
};
long long int lli;
diff --git a/lib/libc/tests/stdio/Makefile b/lib/libc/tests/stdio/Makefile
--- a/lib/libc/tests/stdio/Makefile
+++ b/lib/libc/tests/stdio/Makefile
@@ -17,6 +17,8 @@
ATF_TESTS_C+= printbasic_test
ATF_TESTS_C+= printfloat_test
ATF_TESTS_C+= scanfloat_test
+ATF_TESTS_C+= snprintf_test
+ATF_TESTS_C+= sscanf_test
SRCS.fopen2_test= fopen_test.c
diff --git a/lib/libc/tests/stdio/snprintf_test.c b/lib/libc/tests/stdio/snprintf_test.c
new file mode 100644
--- /dev/null
+++ b/lib/libc/tests/stdio/snprintf_test.c
@@ -0,0 +1,138 @@
+/*-
+ * Copyright (c) 2023 Dag-Erling Smørgrav
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <assert.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#include <atf-c.h>
+
+#define SNPRINTF_TEST(output, format, ...) \
+ do { \
+ char buf[256]; \
+ assert(output == NULL || strlen(output) < sizeof(buf)); \
+ int ret = snprintf(buf, sizeof(buf), format, __VA_ARGS__); \
+ if (output == NULL) { \
+ ATF_CHECK_EQ(-1, ret); \
+ } else { \
+ ATF_CHECK_EQ(strlen(output), ret); \
+ if (ret > 0) { \
+ ATF_CHECK_STREQ(output, buf); \
+ } \
+ } \
+ } while (0)
+
+ATF_TC_WITHOUT_HEAD(snprintf_b);
+ATF_TC_BODY(snprintf_b, tc)
+{
+ SNPRINTF_TEST("0", "%b", 0);
+ SNPRINTF_TEST(" 0", "%12b", 0);
+ SNPRINTF_TEST("000000000000", "%012b", 0);
+ SNPRINTF_TEST("1", "%b", 1);
+ SNPRINTF_TEST(" 1", "%12b", 1);
+ SNPRINTF_TEST("000000000001", "%012b", 1);
+ SNPRINTF_TEST("1111111111111111111111111111111", "%b", INT_MAX);
+ SNPRINTF_TEST("0", "%#b", 0);
+ SNPRINTF_TEST(" 0", "%#12b", 0);
+ SNPRINTF_TEST("000000000000", "%#012b", 0);
+ SNPRINTF_TEST("0b1", "%#b", 1);
+ SNPRINTF_TEST(" 0b1", "%#12b", 1);
+ SNPRINTF_TEST("0b0000000001", "%#012b", 1);
+ SNPRINTF_TEST("0b1111111111111111111111111111111", "%#b", INT_MAX);
+}
+
+ATF_TC_WITHOUT_HEAD(snprintf_B);
+ATF_TC_BODY(snprintf_B, tc)
+{
+ SNPRINTF_TEST("0", "%B", 0);
+ SNPRINTF_TEST(" 0", "%12B", 0);
+ SNPRINTF_TEST("000000000000", "%012B", 0);
+ SNPRINTF_TEST("1", "%B", 1);
+ SNPRINTF_TEST(" 1", "%12B", 1);
+ SNPRINTF_TEST("000000000001", "%012B", 1);
+ SNPRINTF_TEST("1111111111111111111111111111111", "%B", INT_MAX);
+ SNPRINTF_TEST("0", "%#B", 0);
+ SNPRINTF_TEST(" 0", "%#12B", 0);
+ SNPRINTF_TEST("000000000000", "%#012B", 0);
+ SNPRINTF_TEST("0B1", "%#B", 1);
+ SNPRINTF_TEST(" 0B1", "%#12B", 1);
+ SNPRINTF_TEST("0B0000000001", "%#012B", 1);
+ SNPRINTF_TEST("0B1111111111111111111111111111111", "%#B", INT_MAX);
+}
+
+ATF_TC_WITHOUT_HEAD(snprintf_d);
+ATF_TC_BODY(snprintf_d, tc)
+{
+ SNPRINTF_TEST("0", "%d", 0);
+ SNPRINTF_TEST(" 0", "%12d", 0);
+ SNPRINTF_TEST("000000000000", "%012d", 0);
+ SNPRINTF_TEST("1", "%d", 1);
+ SNPRINTF_TEST(" 1", "%12d", 1);
+ SNPRINTF_TEST("000000000001", "%012d", 1);
+ SNPRINTF_TEST("2147483647", "%d", INT_MAX);
+ SNPRINTF_TEST(" 2147483647", "%12d", INT_MAX);
+ SNPRINTF_TEST("002147483647", "%012d", INT_MAX);
+ SNPRINTF_TEST("2,147,483,647", "%'d", INT_MAX);
+}
+
+ATF_TC_WITHOUT_HEAD(snprintf_x);
+ATF_TC_BODY(snprintf_x, tc)
+{
+ SNPRINTF_TEST("0", "%x", 0);
+ SNPRINTF_TEST(" 0", "%12x", 0);
+ SNPRINTF_TEST("000000000000", "%012x", 0);
+ SNPRINTF_TEST("1", "%x", 1);
+ SNPRINTF_TEST(" 1", "%12x", 1);
+ SNPRINTF_TEST("000000000001", "%012x", 1);
+ SNPRINTF_TEST("7fffffff", "%x", INT_MAX);
+ SNPRINTF_TEST(" 7fffffff", "%12x", INT_MAX);
+ SNPRINTF_TEST("00007fffffff", "%012x", INT_MAX);
+ SNPRINTF_TEST("0", "%#x", 0);
+ SNPRINTF_TEST(" 0", "%#12x", 0);
+ SNPRINTF_TEST("000000000000", "%#012x", 0);
+ SNPRINTF_TEST("0x1", "%#x", 1);
+ SNPRINTF_TEST(" 0x1", "%#12x", 1);
+ SNPRINTF_TEST("0x0000000001", "%#012x", 1);
+ SNPRINTF_TEST("0x7fffffff", "%#x", INT_MAX);
+ SNPRINTF_TEST(" 0x7fffffff", "%#12x", INT_MAX);
+ SNPRINTF_TEST("0x007fffffff", "%#012x", INT_MAX);
+}
+
+ATF_TC_WITHOUT_HEAD(snprintf_X);
+ATF_TC_BODY(snprintf_X, tc)
+{
+ SNPRINTF_TEST("0", "%X", 0);
+ SNPRINTF_TEST(" 0", "%12X", 0);
+ SNPRINTF_TEST("000000000000", "%012X", 0);
+ SNPRINTF_TEST("1", "%X", 1);
+ SNPRINTF_TEST(" 1", "%12X", 1);
+ SNPRINTF_TEST("000000000001", "%012X", 1);
+ SNPRINTF_TEST("7FFFFFFF", "%X", INT_MAX);
+ SNPRINTF_TEST(" 7FFFFFFF", "%12X", INT_MAX);
+ SNPRINTF_TEST("00007FFFFFFF", "%012X", INT_MAX);
+ SNPRINTF_TEST("0", "%#X", 0);
+ SNPRINTF_TEST(" 0", "%#12X", 0);
+ SNPRINTF_TEST("000000000000", "%#012X", 0);
+ SNPRINTF_TEST("0X1", "%#X", 1);
+ SNPRINTF_TEST(" 0X1", "%#12X", 1);
+ SNPRINTF_TEST("0X0000000001", "%#012X", 1);
+ SNPRINTF_TEST("0X7FFFFFFF", "%#X", INT_MAX);
+ SNPRINTF_TEST(" 0X7FFFFFFF", "%#12X", INT_MAX);
+ SNPRINTF_TEST("0X007FFFFFFF", "%#012X", INT_MAX);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ setlocale(LC_NUMERIC, "en_US.UTF-8");
+ ATF_TP_ADD_TC(tp, snprintf_b);
+ ATF_TP_ADD_TC(tp, snprintf_B);
+ ATF_TP_ADD_TC(tp, snprintf_d);
+ ATF_TP_ADD_TC(tp, snprintf_x);
+ ATF_TP_ADD_TC(tp, snprintf_X);
+ return (atf_no_error());
+}
diff --git a/lib/libc/tests/stdio/sscanf_test.c b/lib/libc/tests/stdio/sscanf_test.c
new file mode 100644
--- /dev/null
+++ b/lib/libc/tests/stdio/sscanf_test.c
@@ -0,0 +1,117 @@
+/*-
+ * Copyright (c) 2023 Dag-Erling Smørgrav
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <assert.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#include <atf-c.h>
+
+#define SSCANF_TEST(string, format, value, rest) \
+ do { \
+ int len, num, ret; \
+ ret = sscanf(string, format "%n", &num, &len); \
+ ATF_CHECK_EQ(1, ret); \
+ if (ret == 1) { \
+ ATF_CHECK_EQ(value, num); \
+ ATF_CHECK_STREQ(rest, string + len); \
+ } \
+ } while (0)
+
+ATF_TC_WITHOUT_HEAD(sscanf_b);
+ATF_TC_BODY(sscanf_b, tc)
+{
+ SSCANF_TEST("0", "%b", 0, "");
+ SSCANF_TEST("1", "%b", 1, "");
+ SSCANF_TEST("01", "%b", 1, "");
+ SSCANF_TEST("012", "%b", 1, "2");
+ SSCANF_TEST("0b0", "%b", 0, "");
+ SSCANF_TEST("0b1", "%b", 1, "");
+ SSCANF_TEST("0b01", "%b", 1, "");
+ SSCANF_TEST("0b012", "%b", 1, "2");
+ SSCANF_TEST("0B0", "%b", 0, "");
+ SSCANF_TEST("0B1", "%b", 1, "");
+ SSCANF_TEST("0B01", "%b", 1, "");
+ SSCANF_TEST("0B012", "%b", 1, "2");
+ SSCANF_TEST("0b", "%b", 0, "b");
+ SSCANF_TEST("0B", "%b", 0, "B");
+}
+
+ATF_TC_WITHOUT_HEAD(sscanf_x);
+ATF_TC_BODY(sscanf_x, tc)
+{
+ SSCANF_TEST("0", "%x", 0, "");
+ SSCANF_TEST("1", "%x", 1, "");
+ SSCANF_TEST("a", "%x", 10, "");
+ SSCANF_TEST("f", "%x", 15, "");
+ SSCANF_TEST("0b", "%x", 11, "");
+ SSCANF_TEST("0b0", "%x", 176, "");
+ SSCANF_TEST("7fffffff", "%x", INT_MAX, "");
+ SSCANF_TEST("A", "%x", 10, "");
+ SSCANF_TEST("F", "%x", 15, "");
+ SSCANF_TEST("0B", "%X", 11, "");
+ SSCANF_TEST("0B0", "%x", 176, "");
+ SSCANF_TEST("7FFFFFFF", "%x", INT_MAX, "");
+ SSCANF_TEST("80000000", "%x", INT_MIN, "");
+ SSCANF_TEST("0x0", "%x", 0, "");
+ SSCANF_TEST("0x1", "%x", 1, "");
+ SSCANF_TEST("0xa", "%x", 10, "");
+ SSCANF_TEST("0xf", "%x", 15, "");
+ SSCANF_TEST("0x7fffffff", "%x", INT_MAX, "");
+ SSCANF_TEST("0x80000000", "%x", INT_MIN, "");
+ SSCANF_TEST("0x", "%x", 0, "x");
+ SSCANF_TEST("0X0", "%x", 0, "");
+ SSCANF_TEST("0X1", "%x", 1, "");
+ SSCANF_TEST("0Xa", "%x", 10, "");
+ SSCANF_TEST("0Xf", "%x", 15, "");
+ SSCANF_TEST("0X7FFFFFFF", "%x", INT_MAX, "");
+ SSCANF_TEST("0X80000000", "%x", INT_MIN, "");
+ SSCANF_TEST("0X", "%x", 0, "X");
+}
+
+ATF_TC_WITHOUT_HEAD(sscanf_i);
+ATF_TC_BODY(sscanf_i, tc)
+{
+ SSCANF_TEST("0", "%i", 0, "");
+ SSCANF_TEST("01", "%i", 1, "");
+ SSCANF_TEST("07", "%i", 7, "");
+ SSCANF_TEST("08", "%i", 0, "8");
+ SSCANF_TEST("0b0", "%i", 0, "");
+ SSCANF_TEST("0b1", "%i", 1, "");
+ SSCANF_TEST("0b01", "%i", 1, "");
+ SSCANF_TEST("0b012", "%i", 1, "2");
+ SSCANF_TEST("0B0", "%i", 0, "");
+ SSCANF_TEST("0B1", "%i", 1, "");
+ SSCANF_TEST("0B01", "%i", 1, "");
+ SSCANF_TEST("0B012", "%i", 1, "2");
+ SSCANF_TEST("0b", "%i", 0, "b");
+ SSCANF_TEST("0B", "%i", 0, "B");
+ SSCANF_TEST("0x0", "%i", 0, "");
+ SSCANF_TEST("0x1", "%i", 1, "");
+ SSCANF_TEST("0xa", "%i", 10, "");
+ SSCANF_TEST("0xf", "%i", 15, "");
+ SSCANF_TEST("0x7fffffff", "%i", INT_MAX, "");
+ SSCANF_TEST("0x80000000", "%i", INT_MIN, "");
+ SSCANF_TEST("0x", "%i", 0, "x");
+ SSCANF_TEST("0X0", "%i", 0, "");
+ SSCANF_TEST("0X1", "%i", 1, "");
+ SSCANF_TEST("0Xa", "%i", 10, "");
+ SSCANF_TEST("0Xf", "%i", 15, "");
+ SSCANF_TEST("0X7FFFFFFF", "%i", INT_MAX, "");
+ SSCANF_TEST("0X80000000", "%i", INT_MIN, "");
+ SSCANF_TEST("0X", "%i", 0, "X");
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ setlocale(LC_NUMERIC, "en_US.UTF-8");
+ ATF_TP_ADD_TC(tp, sscanf_b);
+ ATF_TP_ADD_TC(tp, sscanf_x);
+ ATF_TP_ADD_TC(tp, sscanf_i);
+ return (atf_no_error());
+}

File Metadata

Mime Type
text/plain
Expires
Mon, Oct 13, 7:22 AM (12 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23664095
Default Alt Text
D41512.id126331.diff (9 KB)

Event Timeline