1272343Sngie/* $NetBSD: t_limits.c,v 1.2 2011/04/04 18:02:01 jruoho Exp $ */
2272343Sngie
3272343Sngie/*
4272343Sngie * Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
5272343Sngie * All rights reserved.
6272343Sngie *
7272343Sngie * Redistribution and use in source and binary forms, with or without
8272343Sngie * modification, are permitted provided that the following conditions
9272343Sngie * are met:
10272343Sngie * 1. Redistributions of source code must retain the above copyright
11272343Sngie *    notice, this list of conditions and the following disclaimer.
12272343Sngie * 2. Redistributions in binary form must reproduce the above copyright
13272343Sngie *    notice, this list of conditions and the following disclaimer in the
14272343Sngie *    documentation and/or other materials provided with the distribution.
15272343Sngie *
16272343Sngie * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17272343Sngie * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18272343Sngie * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19272343Sngie * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20272343Sngie * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21272343Sngie * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22272343Sngie * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23272343Sngie * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24272343Sngie * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25272343Sngie * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26272343Sngie * POSSIBILITY OF SUCH DAMAGE.
27272343Sngie */
28272343Sngie
29272343Sngie/*
30272343Sngie * Copyright (c) 2009, Stathis Kamperis
31272343Sngie * All rights reserved.
32272343Sngie *
33272343Sngie * Redistribution and use in source and binary forms, with or without
34272343Sngie * modification, are permitted provided that the following conditions
35272343Sngie * are met:
36272343Sngie * 1. Redistributions of source code must retain the above copyright
37272343Sngie *    notice, this list of conditions and the following disclaimer.
38272343Sngie * 2. Redistributions in binary form must reproduce the above copyright
39272343Sngie *    notice, this list of conditions and the following disclaimer in the
40272343Sngie *    documentation and/or other materials provided with the distribution.
41272343Sngie *
42272343Sngie * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43272343Sngie * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44272343Sngie * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
45272343Sngie * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
46272343Sngie * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
47272343Sngie * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
48272343Sngie * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
49272343Sngie * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
50272343Sngie * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
51272343Sngie * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
52272343Sngie * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53272343Sngie * SUCH DAMAGE.
54272343Sngie */
55272343Sngie#include <sys/cdefs.h>
56272343Sngie__COPYRIGHT("@(#) Copyright (c) 2008, 2010\
57272343Sngie The NetBSD Foundation, inc. All rights reserved.");
58272343Sngie__RCSID("$NetBSD: t_limits.c,v 1.2 2011/04/04 18:02:01 jruoho Exp $");
59272343Sngie
60272343Sngie#include <limits.h>
61272343Sngie
62272343Sngie#include <atf-c.h>
63272343Sngie
64272343Sngiestruct psxentry {
65272343Sngie	const char	*psx_desc;
66272343Sngie	int		 psx_constant;
67272343Sngie	int		 psx_minval;
68272343Sngie} psxtable[] = {
69272343Sngie
70272343Sngie	/*
71272343Sngie	 * POSIX symbolic constants.
72272343Sngie	 */
73272343Sngie#ifdef	_POSIX_AIO_LISTIO_MAX
74272343Sngie	{ "_POSIX_AIO_LISTIO_MAX",	_POSIX_AIO_LISTIO_MAX,		2    },
75272343Sngie#endif
76272343Sngie#ifdef	_POSIX_AIO_MAX
77272343Sngie	{ "_POSIX_AIO_MAX",		_POSIX_AIO_MAX,			1    },
78272343Sngie#endif
79272343Sngie#ifdef	_POSIX_ARG_MAX
80272343Sngie	{ "_POSIX_ARG_MAX",		_POSIX_ARG_MAX,			4096 },
81272343Sngie#endif
82272343Sngie#ifdef	_POSIX_CHILD_MAX
83272343Sngie	{ "_POSIX_CHILD_MAX" ,		_POSIX_CHILD_MAX,		25   },
84272343Sngie#endif
85272343Sngie#ifdef	_POSIX_DELAYTIMER_MAX
86272343Sngie	{ "_POSIX_DELAYTIMER_MAX",	_POSIX_DELAYTIMER_MAX,		32   },
87272343Sngie#endif
88272343Sngie#ifdef	_POSIX_HOST_NAME_MAX
89272343Sngie	{ "_POSIX_HOST_NAME_MAX",	_POSIX_HOST_NAME_MAX,		255  },
90272343Sngie#endif
91272343Sngie#ifdef	_POSIX_LINK_MAX
92272343Sngie	{ "_POSIX_LINK_MAX",		_POSIX_LINK_MAX,		8    },
93272343Sngie#endif
94272343Sngie#ifdef	_POSIX_LOGIN_NAME_MAX
95272343Sngie	{ "_POSIX_LOGIN_NAME_MAX",	_POSIX_LOGIN_NAME_MAX,		9    },
96272343Sngie#endif
97272343Sngie#ifdef	_POSIX_MAX_CANON
98272343Sngie	{ "_POSIX_MAX_CANON",		_POSIX_MAX_CANON,		255  },
99272343Sngie#endif
100272343Sngie#ifdef	_POSIX_MAX_INPUT
101272343Sngie	{ "_POSIX_MAX_INPUT",		_POSIX_MAX_INPUT,		255  },
102272343Sngie#endif
103272343Sngie#ifdef	_POSIX_MQ_OPEN_MAX
104272343Sngie	{ "_POSIX_MQ_OPEN_MAX",		_POSIX_MQ_OPEN_MAX,		8    },
105272343Sngie#endif
106272343Sngie#ifdef	_POSIX_MQ_PRIO_MAX
107272343Sngie	{ "_POSIX_MQ_PRIO_MAX",		_POSIX_MQ_PRIO_MAX,		32   },
108272343Sngie#endif
109272343Sngie#ifdef	_POSIX_NAME_MAX
110272343Sngie	{ "_POSIX_NAME_MAX",		_POSIX_NAME_MAX,		9    },
111272343Sngie#endif
112272343Sngie#ifdef	_POSIX_NGROUPS_MAX
113272343Sngie	{ "_POSIX_NGROUPS_MAX",		_POSIX_NGROUPS_MAX,		8    },
114272343Sngie#endif
115272343Sngie#ifdef	_POSIX_OPEN_MAX
116272343Sngie	{ "_POSIX_OPEN_MAX",		_POSIX_OPEN_MAX,		20   },
117272343Sngie#endif
118272343Sngie#ifdef	_POSIX_PATH_MAX
119272343Sngie	{ "_POSIX_PATH_MAX",		_POSIX_PATH_MAX,		256  },
120272343Sngie#endif
121272343Sngie#ifdef	_POSIX_PIPE_BUF
122272343Sngie	{ "_POSIX_PIPE_BUF",		_POSIX_PIPE_BUF,		512  },
123272343Sngie#endif
124272343Sngie#ifdef	_POSIX_RE_DUP_MAX
125272343Sngie	{ "_POSIX_RE_DUP_MAX",		_POSIX_RE_DUP_MAX,		255  },
126272343Sngie#endif
127272343Sngie#ifdef	_POSIX_RTSIG_MAX
128272343Sngie	{ "_POSIX_RTSIG_MAX",		_POSIX_RTSIG_MAX,		8    },
129272343Sngie#endif
130272343Sngie#ifdef	_POSIX_SEM_NSEMS_MAX
131272343Sngie	{ "_POSIX_SEM_NSEMS_MAX",	_POSIX_SEM_NSEMS_MAX,		256  },
132272343Sngie#endif
133272343Sngie#ifdef	_POSIX_SEM_VALUE_MAX
134272343Sngie	{ "_POSIX_SEM_VALUE_MAX",	_POSIX_SEM_VALUE_MAX,		32767},
135272343Sngie#endif
136272343Sngie#ifdef	_POSIX_SIGQUEUE_MAX
137272343Sngie	{ "_POSIX_SIGQUEUE_MAX",	_POSIX_SIGQUEUE_MAX,		32   },
138272343Sngie#endif
139272343Sngie#ifdef	_POSIX_SSIZE_MAX
140272343Sngie	{ "_POSIX_SSIZE_MAX",		_POSIX_SSIZE_MAX,		32767},
141272343Sngie#endif
142272343Sngie#ifdef	_POSIX_STREAM_MAX
143272343Sngie	{ "_POSIX_STREAM_MAX",		_POSIX_STREAM_MAX,		8    },
144272343Sngie#endif
145272343Sngie#ifdef	_POSIX_SS_REPL_MAX
146272343Sngie	{ "_POSIX_SS_REPL_MAX",		_POSIX_SS_REPL_MAX,		4    },
147272343Sngie#endif
148272343Sngie#ifdef	_POSIX_SYMLINK_MAX
149272343Sngie	{ "_POSIX_SYMLINK_MAX",		_POSIX_SYMLINK_MAX,		255  },
150272343Sngie#endif
151272343Sngie#ifdef	_POSIX_SYMLOOP_MAX
152272343Sngie	{ "_POSIX_SYMLOOP_MAX",		_POSIX_SYMLOOP_MAX,		8    },
153272343Sngie#endif
154272343Sngie#ifdef	_POSIX_THREAD_DESTRUCTOR_ITERATIONS
155272343Sngie	{ "_POSIX_THREAD_DESTRUCTOR_ITERATIONS",
156272343Sngie	  _POSIX_THREAD_DESTRUCTOR_ITERATIONS,				4    },
157272343Sngie#endif
158272343Sngie#ifdef	_POSIX_THREAD_KEYS_MAX
159272343Sngie	{ "_POSIX_THREAD_KEYS_MAX",	_POSIX_THREAD_KEYS_MAX,		128  },
160272343Sngie#endif
161272343Sngie#ifdef	_POSIX_THREAD_THREADS_MAX
162272343Sngie	{ "_POSIX_THREAD_THREADS_MAX",	_POSIX_THREAD_THREADS_MAX,	64   },
163272343Sngie#endif
164272343Sngie#ifdef	_POSIX_TIMER_MAX
165272343Sngie	{ "_POSIX_TIMER_MAX",		_POSIX_TIMER_MAX,		32   },
166272343Sngie#endif
167272343Sngie#ifdef	_POSIX_TRACE_EVENT_NAME_MAX
168272343Sngie	{ "_POSIX_TRACE_EVENT_NAME_MAX",_POSIX_TRACE_EVENT_NAME_MAX,	30   },
169272343Sngie#endif
170272343Sngie#ifdef	_POSIX_TRACE_NAME_MAX
171272343Sngie	{ "_POSIX_TRACE_NAME_MAX",	_POSIX_TRACE_NAME_MAX,		8    },
172272343Sngie#endif
173272343Sngie#ifdef	_POSIX_TRACE_SYS_MAX
174272343Sngie	{ "_POSIX_TRACE_SYS_MAX",	_POSIX_TRACE_SYS_MAX,		8    },
175272343Sngie#endif
176272343Sngie#ifdef	_POSIX_TRACE_USER_EVENT_MAX
177272343Sngie	{ "_POSIX_TRACE_USER_EVENT_MAX",_POSIX_TRACE_USER_EVENT_MAX,	32   },
178272343Sngie#endif
179272343Sngie#ifdef	_POSIX_TTY_NAME_MAX
180272343Sngie	{ "_POSIX_TTY_NAME_MAX",	_POSIX_TTY_NAME_MAX,		9    },
181272343Sngie#endif
182272343Sngie#ifdef	_POSIX_TZNAME_MAX
183272343Sngie	{ "_POSIX_TZNAME_MAX",		_POSIX_TZNAME_MAX,		6    },
184272343Sngie#endif
185272343Sngie#ifdef	_POSIX2_BC_BASE_MAX
186272343Sngie	{ "_POSIX2_BC_BASE_MAX",	_POSIX2_BC_BASE_MAX,		99   },
187272343Sngie#endif
188272343Sngie#ifdef	_POSIX2_BC_DIM_MAX
189272343Sngie	{ "_POSIX2_BC_DIM_MAX",		_POSIX2_BC_DIM_MAX,		2048 },
190272343Sngie#endif
191272343Sngie#ifdef	_POSIX2_BC_SCALE_MAX
192272343Sngie	{ "_POSIX2_BC_SCALE_MAX",	_POSIX2_BC_SCALE_MAX,		99   },
193272343Sngie#endif
194272343Sngie#ifdef	_POSIX2_BC_STRING_MAX
195272343Sngie	{ "_POSIX2_BC_STRING_MAX",	_POSIX2_BC_STRING_MAX,		1000 },
196272343Sngie#endif
197272343Sngie#ifdef	_POSIX2_CHARCLASS_NAME_MAX
198272343Sngie	{ "_POSIX2_CHARCLASS_NAME_MAX",	_POSIX2_CHARCLASS_NAME_MAX,	14   },
199272343Sngie#endif
200272343Sngie#ifdef	_POSIX2_COLL_WEIGHTS_MAX
201272343Sngie	{ "_POSIX2_COLL_WEIGHTS_MAX",	_POSIX2_COLL_WEIGHTS_MAX,	2    },
202272343Sngie#endif
203272343Sngie#ifdef	_POSIX2_EXPR_NEST_MAX
204272343Sngie	{ "_POSIX2_EXPR_NEST_MAX",	_POSIX2_EXPR_NEST_MAX,		32   },
205272343Sngie#endif
206272343Sngie#ifdef	_POSIX2_LINE_MAX
207272343Sngie	{ "_POSIX2_LINE_MAX",		_POSIX2_LINE_MAX,		2048 },
208272343Sngie#endif
209272343Sngie#ifdef	_POSIX2_RE_DUP_MAX
210272343Sngie	{ "_POSIX2_RE_DUP_MAX",		_POSIX2_RE_DUP_MAX,		255  },
211272343Sngie#endif
212272343Sngie#ifdef	_XOPEN_IOV_MAX
213272343Sngie	{ "_XOPEN_IOV_MAX",		_XOPEN_IOV_MAX,			16   },
214272343Sngie#endif
215272343Sngie#ifdef	_XOPEN_NAME_MAX
216272343Sngie	{ "_XOPEN_NAME_MAX",		_XOPEN_NAME_MAX,		255  },
217272343Sngie#endif
218272343Sngie#ifdef	_XOPEN_PATH_MAX
219272343Sngie	{ "_XOPEN_PATH_MAX",		_XOPEN_PATH_MAX,		1024 },
220272343Sngie#endif
221272343Sngie
222272343Sngie	/*
223272343Sngie	 * Other invariant values.
224272343Sngie	 */
225272343Sngie#ifdef	NL_ARGMAX
226272343Sngie	{ "NL_ARGMAX",			NL_ARGMAX,			9    },
227272343Sngie#endif
228272343Sngie#ifdef	NL_LANGMAX
229272343Sngie	{ "NL_LANGMAX",			NL_LANGMAX,			14   },
230272343Sngie#endif
231272343Sngie#ifdef	NL_MSGMAX
232272343Sngie	{ "NL_MSGMAX",			NL_MSGMAX,			32767},
233272343Sngie#endif
234272343Sngie#ifdef	NL_SETMAX
235272343Sngie	{ "NL_SETMAX",			NL_SETMAX,			255  },
236272343Sngie#endif
237272343Sngie#ifdef	NL_TEXTMAX
238272343Sngie#ifdef	_POSIX2_LINE_MAX
239272343Sngie	{ "NL_TEXTMAX",			NL_TEXTMAX,	     _POSIX2_LINE_MAX},
240272343Sngie#endif
241272343Sngie#endif
242272343Sngie#ifdef	NZERO
243272343Sngie	{ "NZERO",			NZERO,				20   },
244272343Sngie#endif
245272343Sngie};
246272343Sngie
247272343SngieATF_TC_WITHOUT_HEAD(char);
248272343SngieATF_TC_BODY(char, tc)
249272343Sngie{
250272343Sngie	ATF_CHECK(CHAR_MIN < UCHAR_MAX);
251272343Sngie}
252272343Sngie
253272343SngieATF_TC(posix);
254272343SngieATF_TC_HEAD(posix, tc)
255272343Sngie{
256272343Sngie	atf_tc_set_md_var(tc, "descr", "Test POSIX limits");
257272343Sngie}
258272343Sngie
259272343SngieATF_TC_BODY(posix, tc)
260272343Sngie{
261272343Sngie	size_t i;
262272343Sngie
263272343Sngie	for (i = 0; i < __arraycount(psxtable); i++) {
264272343Sngie
265272343Sngie		if (psxtable[i].psx_constant < psxtable[i].psx_minval) {
266272343Sngie
267272343Sngie			atf_tc_fail("%s is less than the minimum",
268272343Sngie			    psxtable[i].psx_desc);
269272343Sngie		}
270272343Sngie	}
271272343Sngie}
272272343Sngie
273272343SngieATF_TC_WITHOUT_HEAD(short);
274272343SngieATF_TC_BODY(short, tc)
275272343Sngie{
276272343Sngie	ATF_CHECK(SHRT_MIN < USHRT_MAX);
277272343Sngie}
278272343Sngie
279272343SngieATF_TP_ADD_TCS(tp)
280272343Sngie{
281272343Sngie
282272343Sngie	ATF_TP_ADD_TC(tp, char);
283272343Sngie	ATF_TP_ADD_TC(tp, posix);
284272343Sngie	ATF_TP_ADD_TC(tp, short);
285272343Sngie
286272343Sngie	return atf_no_error();
287272343Sngie}
288