diff --git a/src/ca/acctst.c b/src/ca/acctst.c index 69ca6fefc..cc275930f 100644 --- a/src/ca/acctst.c +++ b/src/ca/acctst.c @@ -19,7 +19,7 @@ static char *sccsId = "@(#) $Id$"; #include "os_depen.h" -#include +#include #include #define EVENT_ROUTINE null_event @@ -27,7 +27,11 @@ static char *sccsId = "@(#) $Id$"; #define NUM 1 -int conn_get_cb_count; +int conn_cb_count; + +#ifndef min +#define min(A,B) ((A)>(B)?(B):(A)) +#endif int doacctst(char *pname); void test_sync_groups(chid chix); @@ -35,9 +39,22 @@ void multiple_sg_requests(chid chix, CA_SYNC_GID gid); void null_event(struct event_handler_args args); void write_event(struct event_handler_args args); void conn(struct connection_handler_args args); -void conn_cb(struct event_handler_args args); +void get_cb(struct event_handler_args args); void accessSecurity_cb(struct access_rights_handler_args args); +void doubleTest( +chid chan, +dbr_double_t beginValue, +dbr_double_t increment, +dbr_double_t epsilon, +unsigned iterations); + +void floatTest( +chid chan, +dbr_float_t beginValue, +dbr_float_t increment, +dbr_float_t epsilon, +unsigned iterations); #ifdef vxWorks int acctst(char *pname) @@ -92,7 +109,7 @@ int doacctst(char *pname) SEVCHK(ca_task_initialize(), "Unable to initialize"); - conn_get_cb_count = 0; + conn_cb_count = 0; printf("begin\n"); #ifdef VMS @@ -213,34 +230,74 @@ int doacctst(char *pname) ca_read_access(chix1), ca_write_access(chix1)); +#if 0 /* * Verify that we can write and then read back - * the same value + * the same analog value */ if( (ca_field_type(chix1)==DBR_FLOAT || ca_field_type(chix1)==DBR_DOUBLE) && ca_read_access(chix1) && ca_write_access(chix1)){ - double dval = 3.3; - float fval = -8893.3; - double dret = DBL_MAX; - float fret = FLT_MAX; + double incr; + double epsil; + double base; + unsigned long iter; - status = ca_put(DBR_DOUBLE, chix1, &dval); - SEVCHK(status, NULL); - status = ca_get(DBR_DOUBLE, chix1, &dret); - SEVCHK(status, NULL); - ca_pend_io(30.0); - assert( fabs(dval-dret) < DBL_EPSILON*4); + printf ("float test ..."); + fflush(stdout); + epsil = FLT_EPSILON*4; + base = FLT_MIN; + for (i=FLT_MIN_EXP; i