Initial revision

This commit is contained in:
Bob Zieman
1992-02-19 08:21:23 +00:00
parent 3367a0f9d5
commit 7a212fff3e
2 changed files with 437 additions and 0 deletions

173
src/util/calcTest.c Normal file
View File

@@ -0,0 +1,173 @@
/* calcTest.c */
/* share/src/util ??? $Id$ */
/* calcTest.c - calcPerform Test Program
*
* Author: Janet Anderson
* Date: 02-05-92
*
* Experimental Physics and Industrial Control System (EPICS)
*
* Copyright 1991, the Regents of the University of California,
* and the University of Chicago Board of Governors.
*
* This software was produced under U.S. Government contracts:
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
* and (W-31-109-ENG-38) at Argonne National Laboratory.
*
* Initial development by:
* The Controls and Automation Group (AT-8)
* Ground Test Accelerator
* Accelerator Technology Division
* Los Alamos National Laboratory
*
* Co-developed with
* The Controls and Computing Group
* Accelerator Systems Division
* Advanced Photon Source
* Argonne National Laboratory
*
* Modification Log:
* -----------------
* .01 02-10-92 jba initial version
*
*/
#ifdef vxWorks
#include <vxWorks.h>
#include <stdioLib.h>
#include <strLib.h>
#else
#include <stdio.h>
#include <string.h>
#endif
#ifndef ERROR
#define ERROR -1
#endif
#ifndef OK
#define OK 0
#endif
#define PUT 0
#define GET 1
#define MAXLINE 150
char errmsg[MAXLINE];
long calcPerform();
long postfix();
void calcTest();
long doTestLine();
#ifndef vxWorks
main()
{
calcTest();
}
#endif
void calcTest()
{
char str[MAXLINE];
char testId[MAXLINE];
char expression[MAXLINE];
char parmList[MAXLINE];
char value[MAXLINE];
char verify[MAXLINE];
int count;
long status;
double parm[12];
short i;
/* get test line */
while ( gets(str)) {
/* print and skip null lines and comment lines */
if ( str[0]==NULL || str[0] == '!' ) {
printf("%s\n",str);
continue;
}
/* parse input line for fields */
count=sscanf(str,"%s \"%[^\"]\" \"%[^\"]\" %s %s",
testId,expression,parmList,value,verify);
/* check field count */
if ( count != 5 ) {
printf("\n%s\n",str);
printf ("***** ERROR ***** field count %d is less than 5\n",count);
continue;
}
/* parse parmList for parameters */
status=sscanf(parmList,"%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",
&parm[0],&parm[1],&parm[2],&parm[3],&parm[4],&parm[5],
&parm[6],&parm[7],&parm[8],&parm[9],&parm[10],&parm[11]);
if( status == EOF ){
printf("\n%s\n",str);
printf ("***** ERROR ***** Error in parameter list %s \n",parmList);
continue;
}
/* zero out rest of parameters */
for (i=status; i<12; i++) parm[i]=0.;
/* execute test line */
status=doTestLine(expression,parm,value,verify);
if ( status ){
printf("\n%s\n",str);
printf ("***** ERROR ***** status=%d %s\n",status,errmsg);
}
}
printf ("\ncalcTest ALL DONE\n\n\n");
}
long doTestLine(expression,parm,value,verify)
char expression[];
double parm[12];
char value[];
char verify[];
{
long status=0;
short error_number=0;
char rpbuf[80];
char valString[80];
double val;
/* convert an algebraic expression to symbolic postfix */
status=postfix(expression,rpbuf,&error_number);
if(status || error_number) {
sprintf(errmsg,"postfix error: status=%ld error_number=%d \n",status,error_number);
return ERROR;
}
/* perform calculation */
status=calcPerform(parm,&val,rpbuf);
if(status) {
sprintf(errmsg,"calcPerform error: status=%ld \n",status);
return ERROR;
}
/* convert calcPerform result to string */
sprintf(valString,"%-g",val);
/* verify calcPerform result*/
if (*verify == 'V'){
status=strcmp(value,valString);
if (status) {
sprintf(errmsg,"verify failed: calcPerform result: val=%s",valString);
return ERROR;
}
}
else printf("calcPerform result: %s\n",valString);
return OK;
}

