1/* $NetBSD: t_limits.c,v 1.1 2010/07/17 19:26:27 jmmv 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.1 2010/07/17 19:26:27 jmmv Exp $");
59
60#include <limits.h>
61
62#include <atf-c.h>
63
64struct 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
247ATF_TC_WITHOUT_HEAD(char);
248ATF_TC_BODY(char, tc)
249{
250	ATF_CHECK(CHAR_MIN < UCHAR_MAX);
251}
252
253ATF_TC(posix);
254ATF_TC_HEAD(posix, tc)
255{
256	atf_tc_set_md_var(tc, "descr", "Test POSIX limits");
257}
258
259ATF_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
273ATF_TC_WITHOUT_HEAD(short);
274ATF_TC_BODY(short, tc)
275{
276	ATF_CHECK(SHRT_MIN < USHRT_MAX);
277}
278
279ATF_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