Home | History | Annotate | Line # | Download | only in include
      1 /* $NetBSD: t_limits.c,v 1.2 2011/04/04 18:02:01 jruoho Exp $ */
      2 
      3 /*
      4  * Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     18  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     26  * POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 /*
     30  * Copyright (c) 2009, Stathis Kamperis
     31  * All rights reserved.
     32  *
     33  * Redistribution and use in source and binary forms, with or without
     34  * modification, are permitted provided that the following conditions
     35  * are met:
     36  * 1. Redistributions of source code must retain the above copyright
     37  *    notice, this list of conditions and the following disclaimer.
     38  * 2. Redistributions in binary form must reproduce the above copyright
     39  *    notice, this list of conditions and the following disclaimer in the
     40  *    documentation and/or other materials provided with the distribution.
     41  *
     42  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     43  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     44  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     45  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
     46  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     47  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
     48  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     49  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     50  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     51  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     52  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     53  * SUCH DAMAGE.
     54  */
     55 #include <sys/cdefs.h>
     56 __COPYRIGHT("@(#) Copyright (c) 2008, 2010\
     57  The NetBSD Foundation, inc. All rights reserved.");
     58 __RCSID("$NetBSD: t_limits.c,v 1.2 2011/04/04 18:02:01 jruoho Exp $");
     59 
     60 #include <limits.h>
     61 
     62 #include <atf-c.h>
     63 
     64 struct psxentry {
     65 	const char	*psx_desc;
     66 	int		 psx_constant;
     67 	int		 psx_minval;
     68 } psxtable[] = {
     69 
     70 	/*
     71 	 * POSIX symbolic constants.
     72 	 */
     73 #ifdef	_POSIX_AIO_LISTIO_MAX
     74 	{ "_POSIX_AIO_LISTIO_MAX",	_POSIX_AIO_LISTIO_MAX,		2    },
     75 #endif
     76 #ifdef	_POSIX_AIO_MAX
     77 	{ "_POSIX_AIO_MAX",		_POSIX_AIO_MAX,			1    },
     78 #endif
     79 #ifdef	_POSIX_ARG_MAX
     80 	{ "_POSIX_ARG_MAX",		_POSIX_ARG_MAX,			4096 },
     81 #endif
     82 #ifdef	_POSIX_CHILD_MAX
     83 	{ "_POSIX_CHILD_MAX" ,		_POSIX_CHILD_MAX,		25   },
     84 #endif
     85 #ifdef	_POSIX_DELAYTIMER_MAX
     86 	{ "_POSIX_DELAYTIMER_MAX",	_POSIX_DELAYTIMER_MAX,		32   },
     87 #endif
     88 #ifdef	_POSIX_HOST_NAME_MAX
     89 	{ "_POSIX_HOST_NAME_MAX",	_POSIX_HOST_NAME_MAX,		255  },
     90 #endif
     91 #ifdef	_POSIX_LINK_MAX
     92 	{ "_POSIX_LINK_MAX",		_POSIX_LINK_MAX,		8    },
     93 #endif
     94 #ifdef	_POSIX_LOGIN_NAME_MAX
     95 	{ "_POSIX_LOGIN_NAME_MAX",	_POSIX_LOGIN_NAME_MAX,		9    },
     96 #endif
     97 #ifdef	_POSIX_MAX_CANON
     98 	{ "_POSIX_MAX_CANON",		_POSIX_MAX_CANON,		255  },
     99 #endif
    100 #ifdef	_POSIX_MAX_INPUT
    101 	{ "_POSIX_MAX_INPUT",		_POSIX_MAX_INPUT,		255  },
    102 #endif
    103 #ifdef	_POSIX_MQ_OPEN_MAX
    104 	{ "_POSIX_MQ_OPEN_MAX",		_POSIX_MQ_OPEN_MAX,		8    },
    105 #endif
    106 #ifdef	_POSIX_MQ_PRIO_MAX
    107 	{ "_POSIX_MQ_PRIO_MAX",		_POSIX_MQ_PRIO_MAX,		32   },
    108 #endif
    109 #ifdef	_POSIX_NAME_MAX
    110 	{ "_POSIX_NAME_MAX",		_POSIX_NAME_MAX,		9    },
    111 #endif
    112 #ifdef	_POSIX_NGROUPS_MAX
    113 	{ "_POSIX_NGROUPS_MAX",		_POSIX_NGROUPS_MAX,		8    },
    114 #endif
    115 #ifdef	_POSIX_OPEN_MAX
    116 	{ "_POSIX_OPEN_MAX",		_POSIX_OPEN_MAX,		20   },
    117 #endif
    118 #ifdef	_POSIX_PATH_MAX
    119 	{ "_POSIX_PATH_MAX",		_POSIX_PATH_MAX,		256  },
    120 #endif
    121 #ifdef	_POSIX_PIPE_BUF
    122 	{ "_POSIX_PIPE_BUF",		_POSIX_PIPE_BUF,		512  },
    123 #endif
    124 #ifdef	_POSIX_RE_DUP_MAX
    125 	{ "_POSIX_RE_DUP_MAX",		_POSIX_RE_DUP_MAX,		255  },
    126 #endif
    127 #ifdef	_POSIX_RTSIG_MAX
    128 	{ "_POSIX_RTSIG_MAX",		_POSIX_RTSIG_MAX,		8    },
    129 #endif
    130 #ifdef	_POSIX_SEM_NSEMS_MAX
    131 	{ "_POSIX_SEM_NSEMS_MAX",	_POSIX_SEM_NSEMS_MAX,		256  },
    132 #endif
    133 #ifdef	_POSIX_SEM_VALUE_MAX
    134 	{ "_POSIX_SEM_VALUE_MAX",	_POSIX_SEM_VALUE_MAX,		32767},
    135 #endif
    136 #ifdef	_POSIX_SIGQUEUE_MAX
    137 	{ "_POSIX_SIGQUEUE_MAX",	_POSIX_SIGQUEUE_MAX,		32   },
    138 #endif
    139 #ifdef	_POSIX_SSIZE_MAX
    140 	{ "_POSIX_SSIZE_MAX",		_POSIX_SSIZE_MAX,		32767},
    141 #endif
    142 #ifdef	_POSIX_STREAM_MAX
    143 	{ "_POSIX_STREAM_MAX",		_POSIX_STREAM_MAX,		8    },
    144 #endif
    145 #ifdef	_POSIX_SS_REPL_MAX
    146 	{ "_POSIX_SS_REPL_MAX",		_POSIX_SS_REPL_MAX,		4    },
    147 #endif
    148 #ifdef	_POSIX_SYMLINK_MAX
    149 	{ "_POSIX_SYMLINK_MAX",		_POSIX_SYMLINK_MAX,		255  },
    150 #endif
    151 #ifdef	_POSIX_SYMLOOP_MAX
    152 	{ "_POSIX_SYMLOOP_MAX",		_POSIX_SYMLOOP_MAX,		8    },
    153 #endif
    154 #ifdef	_POSIX_THREAD_DESTRUCTOR_ITERATIONS
    155 	{ "_POSIX_THREAD_DESTRUCTOR_ITERATIONS",
    156 	  _POSIX_THREAD_DESTRUCTOR_ITERATIONS,				4    },
    157 #endif
    158 #ifdef	_POSIX_THREAD_KEYS_MAX
    159 	{ "_POSIX_THREAD_KEYS_MAX",	_POSIX_THREAD_KEYS_MAX,		128  },
    160 #endif
    161 #ifdef	_POSIX_THREAD_THREADS_MAX
    162 	{ "_POSIX_THREAD_THREADS_MAX",	_POSIX_THREAD_THREADS_MAX,	64   },
    163 #endif
    164 #ifdef	_POSIX_TIMER_MAX
    165 	{ "_POSIX_TIMER_MAX",		_POSIX_TIMER_MAX,		32   },
    166 #endif
    167 #ifdef	_POSIX_TRACE_EVENT_NAME_MAX
    168 	{ "_POSIX_TRACE_EVENT_NAME_MAX",_POSIX_TRACE_EVENT_NAME_MAX,	30   },
    169 #endif
    170 #ifdef	_POSIX_TRACE_NAME_MAX
    171 	{ "_POSIX_TRACE_NAME_MAX",	_POSIX_TRACE_NAME_MAX,		8    },
    172 #endif
    173 #ifdef	_POSIX_TRACE_SYS_MAX
    174 	{ "_POSIX_TRACE_SYS_MAX",	_POSIX_TRACE_SYS_MAX,		8    },
    175 #endif
    176 #ifdef	_POSIX_TRACE_USER_EVENT_MAX
    177 	{ "_POSIX_TRACE_USER_EVENT_MAX",_POSIX_TRACE_USER_EVENT_MAX,	32   },
    178 #endif
    179 #ifdef	_POSIX_TTY_NAME_MAX
    180 	{ "_POSIX_TTY_NAME_MAX",	_POSIX_TTY_NAME_MAX,		9    },
    181 #endif
    182 #ifdef	_POSIX_TZNAME_MAX
    183 	{ "_POSIX_TZNAME_MAX",		_POSIX_TZNAME_MAX,		6    },
    184 #endif
    185 #ifdef	_POSIX2_BC_BASE_MAX
    186 	{ "_POSIX2_BC_BASE_MAX",	_POSIX2_BC_BASE_MAX,		99   },
    187 #endif
    188 #ifdef	_POSIX2_BC_DIM_MAX
    189 	{ "_POSIX2_BC_DIM_MAX",		_POSIX2_BC_DIM_MAX,		2048 },
    190 #endif
    191 #ifdef	_POSIX2_BC_SCALE_MAX
    192 	{ "_POSIX2_BC_SCALE_MAX",	_POSIX2_BC_SCALE_MAX,		99   },
    193 #endif
    194 #ifdef	_POSIX2_BC_STRING_MAX
    195 	{ "_POSIX2_BC_STRING_MAX",	_POSIX2_BC_STRING_MAX,		1000 },
    196 #endif
    197 #ifdef	_POSIX2_CHARCLASS_NAME_MAX
    198 	{ "_POSIX2_CHARCLASS_NAME_MAX",	_POSIX2_CHARCLASS_NAME_MAX,	14   },
    199 #endif
    200 #ifdef	_POSIX2_COLL_WEIGHTS_MAX
    201 	{ "_POSIX2_COLL_WEIGHTS_MAX",	_POSIX2_COLL_WEIGHTS_MAX,	2    },
    202 #endif
    203 #ifdef	_POSIX2_EXPR_NEST_MAX
    204 	{ "_POSIX2_EXPR_NEST_MAX",	_POSIX2_EXPR_NEST_MAX,		32   },
    205 #endif
    206 #ifdef	_POSIX2_LINE_MAX
    207 	{ "_POSIX2_LINE_MAX",		_POSIX2_LINE_MAX,		2048 },
    208 #endif
    209 #ifdef	_POSIX2_RE_DUP_MAX
    210 	{ "_POSIX2_RE_DUP_MAX",		_POSIX2_RE_DUP_MAX,		255  },
    211 #endif
    212 #ifdef	_XOPEN_IOV_MAX
    213 	{ "_XOPEN_IOV_MAX",		_XOPEN_IOV_MAX,			16   },
    214 #endif
    215 #ifdef	_XOPEN_NAME_MAX
    216 	{ "_XOPEN_NAME_MAX",		_XOPEN_NAME_MAX,		255  },
    217 #endif
    218 #ifdef	_XOPEN_PATH_MAX
    219 	{ "_XOPEN_PATH_MAX",		_XOPEN_PATH_MAX,		1024 },
    220 #endif
    221 
    222 	/*
    223 	 * Other invariant values.
    224 	 */
    225 #ifdef	NL_ARGMAX
    226 	{ "NL_ARGMAX",			NL_ARGMAX,			9    },
    227 #endif
    228 #ifdef	NL_LANGMAX
    229 	{ "NL_LANGMAX",			NL_LANGMAX,			14   },
    230 #endif
    231 #ifdef	NL_MSGMAX
    232 	{ "NL_MSGMAX",			NL_MSGMAX,			32767},
    233 #endif
    234 #ifdef	NL_SETMAX
    235 	{ "NL_SETMAX",			NL_SETMAX,			255  },
    236 #endif
    237 #ifdef	NL_TEXTMAX
    238 #ifdef	_POSIX2_LINE_MAX
    239 	{ "NL_TEXTMAX",			NL_TEXTMAX,	     _POSIX2_LINE_MAX},
    240 #endif
    241 #endif
    242 #ifdef	NZERO
    243 	{ "NZERO",			NZERO,				20   },
    244 #endif
    245 };
    246 
    247 ATF_TC_WITHOUT_HEAD(char);
    248 ATF_TC_BODY(char, tc)
    249 {
    250 	ATF_CHECK(CHAR_MIN < UCHAR_MAX);
    251 }
    252 
    253 ATF_TC(posix);
    254 ATF_TC_HEAD(posix, tc)
    255 {
    256 	atf_tc_set_md_var(tc, "descr", "Test POSIX limits");
    257 }
    258 
    259 ATF_TC_BODY(posix, tc)
    260 {
    261 	size_t i;
    262 
    263 	for (i = 0; i < __arraycount(psxtable); i++) {
    264 
    265 		if (psxtable[i].psx_constant < psxtable[i].psx_minval) {
    266 
    267 			atf_tc_fail("%s is less than the minimum",
    268 			    psxtable[i].psx_desc);
    269 		}
    270 	}
    271 }
    272 
    273 ATF_TC_WITHOUT_HEAD(short);
    274 ATF_TC_BODY(short, tc)
    275 {
    276 	ATF_CHECK(SHRT_MIN < USHRT_MAX);
    277 }
    278 
    279 ATF_TP_ADD_TCS(tp)
    280 {
    281 
    282 	ATF_TP_ADD_TC(tp, char);
    283 	ATF_TP_ADD_TC(tp, posix);
    284 	ATF_TP_ADD_TC(tp, short);
    285 
    286 	return atf_no_error();
    287 }
    288