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