Skip to content

Commit 04b0427

Browse files
author
Dave Shepperd
committed
Fix exprs_test.h. Somehow it got screwed up doing a git commit.
1 parent eedad52 commit 04b0427

File tree

1 file changed

+5
-306
lines changed

1 file changed

+5
-306
lines changed

exprs_test.h

+5-306
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
exprs_test.c - simple test code for lib_exprs.[ch].
2+
exprs_test.h - simple test code for lib_exprs.[ch].
33
Copyright (C) 2022 David Shepperd
44
55
This program is free software: you can redistribute it and/or modify
@@ -15,311 +15,10 @@
1515
You should have received a copy of the GNU General Public License
1616
along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
#include <stdio.h>
19-
#include <stdlib.h>
20-
#include <string.h>
21-
#include <unistd.h>
22-
#include <ctype.h>
23-
#include <pthread.h>
18+
#ifndef _EXPRS_TEST_H_
19+
#define _EXPRS_TEST_H_ (1)
2420

25-
#include "lib_exprs.h"
26-
#include "exprs_test.h"
21+
extern int exprsTest(int verbose);
2722

28-
typedef struct
29-
{
30-
const char *expr; /* Expression to test */
31-
ExprsTermTypes_t expectedResultType; /* Expected type of result */
32-
long expectedInt; /* If result type is int, then expect this value */
33-
double expectedFloat; /* If result type is float, then expect this value */
34-
const char *expectedString; /* If result type is string, then expect this value */
35-
} TestExprs_t;
36-
37-
static const TestExprs_t TestExprs[] =
38-
{
39-
{ "\"plainString\"", EXPRS_TERM_STRING, 0, 0, "plainString" }, /* Text string (text delimited with quotes) */
40-
{ "\"plain\\\"S\\\"tring\"", EXPRS_TERM_STRING, 0, 0, "plain\"S\"tring" }, /* Text string (text delimited with quotes) */
41-
{ "'plainString'", EXPRS_TERM_STRING, 0, 0, "plainString" }, /* Text string (text delimited with quotes) */
42-
{ "3.14159", EXPRS_TERM_FLOAT, 0, 3.14159, NULL }, /* floating point number */
43-
{ "100", EXPRS_TERM_INTEGER, 100, 0, NULL }, /* integer number */
44-
{ "0xFF", EXPRS_TERM_INTEGER, 0xFF, 0, NULL }, /* integer number */
45-
{ "0d1234", EXPRS_TERM_INTEGER, 1234, 0, NULL }, /* integer number */
46-
{ "0b11111111", EXPRS_TERM_INTEGER, 255, 0, NULL }, /* integer number */
47-
{ "+21", EXPRS_TERM_INTEGER, 21, 0, NULL }, // EXPRS_TERM_PLUS, /* + (unary term) */
48-
{ "+21.0", EXPRS_TERM_FLOAT, 0, 21.0, NULL }, // EXPRS_TERM_PLUS, /* + (unary term) */
49-
{ "-22", EXPRS_TERM_INTEGER, -22, 0, NULL }, // EXPRS_TERM_MINUS, /* - (unary term in this case) */
50-
{ "-22.0", EXPRS_TERM_FLOAT, 0, -22.0, NULL }, // EXPRS_TERM_MINUS, /* - (unary term in this case) */
51-
{ "~3", EXPRS_TERM_INTEGER, ~3, 0, NULL }, // EXPRS_TERM_COM, /* ~ */
52-
{ "~3.3", EXPRS_TERM_INTEGER, ~3, 0, NULL }, // EXPRS_TERM_COM, /* ~ */
53-
{ "~+3", EXPRS_TERM_INTEGER, ~3, 0, NULL }, // EXPRS_TERM_COM, /* ~ */
54-
{ "~+3.3", EXPRS_TERM_INTEGER, ~3, 0, NULL }, // EXPRS_TERM_COM, /* ~ */
55-
{ "~-3", EXPRS_TERM_INTEGER, ~-3, 0, NULL }, // EXPRS_TERM_COM, /* ~ */
56-
{ "~-3.3", EXPRS_TERM_INTEGER, ~-3, 0, NULL }, // EXPRS_TERM_COM, /* ~ */
57-
{ "!100", EXPRS_TERM_INTEGER, !100, 0, NULL }, // EXPRS_TERM_NOT, /* ! */
58-
{ "!100.100", EXPRS_TERM_INTEGER, !100, 0, NULL }, // EXPRS_TERM_NOT, /* ! */
59-
{ "2**8", EXPRS_TERM_INTEGER, 1<<8, 0, NULL }, // EXPRS_TERM_POW, /* ** */
60-
{ "2.0**8", EXPRS_TERM_FLOAT, 0, 256.0, NULL }, // EXPRS_TERM_POW, /* ** */
61-
{ "2**8.0", EXPRS_TERM_FLOAT, 0, 256.0, NULL }, // EXPRS_TERM_POW, /* ** */
62-
{ "2.0**8.0", EXPRS_TERM_FLOAT, 0, 256.0, NULL }, // EXPRS_TERM_POW, /* ** */
63-
{ "2*3", EXPRS_TERM_INTEGER, 6, 0, NULL }, // EXPRS_TERM_MUL, /* * */
64-
{ "2*3.0", EXPRS_TERM_FLOAT, 0, 6.0, NULL }, // EXPRS_TERM_MUL, /* * */
65-
{ "2.0*3", EXPRS_TERM_FLOAT, 0, 6.0, NULL }, // EXPRS_TERM_MUL, /* * */
66-
{ "2.0*3.0", EXPRS_TERM_FLOAT, 0, 6.0, NULL }, // EXPRS_TERM_MUL, /* * */
67-
{ "100/2", EXPRS_TERM_INTEGER, 50, 0, NULL }, // EXPRS_TERM_DIV, /* / */
68-
{ "100/2.0", EXPRS_TERM_FLOAT, 0, 50.0, NULL }, // EXPRS_TERM_DIV, /* / */
69-
{ "100.0/2", EXPRS_TERM_FLOAT, 0, 50.0, NULL }, // EXPRS_TERM_DIV, /* / */
70-
{ "100.0/2.0", EXPRS_TERM_FLOAT, 0, 50.0, NULL }, // EXPRS_TERM_DIV, /* / */
71-
{ "110%25", EXPRS_TERM_INTEGER, 10, 0, NULL }, // EXPRS_TERM_MOD, /* % */
72-
{ "110.0%25", EXPRS_TERM_FLOAT, 0, 10.0, NULL }, // EXPRS_TERM_MOD, /* % */
73-
{ "110%25.0", EXPRS_TERM_FLOAT, 0, 10.0, NULL }, // EXPRS_TERM_MOD, /* % */
74-
{ "110.0%25.0", EXPRS_TERM_FLOAT, 0, 10.0, NULL }, // EXPRS_TERM_MOD, /* % */
75-
{ "1+2", EXPRS_TERM_INTEGER, 3, 0, NULL }, // EXPRS_TERM_ADD, /* + (binary term in this case) */
76-
{ "1+2.1", EXPRS_TERM_FLOAT, 0, 3.1, NULL }, // EXPRS_TERM_ADD, /* + (binary term in this case) */
77-
{ "1.2+2", EXPRS_TERM_FLOAT, 0, 3.2, NULL }, // EXPRS_TERM_ADD, /* + (binary term in this case) */
78-
{ "1.2+2.3", EXPRS_TERM_FLOAT, 0, 3.5, NULL }, // EXPRS_TERM_ADD, /* + (binary term in this case) */
79-
{ "1.2+\"2.3\"", EXPRS_TERM_STRING, 0, 0, "1.22.3" }, // EXPRS_TERM_PLUS, /* + (binary term in this case) */
80-
{ "\"2.3\"+1.2", EXPRS_TERM_STRING, 0, 0, "2.31.2" }, // EXPRS_TERM_PLUS, /* + (binary term in this case) */
81-
{ "2-1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_SUB, /* - (unary term in this case) */
82-
{ "2.0-1", EXPRS_TERM_FLOAT, 0, 1.0, NULL }, // EXPRS_TERM_SUB, /* - (unary term in this case) */
83-
{ "2-1.0", EXPRS_TERM_FLOAT, 0, 1.0, NULL }, // EXPRS_TERM_SUB, /* - (unary term in this case) */
84-
{ "2.0-1.0", EXPRS_TERM_FLOAT, 1, 1.0, NULL }, // EXPRS_TERM_SUB, /* - (unary term in this case) */
85-
{ "1<<4", EXPRS_TERM_INTEGER, 16, 0, NULL }, // EXPRS_TERM_ASL, /* << */
86-
{ "1.1<<4", EXPRS_TERM_INTEGER, 16, 0, NULL }, // EXPRS_TERM_ASL, /* << */
87-
{ "1<<4.1", EXPRS_TERM_INTEGER, 16, 0, NULL }, // EXPRS_TERM_ASL, /* << */
88-
{ "1.1<<4.1", EXPRS_TERM_INTEGER, 16, 0, NULL }, // EXPRS_TERM_ASL, /* << */
89-
{ "32>>2", EXPRS_TERM_INTEGER, 8, 0, NULL }, // EXPRS_TERM_ASR, /* >> */
90-
{ "32.1>>2", EXPRS_TERM_INTEGER, 8, 0, NULL }, // EXPRS_TERM_ASR, /* >> */
91-
{ "32>>2.1", EXPRS_TERM_INTEGER, 8, 0, NULL }, // EXPRS_TERM_ASR, /* >> */
92-
{ "32.1>>2.1", EXPRS_TERM_INTEGER, 8, 0, NULL }, // EXPRS_TERM_ASR, /* >> */
93-
94-
{ "1>2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_GT, /* > */
95-
{ "1.1>2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_GT, /* > */
96-
{ "1>2.2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_GT, /* > */
97-
{ "1.1>2.2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_GT, /* > */
98-
{ "2>1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GT, /* > */
99-
{ "2.2>1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GT, /* > */
100-
{ "2>1.1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GT, /* > */
101-
{ "2.2>1.1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GT, /* > */
102-
103-
{ "1>=2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_GE, /* > */
104-
{ "1.1>=2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_GE, /* > */
105-
{ "1>=2.2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_GE, /* > */
106-
{ "1.1>=2.2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_GE, /* > */
107-
{ "2>=2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GE, /* > */
108-
{ "2.0>=2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GE, /* > */
109-
{ "2>=2.0", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GE, /* > */
110-
{ "2.2>=2.2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GE, /* > */
111-
{ "2>=1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GE, /* > */
112-
{ "2.2>=1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GE, /* > */
113-
{ "2>=1.1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GE, /* > */
114-
{ "2.2>=1.1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_GE, /* > */
115-
116-
{ "1<2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LT, /* > */
117-
{ "1.1<2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LT, /* > */
118-
{ "1<2.2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LT, /* > */
119-
{ "1.1<2.2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LT, /* > */
120-
{ "2<1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LT, /* > */
121-
{ "2.2<1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LT, /* > */
122-
{ "2<1.1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LT, /* > */
123-
{ "2.2<1.1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LT, /* > */
124-
125-
{ "1<=2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LE, /* > */
126-
{ "1.1<=2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LE, /* > */
127-
{ "1<=2.2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LE, /* > */
128-
{ "1.1<=2.2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LE, /* > */
129-
{ "2<=2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LE, /* > */
130-
{ "2.0<=2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LE, /* > */
131-
{ "2<=2.0", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LE, /* > */
132-
{ "2.2<=2.2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LE, /* > */
133-
{ "2<=1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LE, /* > */
134-
{ "2.2<=1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LE, /* > */
135-
{ "2<=1.1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LE, /* > */
136-
{ "2.2<=1.1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LE, /* > */
137-
138-
{ "2==2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_EQ, /* > */
139-
{ "2.0==2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_EQ, /* > */
140-
{ "2==2.0", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_EQ, /* > */
141-
{ "2.2==2.2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_EQ, /* > */
142-
143-
{ "2==1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_EQ, /* > */
144-
{ "2.0==1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_EQ, /* > */
145-
{ "2==1.0", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_EQ, /* > */
146-
{ "2.2==1.1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_EQ, /* > */
147-
148-
{ "2!=2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_NE, /* > */
149-
{ "2.0!=2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_NE, /* > */
150-
{ "2!=2.0", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_NE, /* > */
151-
{ "2.2!=2.2", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_NE, /* > */
152-
153-
{ "2!=1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_NE, /* > */
154-
{ "2.0!=1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_NE, /* > */
155-
{ "2!=1.0", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_NE, /* > */
156-
{ "2.2!=1.1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_NE, /* > */
157-
158-
{ "0xFF&0x7F", EXPRS_TERM_INTEGER, 0x7F, 0, NULL }, // EXPRS_TERM_AND, /* & */
159-
{ "255.5&0x7F", EXPRS_TERM_INTEGER, 0x7F, 0, NULL }, // EXPRS_TERM_AND, /* & */
160-
{ "255&127.0", EXPRS_TERM_INTEGER, 0x7F, 0, NULL }, // EXPRS_TERM_AND, /* & */
161-
{ "255.5&127.5", EXPRS_TERM_INTEGER, 0x7F, 0, NULL }, // EXPRS_TERM_AND, /* & */
162-
163-
{ "0xFF^0x7F", EXPRS_TERM_INTEGER, 0x80, 0, NULL }, // EXPRS_TERM_XOR, /* ^ */
164-
{ "255.5^0x7F", EXPRS_TERM_INTEGER, 0x80, 0, NULL }, // EXPRS_TERM_XOR, /* ^ */
165-
{ "255^127.0", EXPRS_TERM_INTEGER, 0x80, 0, NULL }, // EXPRS_TERM_XOR, /* ^ */
166-
{ "255.5^127.5", EXPRS_TERM_INTEGER, 0x80, 0, NULL }, // EXPRS_TERM_XOR, /* ^ */
167-
168-
{ "128|64", EXPRS_TERM_INTEGER, 0xC0, 0, NULL }, // EXPRS_TERM_OR, /* | */
169-
{ "128.5|64", EXPRS_TERM_INTEGER, 0xC0, 0, NULL }, // EXPRS_TERM_OR, /* | */
170-
{ "128|64.5", EXPRS_TERM_INTEGER, 0xC0, 0, NULL }, // EXPRS_TERM_OR, /* | */
171-
{ "128.9|64.9", EXPRS_TERM_INTEGER, 0xC0, 0, NULL }, // EXPRS_TERM_OR, /* | */
172-
173-
{ "1&&2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LAND, /* && */
174-
{ "1.9&&2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LAND, /* && */
175-
{ "1&&2.9", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LAND, /* && */
176-
{ "1.9&&2.9", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LAND, /* && */
177-
178-
{ "0&&0", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LAND, /* && */
179-
{ "1&&0", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LAND, /* && */
180-
{ "1&&0.0", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LAND, /* && */
181-
{ "1.9&&0", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LAND, /* && */
182-
{ "1.9&&0.0", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LAND, /* && */
183-
184-
{ "0&&1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LAND, /* && */
185-
{ "0&&1.0", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LAND, /* && */
186-
{ "0.0&&1", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LAND, /* && */
187-
{ "0.0&&1.9", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LAND, /* && */
188-
189-
{ "1||2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
190-
{ "1.9||2", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
191-
{ "1||2.9", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
192-
{ "1.9||2.9", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
193-
194-
{ "0||0", EXPRS_TERM_INTEGER, 0, 0, NULL }, // EXPRS_TERM_LOR, /* || */
195-
{ "1||0", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
196-
{ "1||0.0", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
197-
{ "1.9||0", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
198-
{ "1.9||0.0", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
199-
{ "0||1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
200-
{ "0.0||1", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
201-
{ "0||1.9", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
202-
{ "0.0||1.9", EXPRS_TERM_INTEGER, 1, 0, NULL }, // EXPRS_TERM_LOR, /* || */
203-
204-
{ "1+(2+3)*4", EXPRS_TERM_INTEGER, 1+(2+3)*4, 0, NULL }, /* Test parenthesis */
205-
{ "1+2*3/4-6", EXPRS_TERM_INTEGER, 1+2*3/4-6, 0, NULL }, /* Test precedence */
206-
{ "2+2**2*4/2", EXPRS_TERM_INTEGER, 10, 0, NULL }, /* Test precedence */
207-
208-
};
209-
210-
static int getValue(char *buf, int bufLen, const char *title, const ExprsTerm_t *result, const TestExprs_t *tVal)
211-
{
212-
int sLen;
213-
sLen = snprintf(buf,bufLen,"%s type ", title);
214-
if ( tVal )
215-
{
216-
sLen += snprintf(buf + sLen, bufLen - sLen, "%d, value ", tVal->expectedResultType);
217-
if ( tVal->expectedResultType == EXPRS_TERM_INTEGER )
218-
sLen += snprintf(buf + sLen, bufLen - sLen, "%ld", tVal->expectedInt);
219-
else if ( tVal->expectedResultType == EXPRS_TERM_FLOAT )
220-
sLen += snprintf(buf + sLen, bufLen - sLen, "%g", tVal->expectedFloat);
221-
else
222-
sLen += snprintf(buf + sLen, bufLen - sLen, "\"%s\"", tVal->expectedString);
223-
}
224-
else
225-
{
226-
sLen += snprintf(buf+sLen,bufLen-sLen,"%d, value ", result->termType);
227-
if ( result->termType == EXPRS_TERM_INTEGER )
228-
sLen += snprintf(buf+sLen,bufLen-sLen,"%ld", result->term.s64);
229-
else if ( result->termType == EXPRS_TERM_FLOAT )
230-
sLen += snprintf(buf+sLen,bufLen-sLen,"%g", result->term.f64);
231-
else if ( result->termType == EXPRS_TERM_STRING )
232-
{
233-
char quote, *cp = result->term.string;
234-
unsigned char cc;
235-
quote = strchr(cp,'"') ? '\'':'"';
236-
sLen += snprintf(buf+sLen,bufLen-sLen,"%c",quote);
237-
while ( (cc = *cp) )
238-
{
239-
if ( isprint(cc) )
240-
sLen += snprintf(buf+sLen,bufLen-sLen,"%c",cc);
241-
else
242-
sLen += snprintf(buf+sLen,bufLen-sLen,"\\x%02X",cc);
243-
++cp;
244-
}
245-
sLen += snprintf(buf+sLen,bufLen-sLen,"%c", quote);
246-
}
247-
else
248-
sLen += snprintf(buf+sLen,bufLen-sLen,"!! Type is not integer, float or string !!");
249-
}
250-
return sLen;
251-
}
252-
253-
int exprsTest(int verbose)
254-
{
255-
ExprsDef_t *exprs;
256-
ExprsTerm_t result;
257-
const TestExprs_t *pExp;
258-
ExprsErrs_t err;
259-
int ii, retV=0, fatal=0;
260-
char buf[256];
261-
int sLen;
262-
263-
exprs = libExprsInit(NULL, 0, 0, 0);
264-
if ( !exprs )
265-
{
266-
fprintf(stderr,"Out of memory doing libExprsInit()\n");
267-
return 1;
268-
}
269-
libExprsSetVerbose(exprs,verbose);
270-
pExp = TestExprs;
271-
for (ii=0; ii < n_elts(TestExprs) && !fatal; ++ii, ++pExp)
272-
{
273-
err = libExprsEval(exprs, pExp->expr, &result, 0);
274-
if ( err )
275-
{
276-
printf("%3d: Expression '%s' returned error %d: %s\n", ii, pExp->expr, err, libExprsGetErrorStr(err));
277-
retV = 1;
278-
continue;
279-
}
280-
if ( result.termType != pExp->expectedResultType )
281-
{
282-
sLen = snprintf(buf,sizeof(buf),"%3d: Type mismatch. Expression '%s' ", ii, pExp->expr);
283-
sLen += getValue(buf+sLen,sizeof(buf)-sLen, "expected",NULL,pExp);
284-
sLen += getValue(buf+sLen,sizeof(buf)-sLen, ". Got ",&result,NULL);
285-
printf("%s\n",buf);
286-
}
287-
else
288-
{
289-
int diff=0;
290-
switch (pExp->expectedResultType)
291-
{
292-
case EXPRS_TERM_INTEGER:
293-
if ( pExp->expectedInt != result.term.s64 )
294-
diff = 1;
295-
break;
296-
case EXPRS_TERM_FLOAT:
297-
if ( pExp->expectedFloat != result.term.f64 )
298-
diff = 1;
299-
break;
300-
case EXPRS_TERM_STRING:
301-
if ( strcmp(pExp->expectedString,result.term.string) )
302-
diff = 1;
303-
break;
304-
default:
305-
printf("FATAL: Exprs %d '%s' has undefined expected result type %d\n", ii, pExp->expr, pExp->expectedResultType);
306-
fatal = 1;
307-
retV = 1;
308-
break;
309-
}
310-
if ( diff )
311-
{
312-
sLen = snprintf(buf, sizeof(buf), "%3d: Value mismatch. Expression '%s' ", ii, pExp->expr);
313-
sLen += getValue(buf+sLen,sizeof(buf)-sLen, "expected",NULL,pExp);
314-
sLen += getValue(buf+sLen,sizeof(buf)-sLen, ". Got ",&result,NULL);
315-
printf("%s\n",buf);
316-
retV = 1;
317-
}
318-
}
319-
}
320-
libExprsDestroy(exprs);
321-
if ( !retV )
322-
printf("Passed all the tests.\n");
323-
return retV;
324-
}
23+
#endif /* _EXPRS_TEST_H_ */
32524

0 commit comments

Comments
 (0)