3 // Copyright (C) 2004 Enrico Scholz <ensc@delenn.intern.sigma-chemnitz.de>
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; version 2 of the License.
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 #define TEST_T2F_C(X,Y,Z) assert(vc_text2flag_compat(X,Y)==Z)
28 #define TEST_F2T_C(Y,X) { \
29 char const *x=vc_hiflag2text_compat(X); \
30 assert((x==0 && Y==0) || (x!=0 && Y!=0)); \
31 if (x!=0) assert(strcmp(x, Y)==0); \
34 #define TEST_LIST_C(STR,LEN,EXP,ERR_POS,ERR_LEN) { \
35 struct vc_err_listparser err; \
38 res = vc_list2flag_compat(buf, LEN, &err); \
40 assert(err.len==ERR_LEN); \
41 if (ERR_POS==-1) assert(err.ptr==0); \
42 else assert(err.ptr==buf+(ERR_POS)); \
47 #define TEST_T2F(X,Y,Z) assert(vc_text2flag(X,Y)==Z)
48 #define TEST_F2T(Y,X) { \
49 uint_least64_t x = (X); \
50 char const *rc=vc_loflag2text(&x); \
51 assert((rc==0 && Y==0) || (rc!=0 && Y!=0)); \
52 if (rc!=0) assert(strcmp(rc, Y)==0); \
54 #define TEST_LIST(STR,LEN,EXP_RES,EXP_FLAG,EXP_MASK,ERR_POS,ERR_LEN) { \
55 struct vc_err_listparser err; \
58 struct vc_ctx_flags flags = {0,0}; \
59 res = vc_list2flag(buf, LEN, &err, &flags); \
60 assert(res==(EXP_RES)); \
61 assert(flags.flagword==(EXP_FLAG)); \
62 assert(flags.mask ==(EXP_MASK)); \
63 assert(err.len==ERR_LEN); \
64 if (ERR_POS==-1) assert(err.ptr==0); \
65 else assert(err.ptr==buf+(ERR_POS)); \
68 #define ALL64 (~(uint_least64_t)(0))
72 TEST_T2F_C("lock", 0, S_CTX_INFO_LOCK);
73 TEST_T2F_C("lockXXXX", 4, S_CTX_INFO_LOCK);
74 TEST_T2F_C("locXXXXX", 3, 0);
75 TEST_T2F_C("sched", 0, S_CTX_INFO_SCHED);
76 TEST_T2F_C("nproc", 0, S_CTX_INFO_NPROC);
77 TEST_T2F_C("private", 0, S_CTX_INFO_PRIVATE);
78 TEST_T2F_C("fakeinit", 0, S_CTX_INFO_INIT);
79 TEST_T2F_C("hideinfo", 0, S_CTX_INFO_HIDEINFO);
80 TEST_T2F_C("ulimit", 0, S_CTX_INFO_ULIMIT);
81 TEST_T2F_C("XXX", 0, 0);
84 TEST_F2T_C("lock", S_CTX_INFO_LOCK);
85 TEST_F2T_C("sched", S_CTX_INFO_SCHED);
86 TEST_F2T_C("nproc", S_CTX_INFO_NPROC);
87 TEST_F2T_C("private", S_CTX_INFO_PRIVATE);
88 TEST_F2T_C("fakeinit", S_CTX_INFO_INIT);
89 TEST_F2T_C("hideinfo", S_CTX_INFO_HIDEINFO);
90 TEST_F2T_C("ulimit", S_CTX_INFO_ULIMIT);
92 TEST_F2T_C("ulimit", 64 | 128 | 23 );
93 TEST_F2T_C("fakeinit", 23);
95 TEST_LIST_C("lock", 0, S_CTX_INFO_LOCK, -1,0);
96 TEST_LIST_C("lock,sched,", 0, S_CTX_INFO_LOCK|S_CTX_INFO_SCHED, -1,0);
97 TEST_LIST_C("lock,XXX", 0, S_CTX_INFO_LOCK, 5,3);
98 TEST_LIST_C("", 0, 0, -1,0);
99 TEST_LIST_C("X", 0, 0, 0,1);
100 TEST_LIST_C("lock,sched,", 10, S_CTX_INFO_LOCK|S_CTX_INFO_SCHED, -1,0);
104 TEST_T2F("fakeinit", 0, VC_VXF_INFO_INIT);
105 TEST_T2F("XXX", 0, 0);
108 TEST_F2T("fakeinit", VC_VXF_INFO_INIT);
111 TEST_LIST("fakeinit", 0, 0, VC_VXF_INFO_INIT, VC_VXF_INFO_INIT,-1,0);
112 TEST_LIST("~fakeinit", 0, 0, 0, VC_VXF_INFO_INIT,-1,0);
113 TEST_LIST("!fakeinit", 0, 0, 0, VC_VXF_INFO_INIT,-1,0);
114 TEST_LIST("fakeinit,XXX", 0, -1, VC_VXF_INFO_INIT, VC_VXF_INFO_INIT, 9,3);
115 TEST_LIST("", 0, 0, 0, 0, -1,0);
116 TEST_LIST("X", 0, -1, 0, 0, 0,1);
117 TEST_LIST("all", 0, 0, ALL64, ALL64, -1,0);
118 TEST_LIST("ALL", 0, 0, ALL64, ALL64, -1,0);
119 TEST_LIST("any", 0, 0, ALL64, ALL64, -1,0);
120 TEST_LIST("ANY", 0, 0, ALL64, ALL64, -1,0);
121 TEST_LIST("~all", 0, 0, 0, ALL64, -1,0);
122 TEST_LIST("~ALL", 0, 0, 0, ALL64, -1,0);
123 TEST_LIST("all,~fakeinit",0, 0, ~VC_VXF_INFO_INIT,ALL64, -1,0);
124 TEST_LIST("~all,fakeinit",0, 0, VC_VXF_INFO_INIT, ALL64, -1,0);
125 TEST_LIST("fakeinit,~all",0, 0, 0, ALL64, -1,0);
126 TEST_LIST("~", 0, -1, 0, 0, 1,0);
127 TEST_LIST("fakeinit,~", 0, -1, VC_VXF_INFO_INIT, VC_VXF_INFO_INIT,10,0);
128 TEST_LIST("1", 0, 0, 1, 1, -1,0);
129 TEST_LIST("1,23,42", 0, 0, 1|23|42, 1|23|42, -1,0);
130 TEST_LIST("~1", 0, 0, 0, 1, -1,0);
131 TEST_LIST("42,fakeinit", 0, 0, VC_VXF_INFO_INIT|42, VC_VXF_INFO_INIT|42, -1,0);
132 TEST_LIST("42x,1", 0, -1, 0, 0, 0,3);
134 TEST_LIST("^4,~^2", 0, 0, 0x10, 0x14, -1,0);
136 TEST_LIST("lock,nproc,private,fakeinit,hide,ulimit,nspace,hard,prio,pause,mem,uptime,setup,init",
138 VC_VXF_INFO_LOCK|VC_VXF_INFO_NPROC|VC_VXF_INFO_PRIVATE|VC_VXF_INFO_INIT|
139 VC_VXF_INFO_HIDE|VC_VXF_INFO_ULIMIT|VC_VXF_INFO_NSPACE|
140 VC_VXF_SCHED_HARD|VC_VXF_SCHED_PRIO|VC_VXF_SCHED_PAUSE|
141 VC_VXF_VIRT_MEM|VC_VXF_VIRT_UPTIME|
142 VC_VXF_STATE_SETUP|VC_VXF_STATE_INIT,
144 VC_VXF_INFO_LOCK|VC_VXF_INFO_NPROC|VC_VXF_INFO_PRIVATE|VC_VXF_INFO_INIT|
145 VC_VXF_INFO_HIDE|VC_VXF_INFO_ULIMIT|VC_VXF_INFO_NSPACE|
146 VC_VXF_SCHED_HARD|VC_VXF_SCHED_PRIO|VC_VXF_SCHED_PAUSE|
147 VC_VXF_VIRT_MEM|VC_VXF_VIRT_UPTIME|
148 VC_VXF_STATE_SETUP|VC_VXF_STATE_INIT,
152 TEST_LIST("~lock,~nproc,~private,~fakeinit,~hide,~ulimit,~nspace,~hard,~prio,~pause,~mem,~uptime,~setup,~init",
155 VC_VXF_INFO_LOCK|VC_VXF_INFO_NPROC|VC_VXF_INFO_PRIVATE|VC_VXF_INFO_INIT|
156 VC_VXF_INFO_HIDE|VC_VXF_INFO_ULIMIT|VC_VXF_INFO_NSPACE|
157 VC_VXF_SCHED_HARD|VC_VXF_SCHED_PRIO|VC_VXF_SCHED_PAUSE|
158 VC_VXF_VIRT_MEM|VC_VXF_VIRT_UPTIME|
159 VC_VXF_STATE_SETUP|VC_VXF_STATE_INIT,