1*092fa28fSMike Makonnen /*-
2*092fa28fSMike Makonnen * Copyright (c) 2007 Michael Telahun Makonnen
3*092fa28fSMike Makonnen * All rights reserved.
4*092fa28fSMike Makonnen *
5*092fa28fSMike Makonnen * Redistribution and use in source and binary forms, with or without
6*092fa28fSMike Makonnen * modification, are permitted provided that the following conditions
7*092fa28fSMike Makonnen * are met:
8*092fa28fSMike Makonnen * 1. Redistributions of source code must retain the above copyright
9*092fa28fSMike Makonnen * notice, this list of conditions and the following disclaimer.
10*092fa28fSMike Makonnen * 2. Redistributions in binary form must reproduce the above copyright
11*092fa28fSMike Makonnen * notice, this list of conditions and the following disclaimer in the
12*092fa28fSMike Makonnen * documentation and/or other materials provided with the distribution.
13*092fa28fSMike Makonnen *
14*092fa28fSMike Makonnen * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*092fa28fSMike Makonnen * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*092fa28fSMike Makonnen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*092fa28fSMike Makonnen * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*092fa28fSMike Makonnen * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*092fa28fSMike Makonnen * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*092fa28fSMike Makonnen * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*092fa28fSMike Makonnen * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*092fa28fSMike Makonnen * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*092fa28fSMike Makonnen * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*092fa28fSMike Makonnen * SUCH DAMAGE.
25*092fa28fSMike Makonnen *
26*092fa28fSMike Makonnen */
27*092fa28fSMike Makonnen
28*092fa28fSMike Makonnen #include <sys/types.h>
29*092fa28fSMike Makonnen
30*092fa28fSMike Makonnen #include <stdio.h>
31*092fa28fSMike Makonnen #include <stdlib.h>
32*092fa28fSMike Makonnen #include <string.h>
33*092fa28fSMike Makonnen
34*092fa28fSMike Makonnen #include "test_subr.h"
35*092fa28fSMike Makonnen
36*092fa28fSMike Makonnen int g_total;
37*092fa28fSMike Makonnen int g_pass;
38*092fa28fSMike Makonnen int g_fail;
39*092fa28fSMike Makonnen char g_funcname[FUNCNAMESIZE];
40*092fa28fSMike Makonnen char g_testdesc[LINESIZE];
41*092fa28fSMike Makonnen char g_errbuf[LINESIZE];
42*092fa28fSMike Makonnen
43*092fa28fSMike Makonnen void
set_funcname(char * bufp,size_t bufsize)44*092fa28fSMike Makonnen set_funcname(char *bufp, size_t bufsize)
45*092fa28fSMike Makonnen {
46*092fa28fSMike Makonnen strlcpy(g_funcname, bufp,
47*092fa28fSMike Makonnen bufsize < FUNCNAMESIZE ? bufsize : FUNCNAMESIZE);
48*092fa28fSMike Makonnen }
49*092fa28fSMike Makonnen
50*092fa28fSMike Makonnen /*
51*092fa28fSMike Makonnen * desc is a NULL-terminated string.
52*092fa28fSMike Makonnen */
53*092fa28fSMike Makonnen void
checkptr(caddr_t expected,caddr_t got,const char * desc)54*092fa28fSMike Makonnen checkptr(caddr_t expected, caddr_t got, const char *desc)
55*092fa28fSMike Makonnen {
56*092fa28fSMike Makonnen int len;
57*092fa28fSMike Makonnen int failed;
58*092fa28fSMike Makonnen char sbuf[LINESIZE];
59*092fa28fSMike Makonnen
60*092fa28fSMike Makonnen memset((void *)sbuf, 0, LINESIZE);
61*092fa28fSMike Makonnen snprintf(g_testdesc, LINESIZE, desc);
62*092fa28fSMike Makonnen
63*092fa28fSMike Makonnen failed = 1;
64*092fa28fSMike Makonnen g_total++;
65*092fa28fSMike Makonnen if (got == expected) {
66*092fa28fSMike Makonnen len = snprintf(sbuf, LINESIZE, "ok");
67*092fa28fSMike Makonnen g_pass++;
68*092fa28fSMike Makonnen failed = 0;
69*092fa28fSMike Makonnen } else {
70*092fa28fSMike Makonnen len = snprintf(sbuf, LINESIZE, "not ok");
71*092fa28fSMike Makonnen snprintf(g_errbuf, LINESIZE, " : Expected %#x, but got %#x",
72*092fa28fSMike Makonnen (unsigned int)expected, (unsigned int)got);
73*092fa28fSMike Makonnen g_fail++;
74*092fa28fSMike Makonnen }
75*092fa28fSMike Makonnen snprintf(sbuf + len, LINESIZE - len, " %d - %s (%s)",
76*092fa28fSMike Makonnen g_total, g_funcname, g_testdesc);
77*092fa28fSMike Makonnen printf(sbuf);
78*092fa28fSMike Makonnen if (failed)
79*092fa28fSMike Makonnen printf(g_errbuf);
80*092fa28fSMike Makonnen printf("\n");
81*092fa28fSMike Makonnen fflush(NULL);
82*092fa28fSMike Makonnen memset((void *)g_errbuf, 0, LINESIZE);
83*092fa28fSMike Makonnen memset((void *)g_testdesc, 0, LINESIZE);
84*092fa28fSMike Makonnen }
85*092fa28fSMike Makonnen
86*092fa28fSMike Makonnen void
checkstr(const char * expected,const char * got,size_t explen,const char * desc)87*092fa28fSMike Makonnen checkstr(const char *expected, const char *got, size_t explen, const char *desc)
88*092fa28fSMike Makonnen {
89*092fa28fSMike Makonnen int len;
90*092fa28fSMike Makonnen int failed;
91*092fa28fSMike Makonnen char sbuf[LINESIZE];
92*092fa28fSMike Makonnen
93*092fa28fSMike Makonnen memset((void *)sbuf, 0, LINESIZE);
94*092fa28fSMike Makonnen snprintf(g_testdesc, LINESIZE, desc);
95*092fa28fSMike Makonnen
96*092fa28fSMike Makonnen failed = 1;
97*092fa28fSMike Makonnen g_total++;
98*092fa28fSMike Makonnen if (strncmp(expected, got, explen) == 0) {
99*092fa28fSMike Makonnen len = snprintf(sbuf, LINESIZE, "ok");
100*092fa28fSMike Makonnen g_pass++;
101*092fa28fSMike Makonnen failed = 0;
102*092fa28fSMike Makonnen } else {
103*092fa28fSMike Makonnen len = snprintf(sbuf, LINESIZE, "not ok");
104*092fa28fSMike Makonnen snprintf(g_errbuf, LINESIZE,
105*092fa28fSMike Makonnen " : Expected %s, but got %s", expected, got);
106*092fa28fSMike Makonnen g_fail++;
107*092fa28fSMike Makonnen }
108*092fa28fSMike Makonnen snprintf(sbuf + len, LINESIZE - len, " %d - %s (%s)",
109*092fa28fSMike Makonnen g_total, g_funcname, g_testdesc);
110*092fa28fSMike Makonnen printf(sbuf);
111*092fa28fSMike Makonnen if (failed)
112*092fa28fSMike Makonnen printf(g_errbuf);
113*092fa28fSMike Makonnen printf("\n");
114*092fa28fSMike Makonnen fflush(NULL);
115*092fa28fSMike Makonnen memset((void *)g_errbuf, 0, LINESIZE);
116*092fa28fSMike Makonnen memset((void *)g_testdesc, 0, LINESIZE);
117*092fa28fSMike Makonnen }
118*092fa28fSMike Makonnen
119*092fa28fSMike Makonnen void
checknum(int expected,int got,int cmp,const char * desc)120*092fa28fSMike Makonnen checknum(int expected, int got, int cmp, const char *desc)
121*092fa28fSMike Makonnen {
122*092fa28fSMike Makonnen int len;
123*092fa28fSMike Makonnen int pass;
124*092fa28fSMike Makonnen int failed;
125*092fa28fSMike Makonnen char sbuf[LINESIZE];
126*092fa28fSMike Makonnen
127*092fa28fSMike Makonnen memset((void *)sbuf, 0, LINESIZE);
128*092fa28fSMike Makonnen snprintf(g_testdesc, LINESIZE, desc);
129*092fa28fSMike Makonnen
130*092fa28fSMike Makonnen failed = 1;
131*092fa28fSMike Makonnen pass = 0;
132*092fa28fSMike Makonnen g_total++;
133*092fa28fSMike Makonnen switch(cmp) {
134*092fa28fSMike Makonnen case 0:
135*092fa28fSMike Makonnen pass = (got == expected) ? 1 : 0;
136*092fa28fSMike Makonnen break;
137*092fa28fSMike Makonnen case 1:
138*092fa28fSMike Makonnen pass = (got > expected) ? 1 : 0;
139*092fa28fSMike Makonnen break;
140*092fa28fSMike Makonnen case -1:
141*092fa28fSMike Makonnen pass = (got < expected) ? 1 : 0;
142*092fa28fSMike Makonnen break;
143*092fa28fSMike Makonnen }
144*092fa28fSMike Makonnen if (pass != 0) {
145*092fa28fSMike Makonnen len = snprintf(sbuf, LINESIZE, "ok");
146*092fa28fSMike Makonnen g_pass++;
147*092fa28fSMike Makonnen failed = 0;
148*092fa28fSMike Makonnen } else {
149*092fa28fSMike Makonnen len = snprintf(sbuf, LINESIZE, "not ok");
150*092fa28fSMike Makonnen snprintf(g_errbuf, LINESIZE,
151*092fa28fSMike Makonnen " : Expected %d, but got %d", expected, got);
152*092fa28fSMike Makonnen g_fail++;
153*092fa28fSMike Makonnen }
154*092fa28fSMike Makonnen snprintf(sbuf + len, LINESIZE - len, " %d - %s (%s)",
155*092fa28fSMike Makonnen g_total, g_funcname, g_testdesc);
156*092fa28fSMike Makonnen printf(sbuf);
157*092fa28fSMike Makonnen if (failed)
158*092fa28fSMike Makonnen printf(g_errbuf);
159*092fa28fSMike Makonnen printf("\n");
160*092fa28fSMike Makonnen fflush(NULL);
161*092fa28fSMike Makonnen memset((void *)g_errbuf, 0, LINESIZE);
162*092fa28fSMike Makonnen memset((void *)g_testdesc, 0, LINESIZE);
163*092fa28fSMike Makonnen }
164