1168925Smtm/*-
2168925Smtm * Copyright (c) 2007 Michael Telahun Makonnen
3168925Smtm * All rights reserved.
4168925Smtm *
5168925Smtm * Redistribution and use in source and binary forms, with or without
6168925Smtm * modification, are permitted provided that the following conditions
7168925Smtm * are met:
8168925Smtm * 1. Redistributions of source code must retain the above copyright
9168925Smtm *    notice, this list of conditions and the following disclaimer.
10168925Smtm * 2. Redistributions in binary form must reproduce the above copyright
11168925Smtm *    notice, this list of conditions and the following disclaimer in the
12168925Smtm *    documentation and/or other materials provided with the distribution.
13168925Smtm *
14168925Smtm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15168925Smtm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16168925Smtm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17168925Smtm * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18168925Smtm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19168925Smtm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20168925Smtm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21168925Smtm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22168925Smtm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23168925Smtm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24168925Smtm * SUCH DAMAGE.
25168925Smtm *
26168925Smtm */
27168925Smtm
28168925Smtm#include <sys/cdefs.h>
29168925Smtm__FBSDID("$FreeBSD$");
30168925Smtm
31168925Smtm#include <sys/types.h>
32168925Smtm
33168925Smtm#include <stdio.h>
34168925Smtm#include <stdlib.h>
35168925Smtm#include <string.h>
36168925Smtm
37168925Smtm#include "test_subr.h"
38168925Smtm
39168925Smtmint g_total;
40168925Smtmint g_pass;
41168925Smtmint g_fail;
42168925Smtmchar g_funcname[FUNCNAMESIZE];
43168925Smtmchar g_testdesc[LINESIZE];
44168925Smtmchar g_errbuf[LINESIZE];
45168925Smtm
46168925Smtmvoid
47168925Smtmset_funcname(char *bufp, size_t bufsize)
48168925Smtm{
49168925Smtm	strlcpy(g_funcname, bufp,
50168925Smtm	    bufsize < FUNCNAMESIZE ? bufsize : FUNCNAMESIZE);
51168925Smtm}
52168925Smtm
53168925Smtm/*
54168925Smtm * desc is a NULL-terminated string.
55168925Smtm */
56168925Smtmvoid
57168925Smtmcheckptr(caddr_t expected, caddr_t got, const char *desc)
58168925Smtm{
59168925Smtm	int  len;
60168925Smtm	int  failed;
61168925Smtm	char sbuf[LINESIZE];
62168925Smtm
63168925Smtm	memset((void *)sbuf, 0, LINESIZE);
64168925Smtm	snprintf(g_testdesc, LINESIZE, desc);
65168925Smtm
66168925Smtm	failed = 1;
67168925Smtm	g_total++;
68168925Smtm	if (got == expected) {
69168925Smtm		len = snprintf(sbuf, LINESIZE, "ok");
70168925Smtm		g_pass++;
71168925Smtm		failed = 0;
72168925Smtm	} else {
73168925Smtm		len = snprintf(sbuf, LINESIZE, "not ok");
74168925Smtm		snprintf(g_errbuf, LINESIZE, " : Expected %#x, but got %#x",
75168925Smtm		    (unsigned int)expected, (unsigned int)got);
76168925Smtm		g_fail++;
77168925Smtm	}
78168925Smtm	snprintf(sbuf + len, LINESIZE - len, " %d - %s (%s)",
79168925Smtm	    g_total, g_funcname, g_testdesc);
80168925Smtm	printf(sbuf);
81168925Smtm	if (failed)
82168925Smtm		printf(g_errbuf);
83168925Smtm	printf("\n");
84168925Smtm	fflush(NULL);
85168925Smtm	memset((void *)g_errbuf, 0, LINESIZE);
86168925Smtm	memset((void *)g_testdesc, 0, LINESIZE);
87168925Smtm}
88168925Smtm
89168925Smtmvoid
90168925Smtmcheckstr(const char *expected, const char *got, size_t explen, const char *desc)
91168925Smtm{
92168925Smtm	int  len;
93168925Smtm	int  failed;
94168925Smtm	char sbuf[LINESIZE];
95168925Smtm
96168925Smtm	memset((void *)sbuf, 0, LINESIZE);
97168925Smtm	snprintf(g_testdesc, LINESIZE, desc);
98168925Smtm
99168925Smtm	failed = 1;
100168925Smtm	g_total++;
101168925Smtm	if (strncmp(expected, got, explen) == 0) {
102168925Smtm		len = snprintf(sbuf, LINESIZE, "ok");
103168925Smtm		g_pass++;
104168925Smtm		failed = 0;
105168925Smtm	} else {
106168925Smtm		len = snprintf(sbuf, LINESIZE, "not ok");
107168925Smtm		snprintf(g_errbuf, LINESIZE,
108168925Smtm		    " : Expected %s, but got %s", expected, got);
109168925Smtm		g_fail++;
110168925Smtm	}
111168925Smtm	snprintf(sbuf + len, LINESIZE - len, " %d - %s (%s)",
112168925Smtm	    g_total, g_funcname, g_testdesc);
113168925Smtm	printf(sbuf);
114168925Smtm	if (failed)
115168925Smtm		printf(g_errbuf);
116168925Smtm	printf("\n");
117168925Smtm	fflush(NULL);
118168925Smtm	memset((void *)g_errbuf, 0, LINESIZE);
119168925Smtm	memset((void *)g_testdesc, 0, LINESIZE);
120168925Smtm}
121168925Smtm
122168925Smtmvoid
123168925Smtmchecknum(int expected, int got, int cmp, const char *desc)
124168925Smtm{
125168925Smtm	int  len;
126168925Smtm	int  pass;
127168925Smtm	int  failed;
128168925Smtm	char sbuf[LINESIZE];
129168925Smtm
130168925Smtm	memset((void *)sbuf, 0, LINESIZE);
131168925Smtm	snprintf(g_testdesc, LINESIZE, desc);
132168925Smtm
133168925Smtm	failed = 1;
134168925Smtm	pass = 0;
135168925Smtm	g_total++;
136168925Smtm	switch(cmp) {
137168925Smtm	case 0:
138168925Smtm		pass = (got == expected) ? 1 : 0;
139168925Smtm		break;
140168925Smtm	case 1:
141168925Smtm		pass = (got > expected) ? 1 : 0;
142168925Smtm		break;
143168925Smtm	case -1:
144168925Smtm		pass = (got < expected) ? 1 : 0;
145168925Smtm		break;
146168925Smtm	}
147168925Smtm	if (pass != 0) {
148168925Smtm		len = snprintf(sbuf, LINESIZE, "ok");
149168925Smtm		g_pass++;
150168925Smtm		failed = 0;
151168925Smtm	} else {
152168925Smtm		len = snprintf(sbuf, LINESIZE, "not ok");
153168925Smtm		snprintf(g_errbuf, LINESIZE,
154168925Smtm		    " : Expected %d, but got %d", expected, got);
155168925Smtm		g_fail++;
156168925Smtm	}
157168925Smtm	snprintf(sbuf + len, LINESIZE - len, " %d - %s (%s)",
158168925Smtm	    g_total, g_funcname, g_testdesc);
159168925Smtm	printf(sbuf);
160168925Smtm	if (failed)
161168925Smtm		printf(g_errbuf);
162168925Smtm	printf("\n");
163168925Smtm	fflush(NULL);
164168925Smtm	memset((void *)g_errbuf, 0, LINESIZE);
165168925Smtm	memset((void *)g_testdesc, 0, LINESIZE);
166168925Smtm}
167