# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: file:///home/davazp/projects/gnupdf/trunk/
# testament_sha1: e6faad00fc6d6a437ddeb9e33bb873289ee572dd
# timestamp: 2009-02-24 19:04:33 +0100
# base_revision_id: address@hidden
#
# Begin patch
=== modified file 'AUTHORS'
--- AUTHORS 2009-01-14 20:59:55 +0000
+++ AUTHORS 2009-02-03 18:11:29 +0000
@@ -232,23 +232,31 @@
Zac Brown: changed doc/gnupdf.texi src/base/pdf-fsys-disk.c
David Vazquez: wrote /torture/unit/base/crypt/
- /torture/unit/base/crypt/pdf-crypt-cipher-decrypt.c
- /torture/unit/base/crypt/pdf-crypt-cipher-decrypt-size.c
- /torture/unit/base/crypt/pdf-crypt-cipher-destroy.c
- /torture/unit/base/crypt/pdf-crypt-cipher-encrypt.c
- /torture/unit/base/crypt/pdf-crypt-cipher-encrypt-size.c
- /torture/unit/base/crypt/pdf-crypt-cipher-new.c
- /torture/unit/base/crypt/pdf-crypt-cipher-setkey.c
- /torture/unit/base/crypt/pdf-crypt-init.c
- /torture/unit/base/crypt/pdf-crypt-md-md5.c
- /torture/unit/base/crypt/tsuite-crypt.c
- /src/base/pdf-crypt.c
- /src/base/pdf-crypt-c-aesv2.c
- /src/base/pdf-crypt-c-aesv2.h
- /src/base/pdf-crypt-c-v2.c
- /src/base/pdf-crypt-c-v2.h
- /src/base/pdf-crypt.h
+ torture/unit/base/crypt/pdf-crypt-cipher-decrypt.c
+ torture/unit/base/crypt/pdf-crypt-cipher-decrypt-size.c
+ torture/unit/base/crypt/pdf-crypt-cipher-destroy.c
+ torture/unit/base/crypt/pdf-crypt-cipher-encrypt.c
+ torture/unit/base/crypt/pdf-crypt-cipher-encrypt-size.c
+ torture/unit/base/crypt/pdf-crypt-cipher-new.c
+ torture/unit/base/crypt/pdf-crypt-cipher-setkey.c
+ torture/unit/base/crypt/pdf-crypt-init.c
+ torture/unit/base/crypt/pdf-crypt-md-md5.c
+ torture/unit/base/crypt/tsuite-crypt.c
+ src/base/pdf-crypt.c
+ src/base/pdf-crypt-c-aesv2.c
+ src/base/pdf-crypt-c-aesv2.h
+ src/base/pdf-crypt-c-v2.c
+ src/base/pdf-crypt-c-v2.h
+ src/base/pdf-crypt.h
+ src/base/pdf-stm-f-aesv2.c
+ src/base/pdf-stm-f-aesv2.h
+ src/base/pdf-stm-f-md5.c
+ src/base/pdf-stm-f-md5.h
+ src/base/pdf-stm-f-v2.c
+ src/base/pdf-stm-f-v2.h
and changed doc/gnupdf.texi
+ torture/unit/base/stm/pdf-stm-read.c
+ torture/unit/base/stm/pdf-stm-write.c
Michael Gold: changed src/Makefile.am utils/Makefile.am
torture/unit/Makefile.am
=== modified file 'ChangeLog'
--- ChangeLog 2009-02-22 18:21:26 +0000
+++ ChangeLog 2009-02-24 18:04:06 +0000
@@ -1,3 +1,9 @@
+2009-02-24 David Vazquez
+
+ * doc/gnupdf.texi (Evaluation of Functions): Section updated.
+
+ * torture/unit/base/fp/pdf-fp-func-eval.c: Negative tests added.
+
2009-02-22 Jose E. Marchesi
* doc/gnupdf.texi (Big Numbers): Clarify that a 64bits value can
@@ -28,6 +34,21 @@
* doc/gnupdf-arch.texi (Tokeniser module): New section.
+2009-02-08 David Vazquez
+
+ * src/base/pdf-fp-func.c (pdf_fp_func_4_new): Fix checking of
+ balanced braces wrongly, and manages others errors.
+
+ * src/base/pdf-error.h (PDF_ERROR_LIST): Errors for type 4
+ functions added.
+
+2009-02-07 David Vazquez
+
+ * torture/unit/base/fp/pdf-fp-func-4-new.c: New file
+
+ * src/base/pdf-fp-func.c (pdf_fp_func_4_new): New arguments for
+ error management.
+
2009-02-06 Jose E. Marchesi
* src/base/pdf-stm.c (pdf_stm_flush): Return PDF_EEOF if it was
=== modified file 'doc/gnupdf.texi'
--- doc/gnupdf.texi 2009-02-22 18:21:26 +0000
+++ doc/gnupdf.texi 2009-02-24 18:04:06 +0000
@@ -5232,7 +5232,7 @@
@end table
@end deftypefun
address@hidden pdf_status_t pdf_fp_func_4_new (pdf_u32_t @var{m}, pdf_u32_t @var{n}, pdf_real_t @var{domain}[], pdf_real_t @var{range}[], pdf_char_t address@hidden, pdf_size_t @var{code_size}, pdf_fp_func_t address@hidden)
address@hidden pdf_status_t pdf_fp_func_4_new (pdf_u32_t @var{m}, pdf_u32_t @var{n}, pdf_real_t @var{domain}[], pdf_real_t @var{range}[], pdf_char_t address@hidden, pdf_size_t @var{code_size}, pdf_size_t address@hidden, pdf_fp_func_t address@hidden)
Create a new type 4 (postscript calculator) function.
@@ -5254,6 +5254,8 @@
Memory buffer containing the postscript code to execute.
@item code_size
Size of @var{code}.
address@hidden error_at
+Pointer to a variable where it will put the current offset on error.
@item function
Pointer to a variable holding the new function.
@end table
@@ -5325,7 +5327,7 @@
@end table
@end deftypefun
address@hidden pdf_status_t pdf_fp_func_eval (pdf_fp_func_t @var{function}, const pdf_real_t @var{in}[], pdf_real_t @var{out}[])
address@hidden pdf_status_t pdf_fp_func_eval (pdf_fp_func_t @var{function}, const pdf_real_t @var{in}[], pdf_real_t @var{out}[], pdf_fp_func_debug_t address@hidden)
Evaluate a function.
@@ -5338,6 +5340,8 @@
Array containing the input values for the function.
@item out
Array containing the output values from the function evaluation.
address@hidden debug
+A pointer to the structure will contain debug information.
@end table
@item Returns
A PDF status value:
=== modified file 'src/base/pdf-error.h'
--- src/base/pdf-error.h 2009-01-14 20:39:58 +0000
+++ src/base/pdf-error.h 2009-02-20 19:04:32 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/13 22:06:33 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-02-16 22:15:40 davazp"
*
* File: pdf-error.h
* Date: Sun Feb 24 20:22:05 2008
@@ -87,13 +87,24 @@
ERROR_ENTRY (PDF_EEXIST, "already exists"), \
ERROR_ENTRY (PDF_EOPENED, "file is opened"), \
ERROR_ENTRY (PDF_ECLOSED, "file is closed"), \
- ERROR_ENTRY (PDF_EOVERFLOW, "/FunctionType 0: Sample Table too large"), \
+ ERROR_ENTRY (PDF_EOVERFLOW, "Input is too large"), \
+ ERROR_ENTRY (PDF_EUNDERFLOW, "Input is too small"), \
ERROR_ENTRY (PDF_EMTOOBIG, "/FunctionType 0: input dim too high (<= 12)"), \
ERROR_ENTRY (PDF_EBADSAMPLES, "/FunctionType 0: error while reading sample table"), \
ERROR_ENTRY (PDF_EBADAESKEY, "the size of an AES key should be a multiple of 16"), \
ERROR_ENTRY (PDF_EBADV2KEY, "a V2 key should be at least 40 bits long"), \
- ERROR_ENTRY (PDF_EINVOP, "invalid operation")
-
+ ERROR_ENTRY (PDF_EINVOP, "invalid operation"), \
+ ERROR_ENTRY (PDF_EBADOP, "/FunctionType 4: Unknown operator"), \
+ ERROR_ENTRY (PDF_EMISSBODY, "/FunctionType 4: Missing body conditional"), \
+ ERROR_ENTRY (PDF_ENOWRAP, "/FunctionType 4: Code should be wrapped by braces"), \
+ ERROR_ENTRY (PDF_ETOODEPTH, "/FunctionType 4: Exceeded the max depth level"), \
+ ERROR_ENTRY (PDF_EMISSIF, "/FunctionType 4: Missing if/ifelse operator"), \
+ ERROR_ENTRY (PDF_EBADTYPE, "/FunctionType 4: Bad type"), \
+ ERROR_ENTRY (PDF_EMATH, "/FunctionType 4: Math error"), \
+ ERROR_ENTRY (PDF_ETYPE0, "/FunctionType 0: Error"), \
+ ERROR_ENTRY (PDF_ETYPE2, "/FunctionType 2: Error"), \
+ ERROR_ENTRY (PDF_ETYPE3, "/FunctionType 3: Error"), \
+ ERROR_ENTRY (PDF_ETYPE4, "/FunctionType 4: Error")
#define ERROR_ENTRY(id,string) id
enum pdf_status_e
=== modified file 'src/base/pdf-fp-func.c'
--- src/base/pdf-fp-func.c 2009-01-03 22:17:53 +0000
+++ src/base/pdf-fp-func.c 2009-02-24 17:53:55 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/03 21:29:32 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-02-24 18:52:09 davazp"
*
* File: pdf-fp-func.c
* Date: Sun Nov 30 18:46:06 2008
@@ -42,26 +42,38 @@
static pdf_i32_t get_token (pdf_char_t *buf,
pdf_size_t buf_size,
- pdf_size_t *cur_pos,
+ pdf_size_t start,
+ pdf_size_t *bot,
+ pdf_size_t *eot,
double *literal);
static inline void setmap (double map[2],
const pdf_real_t to[2],
const pdf_real_t from[2]);
+
static pdf_status_t pdf_eval_spline (pdf_fp_func_t fun,
const pdf_real_t t[],
- pdf_real_t out[]);
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug);
+
static pdf_status_t pdf_eval_linear (pdf_fp_func_t fun,
const pdf_real_t t[],
- pdf_real_t out[]);
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug);
+
static pdf_status_t pdf_eval_exponential (pdf_fp_func_t t,
const pdf_real_t in[],
- pdf_real_t out[]);
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug);
+
static pdf_status_t pdf_eval_stitch (pdf_fp_func_t t,
const pdf_real_t in[],
- pdf_real_t out[]);
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug);
+
static pdf_status_t pdf_eval_type4(pdf_fp_func_t t,
const pdf_real_t in[],
- pdf_real_t out[]);
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug);
typedef enum
{
@@ -366,24 +378,35 @@
return ret;
}
-pdf_status_t pdf_fp_func_4_new (pdf_u32_t m,
- pdf_u32_t n,
- pdf_real_t domain[],
- pdf_real_t range[],
- pdf_char_t *code,
- pdf_size_t code_size,
- pdf_fp_func_t *function)
+#define BRACES_MAX_LEVEL 32
+
+pdf_status_t
+pdf_fp_func_4_new (pdf_u32_t m,
+ pdf_u32_t n,
+ pdf_real_t domain[],
+ pdf_real_t range[],
+ pdf_char_t *code,
+ pdf_size_t code_size,
+ pdf_size_t *error_at,
+ pdf_fp_func_t *function)
{
pdf_fp_func_t f;
- pdf_u32_t off[32];
+ pdf_u32_t off[BRACES_MAX_LEVEL];
+ pdf_u32_t braces_pos[BRACES_MAX_LEVEL];
pdf_char_t *op;
pdf_i32_t at;
pdf_i32_t to;
pdf_i32_t alloc;
pdf_i32_t bsp;
+ pdf_i32_t blevel; /* braces level depth */
double lit;
pdf_i32_t opc;
+ pdf_size_t beg_pos; /* beginning of current token */
pdf_size_t cur_pos;
+ pdf_status_t ret;
+ pdf_u32_t (*debug_off)[2];
+ pdf_size_t debug_size;
+ pdf_size_t debug_alloc;
/* Common data */
f = pdf_alloc (sizeof(struct pdf_fp_func_s));
@@ -395,20 +418,28 @@
/* Specific data */
cur_pos = 0;
+ beg_pos = 0;
alloc = 64;
op = pdf_alloc (alloc);
- opc = get_token (code, code_size, &cur_pos, &lit);
+ debug_alloc = 64;
+ debug_size = 0;
+ debug_off = pdf_alloc (sizeof(*debug_off) * debug_alloc);
+
+ opc = get_token (code, code_size, cur_pos, &beg_pos, &cur_pos, &lit);
if (opc != OPC_begin)
{
+ ret = PDF_ENOWRAP;
goto fail;
}
+ blevel = 1;
bsp = 0;
at = 0;
for(;;)
{
- if (bsp >= sizeof(off)/sizeof(off[0]))
+ if (bsp >= BRACES_MAX_LEVEL)
{
+ ret = PDF_ETOODEPTH;
goto fail;
}
@@ -417,15 +448,29 @@
alloc *= 2;
op = pdf_realloc (op,alloc);
}
- opc = get_token (code, code_size, &cur_pos, &lit);
+
+ if (debug_size >= debug_alloc)
+ {
+ debug_alloc *= 2;
+ debug_off = pdf_realloc (debug_off, sizeof(*debug_off) * debug_alloc);
+ }
+
+
+ beg_pos = cur_pos;
+ opc = get_token (code, code_size, cur_pos, &beg_pos, &cur_pos, &lit);
if (opc < 0)
{
+ ret = PDF_EEOF;
goto fail;
}
switch ((PDF_TYPE4_OPC)opc)
{
case OPC_lit:
{
+ debug_off[debug_size][0] = at;
+ debug_off[debug_size][1] = beg_pos;
+ debug_size++;
+
op[at++] = opc;
memcpy (op+at, &lit, sizeof(lit));
at += sizeof (lit);
@@ -433,26 +478,56 @@
}
case OPC_begin:
{
- off[bsp++] = at; /* backpatched by if/ifelse */
+ blevel++;
+ off[bsp] = at; /* backpatched by if/ifelse */
+ braces_pos[bsp] = beg_pos;
+ bsp++;
+
+ debug_off[debug_size][0] = at;
+ debug_off[debug_size][1] = beg_pos;
+ debug_size++;
+
op[at] = OPC_begin; /* OPC_error */
at += 1+sizeof(at);
+
break;
}
case OPC_end:
{
- if (bsp)
+ blevel--;
+
+ if (blevel)
{
- off[bsp++] = at;
+ off[bsp] = at;
+ braces_pos[bsp] = beg_pos;
+ bsp++;
}
else
{
void *r;
+
+ debug_off[debug_size][0] = at;
+ debug_off[debug_size][1] = beg_pos;
+ debug_size++;
+
op[at++] = OPC_ret;
- if (get_token (code, code_size, &cur_pos, &lit) >= 0)
- {
- goto fail;
- }
+
+ if (get_token (code, code_size, cur_pos, &beg_pos, &cur_pos, &lit) >= 0)
+ {
+ ret = PDF_ENOWRAP;
+ goto fail;
+ }
+
+ if (bsp)
+ {
+ beg_pos = braces_pos[--bsp]; /* reporting error offset */
+ ret = PDF_EMISSIF;
+ goto fail;
+ }
+
/* memory is transferred to f, not freed here */
+ debug_off = pdf_realloc (debug_off, sizeof(*debug_off) * debug_alloc);
+
r = pdf_realloc (op,at);
if (r)
{
@@ -461,6 +536,9 @@
f->u.t4.opcodes = op;
f->u.t4.n_opcodes = at;
+ f->u.t4.debug_off = debug_off;
+ f->u.t4.debug_size = debug_size;
+
f->eval = pdf_eval_type4;
goto success;
@@ -471,9 +549,15 @@
{
if (bsp < 2 || at != off[--bsp])
{
+ ret = PDF_EMISSBODY;
goto fail;
}
- op[off[--bsp]] = OPC_jnt;
+
+ debug_off[debug_size][0] = --bsp;
+ debug_off[debug_size][1] = beg_pos;
+ debug_size++;
+
+ op[off[bsp]] = OPC_jnt;
to = at - 1;
memcpy(op+1+off[bsp],&to,sizeof(to));
break;
@@ -482,16 +566,22 @@
{
if (bsp < 4 || at != off[--bsp])
{
+ ret = PDF_EMISSBODY;
goto fail;
}
- op[off[--bsp]] = OPC_jmp;
+ debug_off[debug_size][0] = --bsp;
+ debug_off[debug_size][1] = beg_pos;
+ debug_size++;
+
+ op[off[bsp]] = OPC_jmp;
to = at-1;
memcpy(op+off[bsp]+1,&to,sizeof(to));
to = off[bsp--];
if (to != off[bsp--])
{
+ ret = PDF_EMISSBODY;
goto fail;
}
to += sizeof(to);
@@ -501,12 +591,16 @@
}
case OPC_bad:
{
- /* stream offset would be nice */
+ ret = PDF_EBADOP;
goto fail;
break;
}
default:
{
+ debug_off[debug_size][0] = at;
+ debug_off[debug_size][1] = beg_pos;
+ debug_size++;
+
op[at++] = opc;
break;
}
@@ -516,8 +610,13 @@
fail:
pdf_dealloc (op);
- return PDF_ERROR;
-
+ pdf_dealloc (debug_off);
+
+ if (error_at != NULL)
+ {
+ *error_at = beg_pos;
+ }
+ return ret;
success:
*function = f;
@@ -527,9 +626,10 @@
pdf_status_t
pdf_fp_func_eval (pdf_fp_func_t function,
const pdf_real_t in[],
- pdf_real_t out[])
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * result)
{
- return function->eval(function, in, out);
+ return function->eval(function, in, out, result);
}
pdf_status_t
@@ -593,6 +693,7 @@
break;
case 4:
pdf_dealloc (t->u.t4.opcodes);
+ pdf_dealloc (t->u.t4.debug_off);
break;
}
@@ -968,7 +1069,8 @@
static pdf_status_t
pdf_eval_linear (pdf_fp_func_t fun,
const pdf_real_t in[],
- pdf_real_t out[])
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug)
{
pdf_u32_t i,j;
double t;
@@ -1051,7 +1153,8 @@
static pdf_status_t
pdf_eval_spline (pdf_fp_func_t fun,
const pdf_real_t in[],
- pdf_real_t out[])
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug)
{
pdf_u32_t i,j;
double t,v;
@@ -1142,7 +1245,8 @@
static pdf_status_t
pdf_eval_exponential (pdf_fp_func_t t,
const pdf_real_t in[],
- pdf_real_t out[])
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug)
{
pdf_u32_t j;
pdf_real_t x,y;
@@ -1169,7 +1273,8 @@
static pdf_status_t
pdf_eval_stitch (pdf_fp_func_t t,
const pdf_real_t in[],
- pdf_real_t out[])
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug)
{
pdf_fp_func_t f;
pdf_real_t x;
@@ -1223,7 +1328,7 @@
f = t->u.t3.functions[i];
- return f->eval(f,&x,out);
+ return f->eval(f,&x,out, debug);
}
/* ------- decoder utilities ------ */
@@ -1291,7 +1396,7 @@
/* --- ------------------------------- --- */
-#define NSTACK 100
+#define NSTACK PDF_FP_FUNC_TYPE4_STACK_SIZE
#define REP_TRUE (1.202056903159594285399738162)
#define REP_FALSE (-15116315767.09215686274509804)
#define INT(xyyzy) ((int) pdf_fp_floor (xyyzy))
@@ -1302,7 +1407,8 @@
static pdf_status_t
pdf_eval_type4 (pdf_fp_func_t t,
const pdf_real_t in[],
- pdf_real_t out[])
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug)
{
double stack[NSTACK+2];
pdf_char_t *op;
@@ -1310,7 +1416,9 @@
double tmp;
pdf_i32_t sp;
pdf_i32_t pc;
-
+ pdf_fp_func_debug_t debug_info;
+ pdf_i32_t aux;
+
op = t->u.t4.opcodes;
n = t->u.t4.n_opcodes;
@@ -1334,7 +1442,7 @@
}
out[sp] = clip(stack[sp], t->range + 2*sp);
}
- return 0;
+ return PDF_OK;
break;
case OPC_lit:
if (sp >= NSTACK) goto stack_overflow;
@@ -1392,14 +1500,17 @@
break;
case OPC_log:
if (sp < 0) goto stack_underflow;
+ if (stack[sp] < 0) goto range_error;
stack[sp] = pdf_fp_log10 (stack[sp]);
break;
case OPC_ln:
if (sp < 0) goto stack_underflow;
+ if (stack[sp] < 0) goto range_error;
stack[sp] = pdf_fp_log (stack[sp]);
break;
case OPC_sqrt:
if (sp < 0) goto stack_underflow;
+ if (stack[sp] < 0) goto range_error;
stack[sp] = pdf_fp_sqrt (stack[sp]);
break;
case OPC_floor:
@@ -1495,6 +1606,7 @@
break;
case OPC_div:
if (sp < 1) goto stack_underflow;
+ if (stack[sp] == 0) goto math_error;
stack[sp-1] /= stack[sp];
sp--;
break;
@@ -1618,16 +1730,43 @@
}
}
- block_error : return -1;
- stack_underflow: printf("STACK UNDEFLOW\n"); return -1;
- stack_overflow : printf("STACK OVERFLOW\n"); return -1;
- stack_error : return -1;
- range_error : return -1;
- type_error : return -1;
- math_error : return -1;
+
+ block_error:
+ return PDF_ERROR;
+
+ stack_error:
+ return PDF_EINVRANGE;
+
+ stack_underflow: debug_info.type4.status = PDF_EUNDERFLOW; goto end;
+ stack_overflow: debug_info.type4.status = PDF_EOVERFLOW; goto end;
+ range_error: debug_info.type4.status = PDF_EINVRANGE; goto end;
+ type_error: debug_info.type4.status = PDF_EBADTYPE; goto end;
+ math_error: debug_info.type4.status = PDF_EMATH; goto end;
+ end:
+
+ /* Found that code was compiled to the opcode for debugging. */
+ debug_info.type4.op = -1;
+ for (aux = 0; aux < t->u.t4.debug_size; aux++)
+ {
+ if (t->u.t4.debug_off[aux][0] == pc)
+ {
+ debug_info.type4.op = t->u.t4.debug_off[aux][1];
+ break;
+ }
+ }
+
+ /* Copy some elements from the stack for debugging */
+ for (aux = 0; aux <= sp; aux++)
+ {
+ debug_info.type4.stack[aux] = stack[sp - aux];
+ }
+ debug_info.type4.stack_size = sp + 1;
+
+ if (debug != NULL)
+ *debug = debug_info;
+
+ return PDF_ETYPE4;
}
-
-
/* ANSI-C code produced by gperf version 3.0.1 */
/* Command-line: gperf -t -m 100 pdf_function_type4.gperf */
/* Computed positions: -k'1-3' */
@@ -1748,15 +1887,89 @@
return 0;
}
+
+
+static pdf_status_t
+parse_real (char * string, char ** end, double * out)
+{
+ int negative;
+ char * p;
+ unsigned int l_integer;
+ unsigned int l_decimal;
+ double x;
+
+ p = string;
+ l_integer = 0;
+ l_decimal = 0;
+
+ /* read sign */
+ negative = 0;
+ if (*p == '-')
+ {
+ p++;
+ negative = 1;
+ }
+ else if (*p == '+')
+ {
+ p++;
+ }
+
+ /* read integer part */
+ x = 0.0;
+ while (*p >= '0' && *p <= '9')
+ {
+ x *= 10;
+ x += *p - '0';
+ p++;
+ l_integer++;
+ }
+
+ /* read decimal part */
+ if (*p == '.')
+ {
+ unsigned int weight = 10;
+ p++;
+
+ while(*p >= '0' && *p <= '9')
+ {
+ double dig = ((double)(*p - '0')) / weight;
+ x += dig;
+ weight *= 10;
+ l_decimal++;
+ p++;
+ }
+ }
+
+ x = negative? -x: x;
+
+ if (end != NULL)
+ *end = p;
+
+ if (l_integer || l_decimal)
+ {
+ *out = x;
+ return PDF_OK;
+ }
+ else
+ return PDF_ERROR;
+}
+
+
+
+
static pdf_i32_t get_token (pdf_char_t *buffer,
pdf_size_t buf_size,
- pdf_size_t *cur_pos,
+ pdf_size_t start,
+ pdf_size_t *bot, /* beginning of token */
+ pdf_size_t *eot, /* end of token */
double *literal)
{
pdf_char_t c;
char buf[128];
char *end;
pdf_u32_t bp;
+ pdf_size_t cur_pos = start;
+ pdf_size_t beg_pos;
#define PDF_ISWHITE(foo) \
(((foo) <= 0x20) \
@@ -1764,13 +1977,13 @@
(foo) == 0x20 || (foo) == 0x09 || (foo) == 0x0a || (foo) == 0x0c \
|| (foo) == 0x0d || (foo) == 0x00))
- c = buffer[*cur_pos];
- while ((*cur_pos < buf_size) && PDF_ISWHITE(buffer[*cur_pos]))
+ c = buffer[cur_pos];
+ while ((cur_pos < buf_size) && PDF_ISWHITE(buffer[cur_pos]))
{
- (*cur_pos)++;
- c = buffer[*cur_pos];
+ cur_pos++;
+ c = buffer[cur_pos];
}
- if (*cur_pos == buf_size)
+ if (cur_pos == buf_size)
{
/* EOF condition */
return -1;
@@ -1778,11 +1991,12 @@
bp = 0;
buf[bp++] = c;
- (*cur_pos)++;
- while ((*cur_pos < buf_size) && !PDF_ISWHITE(buffer[*cur_pos]))
+ beg_pos = cur_pos;
+ cur_pos++;
+ while ((cur_pos < buf_size) && !PDF_ISWHITE(buffer[cur_pos]))
{
- c = buffer[*cur_pos];
- (*cur_pos)++;
+ c = buffer[cur_pos];
+ cur_pos++;
buf[bp++] = c;
if (bp >= sizeof(buf)/sizeof(buf[0]) || c >= 0x80)
{
@@ -1790,11 +2004,19 @@
}
}
buf[bp] = '\0';
+ *bot = beg_pos;
+ *eot = cur_pos;
+
if (isdigit(buf[0]) || buf[0] < 'a' )
{
- *literal = strtod (buf,&end);
- /* HF: recognizes a language larger than specified */
- return (*end) ? OPC_bad : OPC_lit;
+ if (parse_real (buf, &end, literal) == PDF_OK)
+ {
+ return OPC_lit;
+ }
+ else
+ {
+ return OPC_bad;
+ }
}
else
{
=== modified file 'src/base/pdf-fp-func.h'
--- src/base/pdf-fp-func.h 2008-12-02 20:28:39 +0000
+++ src/base/pdf-fp-func.h 2009-02-24 17:53:55 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/12/02 21:04:31 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-02-24 18:12:56 davazp"
*
* File: pdf-fp-func.h
* Date: Sun Nov 30 18:44:41 2008
@@ -35,8 +35,22 @@
typedef struct pdf_fp_func_s *pdf_fp_func_t;
+/* Interal size of the type 4 functions stack */
+#define PDF_FP_FUNC_TYPE4_STACK_SIZE 100
+
+typedef union
+{
+ struct {
+ pdf_status_t status;
+ pdf_i32_t op;
+ pdf_i32_t stack_size;
+ double stack[PDF_FP_FUNC_TYPE4_STACK_SIZE];
+ } type4;
+} pdf_fp_func_debug_t;
+
/* END PUBLIC */
+
struct pdf_fp_func_0_s
{
pdf_u32_t m;
@@ -85,7 +99,11 @@
{
pdf_char_t *opcodes;
pdf_u32_t n_opcodes;
- pdf_u32_t n_alloc;
+
+ /* debug info */
+ /* translate opcodes offset to code offset */
+ pdf_u32_t (*debug_off)[2];
+ pdf_size_t debug_size;
};
struct pdf_fp_func_s
@@ -98,7 +116,8 @@
pdf_i32_t init;
pdf_status_t (*eval) (pdf_fp_func_t fun,
const pdf_real_t in[],
- pdf_real_t out[]);
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug);
union
{
struct pdf_fp_func_0_s t0;
@@ -148,11 +167,13 @@
pdf_real_t range[],
pdf_char_t *code,
pdf_size_t code_size,
+ pdf_size_t *error_at,
pdf_fp_func_t *function);
pdf_status_t pdf_fp_func_eval (pdf_fp_func_t function,
const pdf_real_t in[],
- pdf_real_t out[]);
+ pdf_real_t out[],
+ pdf_fp_func_debug_t * debug);
pdf_status_t pdf_fp_func_get_bounds (const pdf_fp_func_t function,
pdf_i32_t *in_dimensions,
=== modified file 'torture/unit/Makefile.am'
--- torture/unit/Makefile.am 2009-01-01 19:35:42 +0000
+++ torture/unit/Makefile.am 2009-02-11 15:15:27 +0000
@@ -179,7 +179,8 @@
base/alloc/pdf-realloc.c \
base/alloc/pdf-dealloc.c
-TEST_SUITE_FP = base/fp/pdf-fp-func-eval.c
+TEST_SUITE_FP = base/fp/pdf-fp-func-eval.c \
+ base/fp/pdf-fp-func-4-new.c
TEST_ENVIRONMENT = CHARSETALIASDIR=$(top_srcdir)/lib
=== added file 'torture/unit/base/fp/pdf-fp-func-4-new.c'
--- torture/unit/base/fp/pdf-fp-func-4-new.c 1970-01-01 00:00:00 +0000
+++ torture/unit/base/fp/pdf-fp-func-4-new.c 2009-02-24 17:57:41 +0000
@@ -0,0 +1,255 @@
+/* -*- mode: C -*- Time-stamp: "2009-02-24 18:57:05 davazp"
+ *
+ * File: pdf-fp-func-eval.c
+ * Date: Sat Feb 7 18:55:51 2009
+ *
+ * GNU PDF Library - Unit tests for pdf_fp_func_4_new
+ *
+ */
+
+/* Copyright (C) 2009 Free Software Foundation, Inc. */
+
+/* This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+#include
+
+/*
+ * Test: pdf_fp_func_4_new_001
+ * Description:
+ * Create a syntactically wrong function.
+ * Success condition:
+ * Return PDF_ENOWRAP and the offset of the error is correct.
+ */
+
+START_TEST(pdf_fp_func_4_new_001)
+{
+ pdf_fp_func_t func;
+ pdf_size_t prog_size;
+ pdf_char_t prog[] =
+ "{"
+ " 0 eq"
+ " {"
+ " 1 1 eq } dup mul exch dup mul add 1 exch sub } if"
+ " } if "
+ "}";
+
+ pdf_real_t domain[4] = {-1.0, 1.0, -1.0, 1.0};
+ pdf_real_t range[2] = {-1.0, 1.0};
+ pdf_real_t in[2];
+ pdf_real_t out[1];
+ pdf_size_t error_at;
+ pdf_status_t ret;
+
+
+ prog_size = sizeof(prog);
+
+ /* Create the function */
+ ret = pdf_fp_func_4_new (2, 1,
+ domain,
+ range,
+ prog,
+ prog_size,
+ &error_at,
+ &func);
+
+ fail_if (ret != PDF_ENOWRAP);
+ fail_if (error_at != 58);
+}
+END_TEST
+
+
+
+/*
+ * Test: pdf_fp_func_4_new_002
+ * Description:
+ * Create a syntactically wrong function.
+ * Success condition:
+ * Return PDF_ENOWRAP and the offset of the error is correct.
+ */
+
+START_TEST(pdf_fp_func_4_new_002)
+{
+ pdf_fp_func_t func;
+ pdf_size_t prog_size;
+ pdf_char_t prog[] =
+ "{ dup } 2";
+
+ pdf_real_t domain[4] = {-1.0, 1.0, -1.0, 1.0};
+ pdf_real_t range[2] = {-1.0, 1.0};
+ pdf_real_t in[2];
+ pdf_real_t out[1];
+ pdf_size_t error_at;
+ pdf_status_t ret;
+
+
+ prog_size = sizeof(prog);
+
+ /* Create the function */
+ ret = pdf_fp_func_4_new (2, 1,
+ domain,
+ range,
+ prog,
+ prog_size,
+ &error_at,
+ &func);
+
+ fail_if (ret != PDF_ENOWRAP);
+ fail_if (error_at != 8);
+}
+END_TEST
+
+
+/*
+ * Test: pdf_fp_func_4_new_003
+ * Description:
+ * Create a syntactically wrong function.
+ * Success condition:
+ * Return PDF_ENOWRAP and the offset of the error is correct.
+ */
+
+START_TEST(pdf_fp_func_4_new_003)
+{
+ pdf_fp_func_t func;
+ pdf_size_t prog_size;
+ pdf_char_t prog[] =
+ "2 { dup }";
+
+ pdf_real_t domain[4] = {-1.0, 1.0, -1.0, 1.0};
+ pdf_real_t range[2] = {-1.0, 1.0};
+ pdf_real_t in[2];
+ pdf_real_t out[1];
+ pdf_size_t error_at;
+ pdf_status_t ret;
+
+
+ prog_size = sizeof(prog);
+
+ /* Create the function */
+ ret = pdf_fp_func_4_new (2, 1,
+ domain,
+ range,
+ prog,
+ prog_size,
+ &error_at,
+ &func);
+
+ fail_if (ret != PDF_ENOWRAP);
+ fail_if (error_at != 0);
+}
+END_TEST
+
+
+/*
+ * Test: pdf_fp_func_4_new_004
+ * Description:
+ * Create a syntactically wrong function.
+ * Success condition:
+ * Return PDF_EMISSIF and the offset of the error is correct.
+ */
+
+START_TEST(pdf_fp_func_4_new_004)
+{
+ pdf_fp_func_t func;
+ pdf_size_t prog_size;
+ pdf_char_t prog[] =
+ "{ { dup } }";
+
+ pdf_real_t domain[4] = {-1.0, 1.0, -1.0, 1.0};
+ pdf_real_t range[2] = {-1.0, 1.0};
+ pdf_real_t in[2];
+ pdf_real_t out[1];
+ pdf_size_t error_at;
+ pdf_status_t ret;
+
+
+ prog_size = sizeof(prog);
+
+ /* Create the function */
+ ret = pdf_fp_func_4_new (2, 1,
+ domain,
+ range,
+ prog,
+ prog_size,
+ &error_at,
+ &func);
+
+ fail_if (ret != PDF_EMISSIF);
+ fail_if (error_at != 8);
+}
+END_TEST
+
+
+/*
+ * Test: pdf_fp_func_4_new_005
+ * Description:
+ * Create a syntactically wrong function.
+ * Success condition:
+ * Return PDF_EMISSBODY and the offset of the error is correct.
+ */
+
+START_TEST(pdf_fp_func_4_new_005)
+{
+ pdf_fp_func_t func;
+ pdf_size_t prog_size;
+ pdf_char_t prog[] =
+ "{ 2 if }";
+
+ pdf_real_t domain[4] = {-1.0, 1.0, -1.0, 1.0};
+ pdf_real_t range[2] = {-1.0, 1.0};
+ pdf_real_t in[2];
+ pdf_real_t out[1];
+ pdf_size_t error_at;
+ pdf_status_t ret;
+
+
+ prog_size = sizeof(prog);
+
+ /* Create the function */
+ ret = pdf_fp_func_4_new (2, 1,
+ domain,
+ range,
+ prog,
+ prog_size,
+ &error_at,
+ &func);
+
+ fail_if (ret != PDF_EMISSBODY);
+ fail_if (error_at != 4);
+}
+END_TEST
+
+
+
+
+/*
+ * Test case creation function
+ */
+TCase *
+test_pdf_fp_func_4_new (void)
+{
+ TCase *tc = tcase_create("pdf_fp_func_4_new");
+ tcase_add_test(tc, pdf_fp_func_4_new_001);
+ tcase_add_test(tc, pdf_fp_func_4_new_002);
+ tcase_add_test(tc, pdf_fp_func_4_new_003);
+ tcase_add_test(tc, pdf_fp_func_4_new_004);
+ tcase_add_test(tc, pdf_fp_func_4_new_005);
+ return tc;
+}
+
+
+
+/* End of pdf-fp-func-4-new.c */
=== modified file 'torture/unit/base/fp/pdf-fp-func-eval.c'
--- torture/unit/base/fp/pdf-fp-func-eval.c 2009-01-03 22:17:53 +0000
+++ torture/unit/base/fp/pdf-fp-func-eval.c 2009-02-24 17:57:41 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/03 21:36:47 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-02-24 18:56:51 davazp"
*
* File: pdf-fp-func-eval.c
* Date: Tue Dec 2 20:11:38 2008
@@ -7,6 +7,22 @@
*
*/
+/* Copyright (C) 2008, 2009 Free Software Foundation, Inc. */
+
+/* This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
#include
#include
#include
@@ -46,13 +62,14 @@
pdf_real_t out[1];
prog_size = strlen (prog);
-
+
/* Create the function */
fail_if(pdf_fp_func_4_new (2, 1,
domain,
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -62,25 +79,25 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - simple_dot (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - simple_dot (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - simple_dot (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - simple_dot (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -121,6 +138,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -130,25 +148,25 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_simple_dot (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_simple_dot (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_simple_dot (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_simple_dot (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -194,6 +212,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -203,25 +222,25 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - double_dot (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - double_dot (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - double_dot (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - double_dot (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -268,6 +287,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -277,25 +297,25 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_double_dot (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_double_dot (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_double_dot (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_double_dot (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -342,6 +362,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -351,25 +372,25 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - cosine_dot (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - cosine_dot (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - cosine_dot (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - cosine_dot (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -417,6 +438,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -426,25 +448,25 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - double_f (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - double_f (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - double_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - double_f (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -493,6 +515,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -502,25 +525,25 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_double (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_double (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_double (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_double (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -561,6 +584,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -570,25 +594,25 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -629,6 +653,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -638,25 +663,25 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line_x (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line_x (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line_x (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line_x (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -697,6 +722,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -706,25 +732,25 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line_y (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line_y (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line_y (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - line_y (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -784,6 +810,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -793,37 +820,38 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - round_f (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - round_f (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - round_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - round_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - round_f (in[0], in[1])) > ABS_ERROR);
}
END_TEST
/*
* Test: pdf_fp_func_eval_012
+ * Type:
* Description:
* Evaluate a type 4 function implementing the predefined function
* Ellipse and compare the results with a C implementation.
@@ -887,6 +915,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -896,31 +925,31 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_f (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_f (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_f (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -961,6 +990,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -970,31 +1000,31 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_a (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_a (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_a (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_a (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_a (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -1035,6 +1065,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -1044,31 +1075,31 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_ellipse_a (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_ellipse_a (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_ellipse_a (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_ellipse_a (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_ellipse_a (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -1109,6 +1140,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -1118,31 +1150,31 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_b (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_b (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_b (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_b (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_b (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -1183,6 +1215,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -1192,31 +1225,31 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_c (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_c (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_c (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_c (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - ellipse_c (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -1257,6 +1290,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -1266,31 +1300,31 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_ellipse_c (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_ellipse_c (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_ellipse_c (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_ellipse_c (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - inverted_ellipse_c (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -1334,6 +1368,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -1343,31 +1378,31 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - square_f (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - square_f (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - square_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - square_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - square_f (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -1411,6 +1446,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -1420,31 +1456,31 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - cross_f (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - cross_f (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - cross_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - cross_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - cross_f (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -1485,6 +1521,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -1494,31 +1531,31 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - rhomboid_f (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - rhomboid_f (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - rhomboid_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - rhomboid_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - rhomboid_f (in[0], in[1])) > ABS_ERROR);
}
END_TEST
@@ -1584,6 +1621,7 @@
range,
prog,
prog_size,
+ NULL,
&func) != PDF_OK);
/*
@@ -1593,35 +1631,179 @@
/* x = 0, y = 0 */
in[0] = 0;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - diamond_f (in[0], in[1])) > ABS_ERROR);
/* x = 0, y = 1 */
in[0] = 0;
in[1] = 1;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - diamond_f (in[0], in[1])) > ABS_ERROR);
/* x = 1, y = 0 */
in[0] = 1;
in[1] = 0;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - diamond_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.322, y = 0.233 */
in[0] = 0.322;
in[1] = 0.233;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - diamond_f (in[0], in[1])) > ABS_ERROR);
/* x = 0.93, y = 0.82 */
in[0] = 0.93;
in[1] = 0.82;
- fail_if(pdf_fp_func_eval (func, in, out) != PDF_OK);
+ fail_if(pdf_fp_func_eval (func, in, out, NULL) != PDF_OK);
fail_if(pdf_fp_abs(out[0] - diamond_f (in[0], in[1])) > ABS_ERROR);
}
END_TEST
+
+
+/*
+ * Test: pdf_fp_func_eval_022
+ * Description:
+ * Evaluate a wrong type 4 function and detect the error.
+ * Success condition:
+ * Return PDF_ETYPE4 and the debug information is correct.
+ */
+
+START_TEST(pdf_fp_func_eval_022)
+{
+ pdf_fp_func_t func;
+ pdf_size_t prog_size;
+ pdf_char_t *prog =
+ "{ "
+ " 1 exch div "
+ " }";
+
+ pdf_real_t domain[1] = {-1.0};
+ pdf_real_t range[1] = {-1.0};
+ pdf_real_t in[1];
+ pdf_fp_func_debug_t debug;
+ pdf_real_t out[1];
+
+ prog_size = strlen (prog);
+
+ /* Create the function */
+ fail_if(pdf_fp_func_4_new (1, 1,
+ domain,
+ range,
+ prog,
+ prog_size,
+ NULL,
+ &func) != PDF_OK);
+
+ /* x = 0, y = 0 */
+ in[0] = 0;
+ fail_if (pdf_fp_func_eval (func, in, out, &debug) != PDF_ETYPE4);
+ fail_if (debug.type4.status != PDF_EMATH);
+ fail_if (debug.type4.op != 10);
+ fail_if (debug.type4.stack[0] != 0);
+ fail_if (debug.type4.stack[1] != 1);
+}
+END_TEST
+
+
+
+
+/*
+ * Test: pdf_fp_func_eval_023
+ * Description:
+ * Evaluate a wrong type 4 function and detect the error.
+ * Success condition:
+ * Return PDF_ETYPE4 and the debug information is correct.
+ */
+
+START_TEST(pdf_fp_func_eval_023)
+{
+ pdf_fp_func_t func;
+ pdf_size_t prog_size;
+ pdf_char_t *prog =
+ "{ "
+ " sqrt "
+ " }";
+
+ pdf_real_t domain[1] = {-1.0};
+ pdf_real_t range[1] = {-1.0};
+ pdf_real_t in[1];
+ pdf_fp_func_debug_t debug;
+ pdf_real_t out[1];
+
+ prog_size = strlen (prog);
+
+ /* Create the function */
+ fail_if(pdf_fp_func_4_new (1, 1,
+ domain,
+ range,
+ prog,
+ prog_size,
+ NULL,
+ &func) != PDF_OK);
+
+ /* x = 0, y = 0 */
+ in[0] = -1;
+ fail_if (pdf_fp_func_eval (func, in, out, &debug) != PDF_ETYPE4);
+ fail_if (debug.type4.status != PDF_EINVRANGE);
+ fail_if (debug.type4.op != 3);
+ fail_if (debug.type4.stack[0] != -1);
+}
+END_TEST
+
+
+
+
+
+/*
+ * Test: pdf_fp_func_eval_024
+ * Description:
+ * Evaluate a wrong type 4 function and detect the error.
+ * Success condition:
+ * Return PDF_ETYPE4 and the debug information is correct.
+ */
+
+START_TEST(pdf_fp_func_eval_024)
+{
+ pdf_fp_func_t func;
+ pdf_size_t prog_size;
+ pdf_char_t *prog =
+ "{ "
+ " log "
+ " }";
+
+ pdf_real_t domain[1] = {-1.0};
+ pdf_real_t range[1] = {-1.0};
+ pdf_real_t in[1];
+ pdf_fp_func_debug_t debug;
+ pdf_real_t out[1];
+
+ prog_size = strlen (prog);
+
+ /* Create the function */
+ fail_if(pdf_fp_func_4_new (1, 1,
+ domain,
+ range,
+ prog,
+ prog_size,
+ NULL,
+ &func) != PDF_OK);
+
+ /* x = 0, y = 0 */
+ in[0] = -1;
+ fail_if (pdf_fp_func_eval (func, in, out, &debug) != PDF_ETYPE4);
+ fail_if (debug.type4.status != PDF_EINVRANGE);
+ fail_if (debug.type4.op != 3);
+ fail_if (debug.type4.stack[0] != -1);
+}
+END_TEST
+
+
+
+
+
+
/*
* Test case creation function
*/
@@ -1650,6 +1832,9 @@
tcase_add_test(tc, pdf_fp_func_eval_019);
tcase_add_test(tc, pdf_fp_func_eval_020);
tcase_add_test(tc, pdf_fp_func_eval_021);
+ tcase_add_test(tc, pdf_fp_func_eval_022);
+ tcase_add_test(tc, pdf_fp_func_eval_023);
+ tcase_add_test(tc, pdf_fp_func_eval_024);
return tc;
}
=== modified file 'torture/unit/base/fp/tsuite-fp.c'
--- torture/unit/base/fp/tsuite-fp.c 2008-12-02 20:28:39 +0000
+++ torture/unit/base/fp/tsuite-fp.c 2009-02-11 15:15:27 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/12/02 20:22:07 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-02-07 18:56:43 davazp"
*
* File: tsuite-fp.c
* Date: Tue Dec 2 20:08:22 2008
@@ -25,8 +25,10 @@
#include
+extern TCase *test_pdf_fp_func_4_new (void);
extern TCase *test_pdf_fp_func_eval (void);
+
Suite *
tsuite_fp ()
{
@@ -34,6 +36,7 @@
s = suite_create("fp");
+ suite_add_tcase (s, test_pdf_fp_func_4_new ());
suite_add_tcase (s, test_pdf_fp_func_eval ());
return s;
# Begin bundle
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