264
src/util/in.calcTest Normal file
View File

@@ -0,0 +1,264 @@
! *****************************************************
! TEST OF
! calcPerform
!
! ------------- TEST CALCULATION ALGORITHM -------------
!
! *****************************************************
!
! ld <calcTest.o
!
!
!testId "expression" "parameters vals a-l" value verify?
!------ ------------ --------------------- ------ -------
!
! --------------------------------------Addition +
calcTest "a+b+c+d+e+f+g+h+i+j+k+l" "1 2 3 4 5 6 7 8 9 10 11 12" 78 VERIFY
! --------------------------------------Subtraction -
calcTest "a-b-c-d-e-f-g-h-i-j-k-l" "1 2 3 4 5 6 7 8 9 10 11 12" -76 VERIFY
! --------------------------------------Multiplication *
calcTest "a*b*c*d*e*f*g*h*i*j*k*l" "1 2 3 4 5 6 7 8 9 10 11 12" 4.79002e+08 VERIFY
! --------------------------------------Division /
calcTest "a/b+c/d+e/f+g/h+i/j+k/l" "1 2 3 4 5 6 7 8 9 10 11 12" 4.775 VERIFY
! --------------------------------------Absolute value ABS
calcTest "ABS(b-f)-ABS(c-g)" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
! --------------------------------------Square root SQR
calcTest "SQR(a)-a" "0" 0 VERIFY
calcTest "SQR(a)-a" "1" 0 VERIFY
calcTest "SQR(a)-b" "144 12" 0 VERIFY
calcTest "SQR(a+b+c)-SQR(l-f)" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
! --------------------------------------exponential function EXP
calcTest "EXP(a+b+c+d)" "1 2 3 4" 22026.5 VERIFY
calcTest "EXP(a)" "1" 2.71828 VERIFY
calcTest "EXP(a)" ".1" 1.10517 VERIFY
calcTest "EXP(a)" ".001" 1.001 VERIFY
! --------------------------------------Logbase 10 LOG
calcTest "LOG(a+b+c+d+a)" "1 2 3 4" 1.04139 VERIFY
calcTest "LOG(a)" "1" 0 VERIFY
calcTest "LOG(a)-(c-LOG(b)-d)" "5 2 1 .0001" 0.0001 VERIFY
! --------------------------------------Natural log LOGE
calcTest "LOGE(a+b+c+d+a)" "1 2 3 4" 2.3979 VERIFY
calcTest "LOGE(a)" "1" 0 VERIFY
calcTest "LOGE(a)" "2.71828182845904523536" 1 VERIFY
calcTest "LOGE(a*a*a)" "2.71828182845904523536" 3 VERIFY
! --------------------------------------Exponential ^
calcTest "a+b^c+d^e+f^(g-h)+j^(i-k)-l" "1 2 3 4 5 6 7 8 9 10 11 12" 1021.18 VERIFY
calcTest "a+b**c+d**e+f**(g-h)+j**(i-k)-l" "1 2 3 4 5 6 7 8 9 10 11 12" 1021.18 VERIFY
calcTest "a**b" "-2.5 2. " 6.25 VERIFY
calcTest "a**b" "-.5 3. " -0.125 VERIFY
calcTest "a**b" "0 6. " 0 VERIFY
calcTest "a**b" "6 0. " 1 VERIFY
calcTest "a**b" "2. -2 " 0.25 VERIFY
calcTest "a**b-a*a*a" "3 4" 54 VERIFY
calcTest "a**b-a*a*a*a" "3 0" -80 VERIFY
! --------------------------------------Modulo %
calcTest "k%e-l%f" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
! --------------------------------------Negate NOT
calcTest "NOT a + b" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
! --------------------------------------Sine SIN
calcTest "SIN(a)+SIN(a/b)+SIN(a/d)+SIN(e)" "3.141592653589793238462643 2 3 4 0" 1.70711 VERIFY
calcTest "SIN(a*b/c)-d" "-2.0 3.141592653589793238462643 4 -1.0" 0 VERIFY
calcTest "SIN(a/c)+SQR(b)+d" "-3.141592653589793238462643 .5 4 1" 1 VERIFY
calcTest "SIN(a/c)-SQR(b)+d" "3.141592653589793238462643 .5 4 1" 1 VERIFY
calcTest "SIN(a)" "0.0" 0 VERIFY
calcTest "SIN(a*b/c)+d" "2.0 3.141592653589793238462643 4 -1.0" 0 VERIFY
! --------------------------------------Hyperbolic sine SINH
calcTest "SINH(a)+(b+a/b)/c" "-1 2.71828182845904523536 2" 0 VERIFY
calcTest "SINH(a)" "0" 0 VERIFY
calcTest "SINH(a)-(b-a/b)/c" "1 2.71828182845904523536 2" 0 VERIFY
! --------------------------------------Arc sine ASIN
calcTest "ASIN(SIN(a))+ASIN(SIN(a/b))+ASIN(SIN(a/d))+ASIN(SIN(e))" "3.141592653589793238462643 2 3 4 0" 2.35619 VERIFY
calcTest "ASIN(a)+d*b/c" "-1.0 3.141592653589793238462643 4 2.0" 0 VERIFY
calcTest "ASIN(d*SQR(a))+b/c+d" ".5 3.141592653589793238462643 4 -1 1" -1 VERIFY
calcTest "ASIN(a)" "0.0" 0 VERIFY
calcTest "ASIN(SQR(a))-b/c+d" ".5 3.141592653589793238462643 4 1" 1 VERIFY
calcTest "ASIN(a)-d*b/c" "1 3.141592653589793238462643 4 2.0" 0 VERIFY
! --------------------------------------Cosine COS
calcTest "COS(a)+COS(a/b)+COS(a/d)+COS(e)" "3.141592653589793238462643 2 3 4 0" 0.707107 VERIFY
calcTest "COS(a*b/c)+SQR(d)+e" "-3.0 3.141592653589793238462643 4 .5 1" 1 VERIFY
calcTest "COS(a*b/c)+d" "-2.0 3.141592653589793238462643 4 1" 1 VERIFY
calcTest "COS(b/c)-SQR(a)+d" ".5 3.141592653589793238462643 4 1" 1 VERIFY
calcTest "COS(a)-b" "0 1" 0 VERIFY
calcTest "COS(b/c)-SQR(d)+e" "3.0 3.141592653589793238462643 4 .5 1" 1 VERIFY
calcTest "COS(a*b/c)+d" "2.0 3.141592653589793238462643 4 1" 1 VERIFY
calcTest "COS(a*b/c)+SQR(d)+e" "3.0 3.141592653589793238462643 4 .5 1" 1 VERIFY
calcTest "COS(a*b/c)-d" "4.0 3.141592653589793238462643 4 1" -2 VERIFY
calcTest "COS(a*b/c)+SQR(d)+e" "-3.0 3.141592653589793238462643 4 .5 1" 1 VERIFY
! --------------------------------------Hyperbolic cosine COSH
calcTest "COSH(a)-b" "0 1.0" 0 VERIFY
calcTest "COSH(a)-(c+a/c)/b+d" "1 2 2.7182818284590 1" 1 VERIFY
calcTest "COSH(a)-(c-a/c)/b+d" "-1 2 2.7182818284590 1" 1 VERIFY
calcTest "COSH(a)+COSH(b)+COSH(c)" "1 2 3" 15.3729 VERIFY
! --------------------------------------Arc cosine ACOS
calcTest "ACOS(COS(a))+ACOS(COS(a/b))+ACOS(COS(a/d))+ACOS(COS(e))" "3.141592653589793238462643 2 3 4 0" 5.49779 VERIFY
calcTest "ACOS(a)-c*b/c" "-1.0 3.141592653589793238462643 4" 0 VERIFY
calcTest "ACOS(e*SQR(a))-d*b/c" ".5 3.141592653589793238462643 4 3.0 -1" 0 VERIFY
calcTest "ACOS(a)-d*b/c" "0.0 3.141592653589793238462643 4 2.0" 0 VERIFY
calcTest "ACOS(SQR(a))-b/c" ".5 3.141592653589793238462643 4" 0 VERIFY
calcTest "ACOS(a)" "1" 0 VERIFY
! --------------------------------------Tangent TAN
calcTest "TAN(a)+TAN(a/d)+TAN(e)" "3.141592653589793238462643 2 3 4 0" 1 VERIFY
! --------------------------------------Hyperbolic tangent TANH
calcTest "TANH(a)+TANH(b)+TANH(c)" "1 2 3 4 5 6 7 8 9 10 11 12" 2.72068 VERIFY
calcTest "TANH(a)+(b*b+a)/(b*b-a)+c" "-1 2.71828182845904523536 1" 1 VERIFY
calcTest "TANH(a)" "0" 0 VERIFY
calcTest "TANH(a)-(b*b-a)/(b*b+a)+c" "1 2.71828182845904523536 1" 1 VERIFY
! --------------------------------------Arc tangent ATAN
calcTest "ATAN(TAN(a))+ATAN(TAN(a/d))+ATAN(TAN(e))" "3.141592653589793238462643 2 3 4 0" 0.785398 VERIFY
calcTest "ATAN(a)+b/c" "-1.0 3.141592653589793238462643 4" 0 VERIFY
calcTest "ATAN(a)" ".00" 0 VERIFY
calcTest "ATAN(a)-b/c" "1.0 3.141592653589793238462643 4" 0 VERIFY
! --------------------------------------And &&
calcTest "(e+f+g)=(h+j) AND (a+b)=c" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "(e+f+g)=(h+j) AND (a+b)=d" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
! --------------------------------------Or ||
calcTest "(e+f+g)=(h+j) OR (a+b)=d" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "(e+f+g)=(h+j+a) OR (a+b)=d" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
! --------------------------------------Greater than or equal to >=
calcTest "(a+b+c)>=d" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "(a+b+c)>=(d+e)" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
! --------------------------------------Greater than >
calcTest "(e+f+g)>(h+i)" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "(e+f+g)>(h+i+k)" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
! --------------------------------------Less than or equal to <=
calcTest "(e+f+g)<=(i+k)" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "(e+f+g+h)<=(i+k)" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
! --------------------------------------Less than <
calcTest "(a+b)<d" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "(a+b+c)<d" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
! --------------------------------------Not equal to #
calcTest "(e+f+g)#(h+j)" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
calcTest "(e+f+g)#(i+j+k)" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
! --------------------------------------Equal to =
calcTest "(e+f+g)=(h+j)" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "(e+f+g)=(h+j+a)" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
! --------------------------------------Bit-wise or |
calcTest "a | b" "1 2 3 4 5 6 7 8 9 10 11 12" 3 VERIFY
calcTest "a | b | d" "1 2 3 4 5 6 7 8 9 10 11 12" 7 VERIFY
calcTest "a | b | d | h" "1 2 3 4 5 6 7 8 9 10 11 12" 15 VERIFY
calcTest "a | b | d | h | i" "1 2 3 4 5 6 7 8 9 10 11 12" 15 VERIFY
calcTest "a | b | d | h | i | j" "1 2 3 4 5 6 7 8 9 10 11 12" 15 VERIFY
! --------------------------------------Bit-wise and &
calcTest "a & b" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
calcTest "b & f" "1 2 3 4 5 6 7 8 9 10 11 12" 2 VERIFY
calcTest "b & f & j" "1 2 3 4 5 6 7 8 9 10 11 12" 2 VERIFY
calcTest "a & e" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "a & c & e & g & i & k" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "d & l" "1 2 3 4 5 6 7 8 9 10 11 12" 4 VERIFY
! --------------------------------------Bit-wise and AND
calcTest "a AND b" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
calcTest "b AND f" "1 2 3 4 5 6 7 8 9 10 11 12" 2 VERIFY
calcTest "b AND f AND j" "1 2 3 4 5 6 7 8 9 10 11 12" 2 VERIFY
calcTest "a AND e" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "a AND c AND e AND g AND i AND k" "1 2 3 4 5 6 7 8 9 10 11 12" 1 VERIFY
calcTest "d AND l" "1 2 3 4 5 6 7 8 9 10 11 12" 4 VERIFY
! --------------------------------------Bit-wise or OR
calcTest "a OR b" "1 2 3 4 5 6 7 8 9 10 11 12" 3 VERIFY
calcTest "a OR b OR d" "1 2 3 4 5 6 7 8 9 10 11 12" 7 VERIFY
calcTest "a OR b OR d OR h" "1 2 3 4 5 6 7 8 9 10 11 12" 15 VERIFY
calcTest "a OR b OR d OR h OR i" "1 2 3 4 5 6 7 8 9 10 11 12" 15 VERIFY
calcTest "a OR b OR d OR h OR i OR j" "1 2 3 4 5 6 7 8 9 10 11 12" 15 VERIFY
! --------------------------------------Bit-wise exclusive XOR
calcTest "a XOR c " "1 2 3 4 5 6 7 8 9 10 11 12" 2 VERIFY
calcTest "a XOR c XOR e" "1 2 3 4 5 6 7 8 9 10 11 12" 7 VERIFY
calcTest "a XOR c XOR e XOR g" "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
! --------------------------------------Relational NOT !
calcTest "!a " "1 2 3 4 5 6 7 8 9 10 11 12" 0 VERIFY
calcTest "l + !a " "1 2 3 4 5 6 7 8 9 10 11 12" 12 VERIFY
calcTest "l + !b " "1 0 3 4 5 6 7 8 9 10 11 12" 13 VERIFY
! --------------------------------------Bit-wise NOT ~
calcTest "~c " "1 2 0 4 5 6 7 8 9 10 11 12" -1 VERIFY
calcTest "~c " "1 2 3 4 5 6 7 8 9 10 11 12" -4 VERIFY
calcTest "~l " "1 2 3 4 5 6 7 8 9 10 11 12" -13 VERIFY
! --------------------------------------Question mark operator (cond)?t:f
calcTest "((e+f+g)=(h+j)) ? k:l" "1 2 3 4 5 6 7 8 9 10 11 12" 11 VERIFY
calcTest "((a+e+f+g)=(h+j))?k:l" "1 2 3 4 5 6 7 8 9 10 11 12" 12 VERIFY
! --------------------------------------random number generation RNDM
calcTest "RNDM" "1 2 3 4 5 6 7 8 9 10 11 12" 0 NOVERIFY
calcTest "RNDM" "1 2 3 4 5 6 7 8 9 10 11 12" 0 NOVERIFY
calcTest "RNDM" "1 2 3 4 5 6 7 8 9 10 11 12" 0 NOVERIFY
calcTest "RNDM" "1 2 3 4 5 6 7 8 9 10 11 12" 0 NOVERIFY
calcTest "RNDM" "1 2 3 4 5 6 7 8 9 10 11 12" 0 NOVERIFY
calcTest "RNDM" "1 2 3 4 5 6 7 8 9 10 11 12" 0 NOVERIFY
calcTest "RNDM" "1 2 3 4 5 6 7 8 9 10 11 12" 0 NOVERIFY
calcTest "RNDM" "1 2 3 4 5 6 7 8 9 10 11 12" 0 NOVERIFY
! *****************************************************
! -------------------------- End of test ---------------
!
! *****************************************************
! *****************************************************
! *****************************************************