Example #1
0
static void call_aCalcPerform(acalcoutRecord *pcalc) {
	long numElements;
	epicsUInt32 amask;

	if (aCalcoutRecordDebug >= 10) printf("call_aCalcPerform:entry\n");

	/* Note that we want to permit nuse == 0 as a way of saying "use nelm". */
	numElements = acalcGetNumElements( pcalc );
	pcalc->cstat = aCalcPerform(&pcalc->a, MAX_FIELDS, &pcalc->aa,
		ARRAY_MAX_FIELDS, numElements, &pcalc->val, pcalc->aval, pcalc->rpcl,
		pcalc->nelm, &pcalc->amask);
	
	if (pcalc->dopt == acalcoutDOPT_Use_OVAL) {
		pcalc->cstat |= aCalcPerform(&pcalc->a, MAX_FIELDS, &pcalc->aa,
			ARRAY_MAX_FIELDS, numElements, &pcalc->oval, pcalc->oav, pcalc->orpc,
			pcalc->nelm, &amask);
		pcalc->amask |= amask;
	}
}
Example #2
0
static void testAValExpr(const char* expr, double* args, double** aargs, double* expected, int length)
{	
	unsigned char rpn[255];
	short err;
	
	double val;
	double aval[12];
	
	epicsUInt32 amask;
	
	if (aCalcPostfix(expr, rpn, &err))
	{
		testDiag("postfix: %s in expression '%s'", aCalcErrorStr(err), expr);
		return;
	}
	
	if (aCalcPerform(args, 12, aargs, 12, 12, &val, aval, rpn, 12, &amask))
	{
		testDiag("calcPerform: error evaluating '%s'", expr);
		return;
	}
	
	bool pass = true;
	int i = 0;
	
	for (i = 0; i < length; i += 1)
	{
		if (finite(expected[i]) && finite(aval[i]))
		{
			if (fabs(expected[i] - aval[i]) > 1e-8)
			{
				pass = false;
				break;
			}
		}
		else if (isnan(expected[i]) && !isnan(aval[i]))
		{
			pass = false;
			break;
		}
		else if (aval[i] != expected[i])
		{
			pass = false;
			break;
		}
	}
	
	if(!testOk(pass, "%s", expr))
	{	
		testDiag("Expected aval[%d]: %f, Got: %f", i, expected[i], aval[i]);
	}	
}
Example #3
0
static void testValExpr(const char* expr, double* args, double** aargs, double expected)
{	
	unsigned char rpn[255];
	short err;
	
	double val;
	double aval[1];
	
	epicsUInt32 amask;
	
	if (aCalcPostfix(expr, rpn, &err))
	{
		testDiag("postfix: %s in expression '%s'", aCalcErrorStr(err), expr);
		return;
	}
	
	if (aCalcPerform(args, 12, aargs, 12, 3, &val, aval, rpn, 1, &amask))
	{
		testDiag("calcPerform: error evaluating '%s'", expr);
		return;
	}
	
	
	bool pass;
	
	if (finite(expected) && finite(val))
	{
		pass = fabs(expected - val) < 1e-8;
	}
	else if (isnan(expected))
	{
		pass = (bool) isnan(val);
	}
	else
	{
		pass = (val == expected);
	}
	
	if(!testOk(pass, "%s", expr))
	{
		testDiag("Expected: %f, Got: %f", expected, val);
	}	
}