1*3e1cddcbSrillig /* $NetBSD: t_uchar.c,v 1.3 2024/10/14 06:02:14 rillig Exp $ */ 2cc1e5796Sriastradh 3cc1e5796Sriastradh /*- 4cc1e5796Sriastradh * Copyright (c) 2024 The NetBSD Foundation, Inc. 5cc1e5796Sriastradh * All rights reserved. 6cc1e5796Sriastradh * 7cc1e5796Sriastradh * Redistribution and use in source and binary forms, with or without 8cc1e5796Sriastradh * modification, are permitted provided that the following conditions 9cc1e5796Sriastradh * are met: 10cc1e5796Sriastradh * 1. Redistributions of source code must retain the above copyright 11cc1e5796Sriastradh * notice, this list of conditions and the following disclaimer. 12cc1e5796Sriastradh * 2. Redistributions in binary form must reproduce the above copyright 13cc1e5796Sriastradh * notice, this list of conditions and the following disclaimer in the 14cc1e5796Sriastradh * documentation and/or other materials provided with the distribution. 15cc1e5796Sriastradh * 16cc1e5796Sriastradh * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17cc1e5796Sriastradh * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18cc1e5796Sriastradh * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19cc1e5796Sriastradh * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20cc1e5796Sriastradh * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21cc1e5796Sriastradh * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22cc1e5796Sriastradh * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23cc1e5796Sriastradh * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24cc1e5796Sriastradh * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25cc1e5796Sriastradh * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26cc1e5796Sriastradh * POSSIBILITY OF SUCH DAMAGE. 27cc1e5796Sriastradh */ 28cc1e5796Sriastradh 29cc1e5796Sriastradh /* 30cc1e5796Sriastradh * Include <uchar.h> first to verify it declares everything we need. 31cc1e5796Sriastradh */ 32cc1e5796Sriastradh #include <uchar.h> 33cc1e5796Sriastradh typedef mbstate_t nbtest_mbstate_t; 34cc1e5796Sriastradh typedef size_t nbtest_size_t; 355269523aSriastradh typedef char8_t nbtest_char8_t; 36cc1e5796Sriastradh typedef char16_t nbtest_char16_t; 37cc1e5796Sriastradh typedef char32_t nbtest_char32_t; 385269523aSriastradh static size_t (*nbtest_mbrtoc8)(char8_t *restrict, const char *restrict, 395269523aSriastradh size_t, mbstate_t *restrict) __unused = &mbrtoc8; 405269523aSriastradh static size_t (*nbtest_c8rtomb)(char *restrict, char8_t, 415269523aSriastradh mbstate_t *restrict) __unused = &c8rtomb; 42cc1e5796Sriastradh static size_t (*nbtest_mbrtoc16)(char16_t *restrict, const char *restrict, 43cc1e5796Sriastradh size_t, mbstate_t *restrict) __unused = &mbrtoc16; 44cc1e5796Sriastradh static size_t (*nbtest_c16rtomb)(char *restrict, char16_t, 45cc1e5796Sriastradh mbstate_t *restrict) __unused = &c16rtomb; 46cc1e5796Sriastradh static size_t (*nbtest_mbrtoc32)(char32_t *restrict, const char *restrict, 47cc1e5796Sriastradh size_t, mbstate_t *restrict) __unused = mbrtoc32; 48cc1e5796Sriastradh static size_t (*nbtest_c32rtomb)(char *restrict, char32_t, 49cc1e5796Sriastradh mbstate_t *restrict) __unused = &c32rtomb; 50cc1e5796Sriastradh 51cc1e5796Sriastradh #include <sys/cdefs.h> 52*3e1cddcbSrillig __RCSID("$NetBSD: t_uchar.c,v 1.3 2024/10/14 06:02:14 rillig Exp $"); 53cc1e5796Sriastradh 54cc1e5796Sriastradh #include <atf-c.h> 55cc1e5796Sriastradh #include <stdint.h> 56cc1e5796Sriastradh 57cc1e5796Sriastradh ATF_TC(uchartypes); 58cc1e5796Sriastradh ATF_TC_HEAD(uchartypes, tc) 59cc1e5796Sriastradh { 60cc1e5796Sriastradh atf_tc_set_md_var(tc, "descr", "Test <uchar.h> types are reasonable"); 61cc1e5796Sriastradh } 62cc1e5796Sriastradh ATF_TC_BODY(uchartypes, tc) 63cc1e5796Sriastradh { 64cc1e5796Sriastradh 655269523aSriastradh ATF_CHECK_EQ_MSG(sizeof(char8_t), sizeof(unsigned char), 66*3e1cddcbSrillig "char8_t %zu, unsigned char %zu", 67*3e1cddcbSrillig sizeof(char8_t), sizeof(unsigned char)); 68cc1e5796Sriastradh ATF_CHECK_EQ_MSG(sizeof(char16_t), sizeof(uint_least16_t), 69cc1e5796Sriastradh "char16_t %zu, uint_least16_t %zu", 70cc1e5796Sriastradh sizeof(char16_t), sizeof(uint_least16_t)); 71cc1e5796Sriastradh ATF_CHECK_EQ_MSG(sizeof(char32_t), sizeof(uint_least32_t), 72cc1e5796Sriastradh "char32_t %zu, uint_least32_t %zu", 73cc1e5796Sriastradh sizeof(char32_t), sizeof(uint_least32_t)); 74cc1e5796Sriastradh } 75cc1e5796Sriastradh 76cc1e5796Sriastradh ATF_TP_ADD_TCS(tp) 77cc1e5796Sriastradh { 78cc1e5796Sriastradh 79cc1e5796Sriastradh ATF_TP_ADD_TC(tp, uchartypes); 80cc1e5796Sriastradh return atf_no_error(); 81cc1e5796Sriastradh } 82