1f08c3bdfSopenharmony_ci/*
2f08c3bdfSopenharmony_ci *
3f08c3bdfSopenharmony_ci *   Copyright (c) International Business Machines  Corp., 2002
4f08c3bdfSopenharmony_ci *
5f08c3bdfSopenharmony_ci *   This program is free software;  you can redistribute it and/or modify
6f08c3bdfSopenharmony_ci *   it under the terms of the GNU General Public License as published by
7f08c3bdfSopenharmony_ci *   the Free Software Foundation; either version 2 of the License, or
8f08c3bdfSopenharmony_ci *   (at your option) any later version.
9f08c3bdfSopenharmony_ci *
10f08c3bdfSopenharmony_ci *   This program is distributed in the hope that it will be useful,
11f08c3bdfSopenharmony_ci *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
12f08c3bdfSopenharmony_ci *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
13f08c3bdfSopenharmony_ci *   the GNU General Public License for more details.
14f08c3bdfSopenharmony_ci *
15f08c3bdfSopenharmony_ci *   You should have received a copy of the GNU General Public License
16f08c3bdfSopenharmony_ci *   along with this program;  if not, write to the Free Software
17f08c3bdfSopenharmony_ci *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18f08c3bdfSopenharmony_ci */
19f08c3bdfSopenharmony_ci
20f08c3bdfSopenharmony_ci/* 01/02/2003	Port to LTP	avenkat@us.ibm.com */
21f08c3bdfSopenharmony_ci/* 06/30/2001	Port to Linux	nsharoff@us.ibm.com */
22f08c3bdfSopenharmony_ci
23f08c3bdfSopenharmony_ci/*
24f08c3bdfSopenharmony_ci * NAME
25f08c3bdfSopenharmony_ci *	atof1 -- ascii to floating point test
26f08c3bdfSopenharmony_ci *
27f08c3bdfSopenharmony_ci * CALLS
28f08c3bdfSopenharmony_ci *	atof(3), sprintf(3), ( doprnt.s )
29f08c3bdfSopenharmony_ci *
30f08c3bdfSopenharmony_ci * ALGORITHM
31f08c3bdfSopenharmony_ci *	Do some checks of floating point to ascii and back, arbitrate
32f08c3bdfSopenharmony_ci *	with a 3rd algorithm written in C.
33f08c3bdfSopenharmony_ci *
34f08c3bdfSopenharmony_ci * RESTRICTIONS
35f08c3bdfSopenharmony_ci */
36f08c3bdfSopenharmony_ci
37f08c3bdfSopenharmony_ci#include <stdio.h>
38f08c3bdfSopenharmony_ci#include <ctype.h>
39f08c3bdfSopenharmony_ci#include <math.h>
40f08c3bdfSopenharmony_ci#include <stdlib.h>
41f08c3bdfSopenharmony_ci#include <errno.h>
42f08c3bdfSopenharmony_ci
43f08c3bdfSopenharmony_ci/**	LTP Port	**/
44f08c3bdfSopenharmony_ci#include "test.h"
45f08c3bdfSopenharmony_ci
46f08c3bdfSopenharmony_ci#define FAILED 0
47f08c3bdfSopenharmony_ci#define PASSED 1
48f08c3bdfSopenharmony_ci
49f08c3bdfSopenharmony_ci/*****		*****/
50f08c3bdfSopenharmony_ci#define ERR		0.0000001
51f08c3bdfSopenharmony_ci
52f08c3bdfSopenharmony_cidouble pi;
53f08c3bdfSopenharmony_ci
54f08c3bdfSopenharmony_ci/*char progname[]= "atof1()"; */
55f08c3bdfSopenharmony_ci/**	LTP Port	**/
56f08c3bdfSopenharmony_cichar *TCID = "atof01";		/* Test program identifier */
57f08c3bdfSopenharmony_ci
58f08c3bdfSopenharmony_ciint local_flag = PASSED;
59f08c3bdfSopenharmony_ciint block_number;
60f08c3bdfSopenharmony_ciFILE *temp;
61f08c3bdfSopenharmony_ciint TST_TOTAL = 1;
62f08c3bdfSopenharmony_ci
63f08c3bdfSopenharmony_cistatic void setup(void);
64f08c3bdfSopenharmony_cistatic void blenter(void);
65f08c3bdfSopenharmony_cistatic void blexit(void);
66f08c3bdfSopenharmony_cistatic int numin(char *, double *);
67f08c3bdfSopenharmony_cistatic int checkbuf(char *, int, int);
68f08c3bdfSopenharmony_ci
69f08c3bdfSopenharmony_ci/*--------------------------------------------------------------*/
70f08c3bdfSopenharmony_ciint main(void)
71f08c3bdfSopenharmony_ci{
72f08c3bdfSopenharmony_ci	register int i, j;
73f08c3bdfSopenharmony_ci	double r1, r2, x;
74f08c3bdfSopenharmony_ci	char buf[100];
75f08c3bdfSopenharmony_ci
76f08c3bdfSopenharmony_ci	setup();		/* temp file is now open        */
77f08c3bdfSopenharmony_ci	pi = 4.0 * atan(1.0);
78f08c3bdfSopenharmony_ci
79f08c3bdfSopenharmony_ci/*--------------------------------------------------------------*/
80f08c3bdfSopenharmony_ci	blenter();
81f08c3bdfSopenharmony_ci
82f08c3bdfSopenharmony_ci	for (i = 0; i < 30; i++)
83f08c3bdfSopenharmony_ci		for (j = 0; j < 30; j++) {
84f08c3bdfSopenharmony_ci			sprintf(buf, "%*.*f", i, j, pi);
85f08c3bdfSopenharmony_ci			if (checkbuf(buf, i, j)) {
86f08c3bdfSopenharmony_ci				fprintf(temp, "output conversion incorrect.");
87f08c3bdfSopenharmony_ci				fprintf(temp, "%*.*f = '%s'", i, j, pi, buf);
88f08c3bdfSopenharmony_ci				local_flag = FAILED;
89f08c3bdfSopenharmony_ci			}
90f08c3bdfSopenharmony_ci			r1 = atof(buf);
91f08c3bdfSopenharmony_ci			if (numin(buf, &r2)) {
92f08c3bdfSopenharmony_ci				fprintf(temp, "\tnumin('%s') failed\n", buf);
93f08c3bdfSopenharmony_ci				local_flag = FAILED;
94f08c3bdfSopenharmony_ci			}
95f08c3bdfSopenharmony_ci			x = fabs(r1 - r2);
96f08c3bdfSopenharmony_ci			if (x > ERR) {
97f08c3bdfSopenharmony_ci				fprintf(temp, "\tcompare fails, %f vs %f\n",
98f08c3bdfSopenharmony_ci					r1, r2);
99f08c3bdfSopenharmony_ci				fprintf(temp, "\terr value is %f\n", x);
100f08c3bdfSopenharmony_ci				local_flag = FAILED;
101f08c3bdfSopenharmony_ci			}
102f08c3bdfSopenharmony_ci			if (local_flag == FAILED)
103f08c3bdfSopenharmony_ci				break;
104f08c3bdfSopenharmony_ci		}
105f08c3bdfSopenharmony_ci
106f08c3bdfSopenharmony_ci	blexit();
107f08c3bdfSopenharmony_ci/*--------------------------------------------------------------*/
108f08c3bdfSopenharmony_ci	blenter();
109f08c3bdfSopenharmony_ci
110f08c3bdfSopenharmony_ci	x = 1.0 - exp(-100.0);	/* 1.0 - very small number */
111f08c3bdfSopenharmony_ci	sprintf(buf, "%f", x);
112f08c3bdfSopenharmony_ci	r1 = atof(buf);
113f08c3bdfSopenharmony_ci	if (r1 != 1.0) {
114f08c3bdfSopenharmony_ci		fprintf(temp, "\tsprintf small # failed\n");
115f08c3bdfSopenharmony_ci		fprintf(temp, "\t printed '%s', expected 1.0\n", buf);
116f08c3bdfSopenharmony_ci		local_flag = FAILED;
117f08c3bdfSopenharmony_ci	}
118f08c3bdfSopenharmony_ci
119f08c3bdfSopenharmony_ci	blexit();
120f08c3bdfSopenharmony_ci/*--------------------------------------------------------------*/
121f08c3bdfSopenharmony_ci	blenter();
122f08c3bdfSopenharmony_ci
123f08c3bdfSopenharmony_ci	for (i = 1; i < 200; i++) {
124f08c3bdfSopenharmony_ci		x = 100.0 / (double)i;
125f08c3bdfSopenharmony_ci		sprintf(buf, "%f", x);
126f08c3bdfSopenharmony_ci		r1 = atof(buf);
127f08c3bdfSopenharmony_ci		if (numin(buf, &r2)) {
128f08c3bdfSopenharmony_ci			fprintf(temp, "\tnumin('%s') failed\n", buf);
129f08c3bdfSopenharmony_ci			local_flag = FAILED;
130f08c3bdfSopenharmony_ci		}
131f08c3bdfSopenharmony_ci		/*
132f08c3bdfSopenharmony_ci		 * Order subtraction  to produce a positive number.
133f08c3bdfSopenharmony_ci		 * Then subtrace "fudge" factor which should give us
134f08c3bdfSopenharmony_ci		 * a negative number, as the result fo subtraction should
135f08c3bdfSopenharmony_ci		 * always be smaller than the fudge factor.
136f08c3bdfSopenharmony_ci		 */
137f08c3bdfSopenharmony_ci		if (r1 > r2)
138f08c3bdfSopenharmony_ci			x = r1 - r2 - 1e-10;
139f08c3bdfSopenharmony_ci		else
140f08c3bdfSopenharmony_ci			x = r2 - r1 - 1e-10;
141f08c3bdfSopenharmony_ci		if (x > 0.0) {
142f08c3bdfSopenharmony_ci			fprintf(temp, "\tx = %.15f = %e\n", x, x);
143f08c3bdfSopenharmony_ci			fprintf(temp, "\titeration %d\n", i);
144f08c3bdfSopenharmony_ci			fprintf(temp, "\tcompare fails, %f vs %f\n", r1, r2);
145f08c3bdfSopenharmony_ci			fprintf(temp, "\tcompare fails, %.15f vs %.15f\n",
146f08c3bdfSopenharmony_ci				r1, r2);
147f08c3bdfSopenharmony_ci			fprintf(temp, "\tbuf = '%s'\n", buf);
148f08c3bdfSopenharmony_ci			x = r1 - r2;
149f08c3bdfSopenharmony_ci			if (x == 0.0)
150f08c3bdfSopenharmony_ci				fprintf(temp, "\tx == 0.0\n");
151f08c3bdfSopenharmony_ci			else
152f08c3bdfSopenharmony_ci				fprintf(temp, "\tx != 0.0\n");
153f08c3bdfSopenharmony_ci			fprintf(temp, "\tx = %.15f = %e\n", x, x);
154f08c3bdfSopenharmony_ci			local_flag = FAILED;
155f08c3bdfSopenharmony_ci		}
156f08c3bdfSopenharmony_ci		if (local_flag == FAILED)
157f08c3bdfSopenharmony_ci			break;
158f08c3bdfSopenharmony_ci	}
159f08c3bdfSopenharmony_ci
160f08c3bdfSopenharmony_ci	blexit();
161f08c3bdfSopenharmony_ci/*--------------------------------------------------------------*/
162f08c3bdfSopenharmony_ci	blenter();
163f08c3bdfSopenharmony_ci
164f08c3bdfSopenharmony_ci	for (i = -1; i > -200; i--) {
165f08c3bdfSopenharmony_ci		x = 100.0 / (double)i;
166f08c3bdfSopenharmony_ci		sprintf(buf, "%f", x);
167f08c3bdfSopenharmony_ci		r1 = atof(buf);
168f08c3bdfSopenharmony_ci		if (numin(buf, &r2)) {
169f08c3bdfSopenharmony_ci			fprintf(temp, "\tnumin('%s') failed\n", buf);
170f08c3bdfSopenharmony_ci			local_flag = FAILED;
171f08c3bdfSopenharmony_ci		}
172f08c3bdfSopenharmony_ci		/*
173f08c3bdfSopenharmony_ci		 * Same ordering of subtraction as above.
174f08c3bdfSopenharmony_ci		 */
175f08c3bdfSopenharmony_ci		if (r1 > r2)
176f08c3bdfSopenharmony_ci			x = r1 - r2 - 1e-10;
177f08c3bdfSopenharmony_ci		else
178f08c3bdfSopenharmony_ci			x = r2 - r1 - 1e-10;
179f08c3bdfSopenharmony_ci		if (x > 0.0) {
180f08c3bdfSopenharmony_ci			fprintf(temp, "\tcompare fails, %f vs %f\n", r1, r2);
181f08c3bdfSopenharmony_ci			fprintf(temp, "\tcompare fails, %.15f vs %.15f\n",
182f08c3bdfSopenharmony_ci				r1, r2);
183f08c3bdfSopenharmony_ci			x = r1 - r2;
184f08c3bdfSopenharmony_ci			if (x == 0.0)
185f08c3bdfSopenharmony_ci				fprintf(temp, "\tx == 0.0)\n");
186f08c3bdfSopenharmony_ci			else
187f08c3bdfSopenharmony_ci				fprintf(temp, "\tx != 0.0\n");
188f08c3bdfSopenharmony_ci			fprintf(temp, "\tx = %.15f = %e\n", x, x);
189f08c3bdfSopenharmony_ci			local_flag = FAILED;
190f08c3bdfSopenharmony_ci		}
191f08c3bdfSopenharmony_ci		if (local_flag == FAILED)
192f08c3bdfSopenharmony_ci			break;
193f08c3bdfSopenharmony_ci	}
194f08c3bdfSopenharmony_ci
195f08c3bdfSopenharmony_ci	blexit();
196f08c3bdfSopenharmony_ci/*--------------------------------------------------------------*/
197f08c3bdfSopenharmony_ci	tst_exit();
198f08c3bdfSopenharmony_ci}
199f08c3bdfSopenharmony_ci
200f08c3bdfSopenharmony_ci/* FUNCTIONS GO HERE */
201f08c3bdfSopenharmony_ci
202f08c3bdfSopenharmony_cistatic int numin(char *str, double *rval)
203f08c3bdfSopenharmony_ci{
204f08c3bdfSopenharmony_ci	register int i, v3, e_flag;
205f08c3bdfSopenharmony_ci	register char c;
206f08c3bdfSopenharmony_ci	double val, v1, v2, k;
207f08c3bdfSopenharmony_ci	int neg_flag = 0;
208f08c3bdfSopenharmony_ci
209f08c3bdfSopenharmony_ci	val = v1 = v2 = 0.0;
210f08c3bdfSopenharmony_ci	v3 = 0;
211f08c3bdfSopenharmony_ci	k = 0.1;
212f08c3bdfSopenharmony_ci
213f08c3bdfSopenharmony_ci	while (*str == ' ')	/* scan past white space */
214f08c3bdfSopenharmony_ci		str++;
215f08c3bdfSopenharmony_ci
216f08c3bdfSopenharmony_ci	if (*str == '-') {	/* negitive value test */
217f08c3bdfSopenharmony_ci		neg_flag++;
218f08c3bdfSopenharmony_ci		str++;
219f08c3bdfSopenharmony_ci	}
220f08c3bdfSopenharmony_ci
221f08c3bdfSopenharmony_ci	for (;;) {
222f08c3bdfSopenharmony_ci		c = *str;
223f08c3bdfSopenharmony_ci		if (!isdigit(c))
224f08c3bdfSopenharmony_ci			break;
225f08c3bdfSopenharmony_ci		v1 *= 10.0;
226f08c3bdfSopenharmony_ci		v1 += (double)(c - '0');
227f08c3bdfSopenharmony_ci		str++;
228f08c3bdfSopenharmony_ci	}
229f08c3bdfSopenharmony_ci
230f08c3bdfSopenharmony_ci	val = v1;
231f08c3bdfSopenharmony_ci
232f08c3bdfSopenharmony_ci#ifdef DEBUG
233f08c3bdfSopenharmony_ci	printf("First conversion, val = %f = %e\n", val, val);
234f08c3bdfSopenharmony_ci#endif
235f08c3bdfSopenharmony_ci
236f08c3bdfSopenharmony_ci	if (*str == '.') {
237f08c3bdfSopenharmony_ci		str++;
238f08c3bdfSopenharmony_ci		for (;;) {
239f08c3bdfSopenharmony_ci			c = *str;
240f08c3bdfSopenharmony_ci			if (!isdigit(c))
241f08c3bdfSopenharmony_ci				break;
242f08c3bdfSopenharmony_ci			v2 += k * (double)(c - '0');
243f08c3bdfSopenharmony_ci			k /= 10.0;
244f08c3bdfSopenharmony_ci			str++;
245f08c3bdfSopenharmony_ci		}
246f08c3bdfSopenharmony_ci		val += v2;
247f08c3bdfSopenharmony_ci	}
248f08c3bdfSopenharmony_ci#ifdef DEBUG
249f08c3bdfSopenharmony_ci	printf("Second conversion, val = %f = %e\n", val, val);
250f08c3bdfSopenharmony_ci#endif
251f08c3bdfSopenharmony_ci
252f08c3bdfSopenharmony_ci	if (*str == 'e') {
253f08c3bdfSopenharmony_ci		str++;
254f08c3bdfSopenharmony_ci		switch (*str) {
255f08c3bdfSopenharmony_ci		case '+':
256f08c3bdfSopenharmony_ci			e_flag = 1;
257f08c3bdfSopenharmony_ci			break;
258f08c3bdfSopenharmony_ci		case '-':
259f08c3bdfSopenharmony_ci			e_flag = -1;
260f08c3bdfSopenharmony_ci			break;
261f08c3bdfSopenharmony_ci		default:
262f08c3bdfSopenharmony_ci			fprintf(temp, "\tbad char '%c' after 'e'\n", *str);
263f08c3bdfSopenharmony_ci			printf("bad char '%c' after 'e'\n", *str);
264f08c3bdfSopenharmony_ci			return (-1);
265f08c3bdfSopenharmony_ci		}
266f08c3bdfSopenharmony_ci		str++;
267f08c3bdfSopenharmony_ci		if (!isdigit(*str)) {
268f08c3bdfSopenharmony_ci			fprintf(temp, "\tbad exponent field\n");
269f08c3bdfSopenharmony_ci			printf("bad exponent field\n");
270f08c3bdfSopenharmony_ci			return (-1);
271f08c3bdfSopenharmony_ci		}
272f08c3bdfSopenharmony_ci		v3 = 10 * (int)(*str - '0');
273f08c3bdfSopenharmony_ci		str++;
274f08c3bdfSopenharmony_ci		if (!isdigit(*str)) {
275f08c3bdfSopenharmony_ci			fprintf(temp, "\tbad exponent field\n");
276f08c3bdfSopenharmony_ci			printf("bad exponent field\n");
277f08c3bdfSopenharmony_ci			return (-1);
278f08c3bdfSopenharmony_ci		}
279f08c3bdfSopenharmony_ci		v3 += (int)(*str - '0');
280f08c3bdfSopenharmony_ci		str++;
281f08c3bdfSopenharmony_ci		for (i = 0; i < v3; i++) {
282f08c3bdfSopenharmony_ci			if (e_flag > 0)
283f08c3bdfSopenharmony_ci				val *= 10.0;
284f08c3bdfSopenharmony_ci			else
285f08c3bdfSopenharmony_ci				val *= 0.1;
286f08c3bdfSopenharmony_ci		}
287f08c3bdfSopenharmony_ci	}
288f08c3bdfSopenharmony_ci
289f08c3bdfSopenharmony_ci	if (neg_flag)
290f08c3bdfSopenharmony_ci		val *= -1.0;
291f08c3bdfSopenharmony_ci
292f08c3bdfSopenharmony_ci#ifdef DEBUG
293f08c3bdfSopenharmony_ci	printf("Third conversion, val = %f = %e\n", val, val);
294f08c3bdfSopenharmony_ci	printf("v1 = %f, v2 = %f, v3 = %d\n", v1, v2, v3);
295f08c3bdfSopenharmony_ci#endif
296f08c3bdfSopenharmony_ci
297f08c3bdfSopenharmony_ci	switch (*str) {
298f08c3bdfSopenharmony_ci	case '\0':
299f08c3bdfSopenharmony_ci	case ' ':
300f08c3bdfSopenharmony_ci	case '\t':
301f08c3bdfSopenharmony_ci	case '\n':
302f08c3bdfSopenharmony_ci		break;
303f08c3bdfSopenharmony_ci	default:
304f08c3bdfSopenharmony_ci		printf("unexpected char '%c'\n", *str);
305f08c3bdfSopenharmony_ci		return (-1);
306f08c3bdfSopenharmony_ci	}
307f08c3bdfSopenharmony_ci
308f08c3bdfSopenharmony_ci	*rval = val;
309f08c3bdfSopenharmony_ci	return (0);
310f08c3bdfSopenharmony_ci}
311f08c3bdfSopenharmony_ci
312f08c3bdfSopenharmony_cistatic int checkbuf(char *str, int n1, int n2)
313f08c3bdfSopenharmony_ci{
314f08c3bdfSopenharmony_ci	register int bd;	/* before decimal point */
315f08c3bdfSopenharmony_ci	register int ad;	/* after decimal point */
316f08c3bdfSopenharmony_ci	register int tw;	/* total width */
317f08c3bdfSopenharmony_ci	register int dp;	/* decimal point */
318f08c3bdfSopenharmony_ci	char *buf;
319f08c3bdfSopenharmony_ci
320f08c3bdfSopenharmony_ci	bd = ad = dp = 0;
321f08c3bdfSopenharmony_ci	buf = str;
322f08c3bdfSopenharmony_ci
323f08c3bdfSopenharmony_ci	while (*str && *str != '.') {
324f08c3bdfSopenharmony_ci		bd++;
325f08c3bdfSopenharmony_ci		str++;
326f08c3bdfSopenharmony_ci	}
327f08c3bdfSopenharmony_ci	if (*str == '.') {
328f08c3bdfSopenharmony_ci		dp++;
329f08c3bdfSopenharmony_ci		str++;
330f08c3bdfSopenharmony_ci		if (*str) {
331f08c3bdfSopenharmony_ci			while (*str) {
332f08c3bdfSopenharmony_ci				ad++;
333f08c3bdfSopenharmony_ci				str++;
334f08c3bdfSopenharmony_ci			}
335f08c3bdfSopenharmony_ci		}
336f08c3bdfSopenharmony_ci	}
337f08c3bdfSopenharmony_ci
338f08c3bdfSopenharmony_ci	tw = bd + dp + ad;
339f08c3bdfSopenharmony_ci	if (!n1)
340f08c3bdfSopenharmony_ci		n1++;
341f08c3bdfSopenharmony_ci	if (tw < n1) {
342f08c3bdfSopenharmony_ci		fprintf(temp, "\tWidth too small.\n");
343f08c3bdfSopenharmony_ci		fprintf(temp, "\tn1 = %d, n2 = %d, buf= '%s'\n", n1, n2, buf);
344f08c3bdfSopenharmony_ci		return (-1);
345f08c3bdfSopenharmony_ci	}
346f08c3bdfSopenharmony_ci
347f08c3bdfSopenharmony_ci	if (ad != n2) {
348f08c3bdfSopenharmony_ci		fprintf(temp, "\tNumber after decimal wrong.\n");
349f08c3bdfSopenharmony_ci		fprintf(temp, "\tn1 = %d, n2 = %d, buf= '%s'\n", n1, n2, buf);
350f08c3bdfSopenharmony_ci		return (-1);
351f08c3bdfSopenharmony_ci	}
352f08c3bdfSopenharmony_ci
353f08c3bdfSopenharmony_ci	if (n2 && !dp) {
354f08c3bdfSopenharmony_ci		fprintf(temp, "\tMissed decimal point.\n");
355f08c3bdfSopenharmony_ci		fprintf(temp, "\tn1 = %d, n2 = %d, buf= '%s'\n", n1, n2, buf);
356f08c3bdfSopenharmony_ci		return (-1);
357f08c3bdfSopenharmony_ci	}
358f08c3bdfSopenharmony_ci
359f08c3bdfSopenharmony_ci	return (0);
360f08c3bdfSopenharmony_ci}
361f08c3bdfSopenharmony_ci
362f08c3bdfSopenharmony_ci/**	LTP Port	**/
363f08c3bdfSopenharmony_cistatic void setup(void)
364f08c3bdfSopenharmony_ci{
365f08c3bdfSopenharmony_ci	temp = stderr;
366f08c3bdfSopenharmony_ci}
367f08c3bdfSopenharmony_ci
368f08c3bdfSopenharmony_cistatic void blenter(void)
369f08c3bdfSopenharmony_ci{
370f08c3bdfSopenharmony_ci	local_flag = PASSED;
371f08c3bdfSopenharmony_ci}
372f08c3bdfSopenharmony_ci
373f08c3bdfSopenharmony_cistatic void blexit(void)
374f08c3bdfSopenharmony_ci{
375f08c3bdfSopenharmony_ci	if (local_flag == PASSED)
376f08c3bdfSopenharmony_ci		tst_resm(TPASS, "Test passed");
377f08c3bdfSopenharmony_ci	else
378f08c3bdfSopenharmony_ci		tst_resm(TFAIL, "Test failed");
379f08c3bdfSopenharmony_ci}
380