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