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