Path: blob/main/lib/libc/tests/stdio/swprintf_test.c
39530 views
/*-1* Copyright (c) 2023 Dag-Erling Smørgrav2*3* SPDX-License-Identifier: BSD-2-Clause4*/56#include <assert.h>7#include <limits.h>8#include <locale.h>9#include <stdint.h>10#include <stdio.h>11#include <wchar.h>1213#include <atf-c.h>1415#ifndef nitems16#define nitems(a) (sizeof(a) / sizeof(a[0]))17#endif1819#define SWPRINTF_TEST(output, format, ...) \20do { \21wchar_t buf[256]; \22assert(wcslen(L##output) < nitems(buf)); \23int ret = swprintf(buf, nitems(buf), L##format, \24__VA_ARGS__); \25ATF_CHECK_EQ(wcslen(L##output), ret); \26if (ret > 0) { \27ATF_CHECK_EQ(0, wcscmp(L##output, buf)); \28} \29} while (0)3031ATF_TC_WITHOUT_HEAD(swprintf_b);32ATF_TC_BODY(swprintf_b, tc)33{34SWPRINTF_TEST("0", "%b", 0);35SWPRINTF_TEST(" 0", "%12b", 0);36SWPRINTF_TEST("000000000000", "%012b", 0);37SWPRINTF_TEST("1", "%b", 1);38SWPRINTF_TEST(" 1", "%12b", 1);39SWPRINTF_TEST("000000000001", "%012b", 1);40SWPRINTF_TEST("1111111111111111111111111111111", "%b", INT_MAX);41SWPRINTF_TEST("0", "%#b", 0);42SWPRINTF_TEST(" 0", "%#12b", 0);43SWPRINTF_TEST("000000000000", "%#012b", 0);44SWPRINTF_TEST("0b1", "%#b", 1);45SWPRINTF_TEST(" 0b1", "%#12b", 1);46SWPRINTF_TEST("0b0000000001", "%#012b", 1);47SWPRINTF_TEST("0b1111111111111111111111111111111", "%#b", INT_MAX);48}4950ATF_TC_WITHOUT_HEAD(swprintf_B);51ATF_TC_BODY(swprintf_B, tc)52{53SWPRINTF_TEST("0", "%B", 0);54SWPRINTF_TEST(" 0", "%12B", 0);55SWPRINTF_TEST("000000000000", "%012B", 0);56SWPRINTF_TEST("1", "%B", 1);57SWPRINTF_TEST(" 1", "%12B", 1);58SWPRINTF_TEST("000000000001", "%012B", 1);59SWPRINTF_TEST("1111111111111111111111111111111", "%B", INT_MAX);60SWPRINTF_TEST("0", "%#B", 0);61SWPRINTF_TEST(" 0", "%#12B", 0);62SWPRINTF_TEST("000000000000", "%#012B", 0);63SWPRINTF_TEST("0B1", "%#B", 1);64SWPRINTF_TEST(" 0B1", "%#12B", 1);65SWPRINTF_TEST("0B0000000001", "%#012B", 1);66SWPRINTF_TEST("0B1111111111111111111111111111111", "%#B", INT_MAX);67}6869ATF_TC_WITHOUT_HEAD(swprintf_d);70ATF_TC_BODY(swprintf_d, tc)71{72SWPRINTF_TEST("0", "%d", 0);73SWPRINTF_TEST(" 0", "%12d", 0);74SWPRINTF_TEST("000000000000", "%012d", 0);75SWPRINTF_TEST("1", "%d", 1);76SWPRINTF_TEST(" 1", "%12d", 1);77SWPRINTF_TEST("000000000001", "%012d", 1);78SWPRINTF_TEST("2147483647", "%d", INT_MAX);79SWPRINTF_TEST(" 2147483647", "%12d", INT_MAX);80SWPRINTF_TEST("002147483647", "%012d", INT_MAX);81SWPRINTF_TEST("2,147,483,647", "%'d", INT_MAX);82}8384ATF_TC_WITHOUT_HEAD(swprintf_x);85ATF_TC_BODY(swprintf_x, tc)86{87SWPRINTF_TEST("0", "%x", 0);88SWPRINTF_TEST(" 0", "%12x", 0);89SWPRINTF_TEST("000000000000", "%012x", 0);90SWPRINTF_TEST("1", "%x", 1);91SWPRINTF_TEST(" 1", "%12x", 1);92SWPRINTF_TEST("000000000001", "%012x", 1);93SWPRINTF_TEST("7fffffff", "%x", INT_MAX);94SWPRINTF_TEST(" 7fffffff", "%12x", INT_MAX);95SWPRINTF_TEST("00007fffffff", "%012x", INT_MAX);96SWPRINTF_TEST("0", "%#x", 0);97SWPRINTF_TEST(" 0", "%#12x", 0);98SWPRINTF_TEST("000000000000", "%#012x", 0);99SWPRINTF_TEST("0x1", "%#x", 1);100SWPRINTF_TEST(" 0x1", "%#12x", 1);101SWPRINTF_TEST("0x0000000001", "%#012x", 1);102SWPRINTF_TEST("0x7fffffff", "%#x", INT_MAX);103SWPRINTF_TEST(" 0x7fffffff", "%#12x", INT_MAX);104SWPRINTF_TEST("0x007fffffff", "%#012x", INT_MAX);105}106107ATF_TC_WITHOUT_HEAD(swprintf_X);108ATF_TC_BODY(swprintf_X, tc)109{110SWPRINTF_TEST("0", "%X", 0);111SWPRINTF_TEST(" 0", "%12X", 0);112SWPRINTF_TEST("000000000000", "%012X", 0);113SWPRINTF_TEST("1", "%X", 1);114SWPRINTF_TEST(" 1", "%12X", 1);115SWPRINTF_TEST("000000000001", "%012X", 1);116SWPRINTF_TEST("7FFFFFFF", "%X", INT_MAX);117SWPRINTF_TEST(" 7FFFFFFF", "%12X", INT_MAX);118SWPRINTF_TEST("00007FFFFFFF", "%012X", INT_MAX);119SWPRINTF_TEST("0", "%#X", 0);120SWPRINTF_TEST(" 0", "%#12X", 0);121SWPRINTF_TEST("000000000000", "%#012X", 0);122SWPRINTF_TEST("0X1", "%#X", 1);123SWPRINTF_TEST(" 0X1", "%#12X", 1);124SWPRINTF_TEST("0X0000000001", "%#012X", 1);125SWPRINTF_TEST("0X7FFFFFFF", "%#X", INT_MAX);126SWPRINTF_TEST(" 0X7FFFFFFF", "%#12X", INT_MAX);127SWPRINTF_TEST("0X007FFFFFFF", "%#012X", INT_MAX);128}129130ATF_TC_WITHOUT_HEAD(swprintf_wN);131ATF_TC_BODY(swprintf_wN, tc)132{133SWPRINTF_TEST("0", "%w8d", (int8_t)0);134SWPRINTF_TEST("-128", "%w8d", (int8_t)SCHAR_MIN);135SWPRINTF_TEST("127", "%w8d", (int8_t)SCHAR_MAX);136SWPRINTF_TEST("0", "%w8u", (uint8_t)0);137SWPRINTF_TEST("255", "%w8u", (uint8_t)UCHAR_MAX);138139SWPRINTF_TEST("0", "%w16d", (int16_t)0);140SWPRINTF_TEST("-32768", "%w16d", (int16_t)SHRT_MIN);141SWPRINTF_TEST("32767", "%w16d", (int16_t)SHRT_MAX);142SWPRINTF_TEST("0", "%w16u", (uint16_t)0);143SWPRINTF_TEST("65535", "%w16u", (uint16_t)USHRT_MAX);144145SWPRINTF_TEST("0", "%w32d", (int32_t)0);146SWPRINTF_TEST("-2147483648", "%w32d", (int32_t)INT_MIN);147SWPRINTF_TEST("2147483647", "%w32d", (int32_t)INT_MAX);148SWPRINTF_TEST("0", "%w32u", (uint32_t)0);149SWPRINTF_TEST("4294967295", "%w32u", (uint32_t)UINT_MAX);150151SWPRINTF_TEST("0", "%w64d", (int64_t)0);152SWPRINTF_TEST("-9223372036854775808", "%w64d", (int64_t)LLONG_MIN);153SWPRINTF_TEST("9223372036854775807", "%w64d", (int64_t)LLONG_MAX);154SWPRINTF_TEST("0", "%w64u", (uint64_t)0);155SWPRINTF_TEST("18446744073709551615", "%w64u", (uint64_t)ULLONG_MAX);156157SWPRINTF_TEST("wd", "%wd", 0);158SWPRINTF_TEST("w1d", "%w1d", 0);159SWPRINTF_TEST("w128d", "%w128d", 0);160}161162ATF_TC_WITHOUT_HEAD(swprintf_wfN);163ATF_TC_BODY(swprintf_wfN, tc)164{165SWPRINTF_TEST("0", "%wf8d", (int_fast8_t)0);166SWPRINTF_TEST("-2147483648", "%wf8d", (int_fast8_t)INT_MIN);167SWPRINTF_TEST("2147483647", "%wf8d", (int_fast8_t)INT_MAX);168SWPRINTF_TEST("0", "%wf8u", (uint8_t)0);169SWPRINTF_TEST("4294967295", "%wf8u", (uint_fast8_t)UINT_MAX);170171SWPRINTF_TEST("0", "%wf16d", (int_fast16_t)0);172SWPRINTF_TEST("-2147483648", "%wf16d", (int_fast16_t)INT_MIN);173SWPRINTF_TEST("2147483647", "%wf16d", (int_fast16_t)INT_MAX);174SWPRINTF_TEST("0", "%wf16u", (uint16_t)0);175SWPRINTF_TEST("4294967295", "%wf16u", (uint_fast16_t)UINT_MAX);176177SWPRINTF_TEST("0", "%wf32d", (int_fast32_t)0);178SWPRINTF_TEST("-2147483648", "%wf32d", (int_fast32_t)INT_MIN);179SWPRINTF_TEST("2147483647", "%wf32d", (int_fast32_t)INT_MAX);180SWPRINTF_TEST("0", "%wf32u", (uint32_t)0);181SWPRINTF_TEST("4294967295", "%wf32u", (uint_fast32_t)UINT_MAX);182183SWPRINTF_TEST("0", "%wf64d", (int_fast64_t)0);184SWPRINTF_TEST("-9223372036854775808", "%wf64d", (int_fast64_t)LLONG_MIN);185SWPRINTF_TEST("9223372036854775807", "%wf64d", (int_fast64_t)LLONG_MAX);186SWPRINTF_TEST("0", "%wf64u", (uint64_t)0);187SWPRINTF_TEST("18446744073709551615", "%wf64u", (uint_fast64_t)ULLONG_MAX);188189SWPRINTF_TEST("wfd", "%wfd", 0);190SWPRINTF_TEST("wf1d", "%wf1d", 0);191SWPRINTF_TEST("wf128d", "%wf128d", 0);192}193194ATF_TP_ADD_TCS(tp)195{196setlocale(LC_NUMERIC, "en_US.UTF-8");197ATF_TP_ADD_TC(tp, swprintf_b);198ATF_TP_ADD_TC(tp, swprintf_B);199ATF_TP_ADD_TC(tp, swprintf_d);200ATF_TP_ADD_TC(tp, swprintf_x);201ATF_TP_ADD_TC(tp, swprintf_X);202ATF_TP_ADD_TC(tp, swprintf_wN);203ATF_TP_ADD_TC(tp, swprintf_wfN);204return (atf_no_error());205}206207208