00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <stdlib.h>
00010 #include <stdio.h>
00011 #include <errno.h>
00012 #include <math.h>
00013 #include <complex.h>
00014
00015 #include "complex_assert.h"
00016
00017 EXPORT_CREATE(complex_assert);
00018 EXPORT_INIT(complex_assert);
00019 EXPORT_COMMIT(complex_assert);
00020 EXPORT_NOTIFY(complex_assert);
00021
00022 CLASS *complex_assert::oclass = NULL;
00023 complex_assert *complex_assert::defaults = NULL;
00024
00025 complex_assert::complex_assert(MODULE *module)
00026 {
00027 if (oclass==NULL)
00028 {
00029
00030 oclass = gl_register_class(module,"complex_assert",sizeof(complex_assert),PC_AUTOLOCK|PC_OBSERVER);
00031 if (oclass==NULL)
00032 throw "unable to register class complex_assert";
00033 else
00034 oclass->trl = TRL_PROVEN;
00035
00036 if (gl_publish_variable(oclass,
00037
00038 PT_enumeration,"status",get_status_offset(),PT_DESCRIPTION,"Conditions for the assert checks",
00039 PT_KEYWORD,"ASSERT_TRUE",(enumeration)ASSERT_TRUE,
00040 PT_KEYWORD,"ASSERT_FALSE",(enumeration)ASSERT_FALSE,
00041 PT_KEYWORD,"ASSERT_NONE",(enumeration)ASSERT_NONE,
00042 PT_enumeration, "once", get_once_offset(),PT_DESCRIPTION,"Conditions for a single assert check",
00043 PT_KEYWORD,"ONCE_FALSE",(enumeration)ONCE_FALSE,
00044 PT_KEYWORD,"ONCE_TRUE",(enumeration)ONCE_TRUE,
00045 PT_KEYWORD,"ONCE_DONE",(enumeration)ONCE_DONE,
00046 PT_enumeration, "operation", get_operation_offset(),PT_DESCRIPTION,"Complex operation for the comparison",
00047 PT_KEYWORD,"FULL",(enumeration)FULL,
00048 PT_KEYWORD,"REAL",(enumeration)REAL,
00049 PT_KEYWORD,"IMAGINARY",(enumeration)IMAGINARY,
00050 PT_KEYWORD,"MAGNITUDE",(enumeration)MAGNITUDE,
00051 PT_KEYWORD,"ANGLE",(enumeration)ANGLE,
00052 PT_complex, "value", get_value_offset(),PT_DESCRIPTION,"Value to assert",
00053 PT_double, "within", get_within_offset(),PT_DESCRIPTION,"Tolerance for a successful assert",
00054 PT_char1024, "target", get_target_offset(),PT_DESCRIPTION,"Property to perform the assert upon",
00055 NULL)<1){
00056 char msg[256];
00057 sprintf(msg, "unable to publish properties in %s",__FILE__);
00058 throw msg;
00059 }
00060
00061 defaults = this;
00062 status = ASSERT_TRUE;
00063 within = 0.0;
00064 value = 0.0;
00065 once = ONCE_FALSE;
00066 once_value = 0;
00067 operation = FULL;
00068 }
00069 }
00070
00071
00072 int complex_assert::create(void)
00073 {
00074 memcpy(this,defaults,sizeof(*this));
00075
00076 return 1;
00077 }
00078
00079 int complex_assert::init(OBJECT *parent)
00080 {
00081 if (within <= 0.0){
00082 throw "A non-positive value has been specified for within.";
00083
00084
00085
00086
00087 }
00088 return 1;
00089 }
00090
00091 TIMESTAMP complex_assert::commit(TIMESTAMP t1, TIMESTAMP t2)
00092 {
00093
00094 if ( once==ONCE_TRUE)
00095 {
00096 once_value = value;
00097 once = ONCE_DONE;
00098 }
00099 else if ( once==ONCE_DONE)
00100 {
00101 if ( once_value.Re()==value.Re() && once_value.Im()==value.Im() )
00102 {
00103 gl_verbose("Assert skipped with ONCE logic");
00104 return TS_NEVER;
00105 }
00106 else
00107 {
00108 once_value = value;
00109 }
00110 }
00111
00112
00113 gld_property target_prop(get_parent(),get_target());
00114 if ( !target_prop.is_valid() || target_prop.get_type()!=PT_complex ) {
00115 gl_error("Specified target %s for %s is not valid.",get_target(),get_parent()->get_name());
00116
00117
00118
00119
00120
00121
00122 return 0;
00123 }
00124
00125
00126 complex x; target_prop.getp(x);
00127 if ( status==ASSERT_TRUE )
00128 {
00129 if ( operation==FULL || operation==REAL || operation==IMAGINARY )
00130 {
00131 complex error = x - value;
00132 double real_error = error.Re();
00133 double imag_error = error.Im();
00134 if ( ( _isnan(real_error) || fabs(real_error)>within )
00135 && ( operation==FULL || operation==REAL )
00136 )
00137 {
00138 gl_error("Assert failed on %s: real part of %s %g not within %f of given value %g",
00139 get_parent()->get_name(), get_target(), x.Re(), within, value.Re());
00140 return 0;
00141 }
00142 if ( ( _isnan(imag_error) || fabs(imag_error)>within )
00143 && ( operation==FULL || operation==IMAGINARY )
00144 )
00145 {
00146 gl_error("Assert failed on %s: imaginary part of %s %+gi not within %f of given value %+gi",
00147 get_parent()->get_name(), get_target(), x.Im(), within, value.Im());
00148 return 0;
00149 }
00150 }
00151 else if ( operation==MAGNITUDE )
00152 {
00153 double magnitude_error = x.Mag() - value.Mag();
00154 if ( _isnan(magnitude_error) || fabs(magnitude_error)>within )
00155 {
00156 gl_error("Assert failed on %s: Magnitude of %s (%g) not within %f of given value %g",
00157 get_parent()->get_name(), get_target(), x.Mag(), within, value.Mag());
00158 return 0;
00159 }
00160 }
00161 else if (get_operation() == ANGLE)
00162 {
00163 double angle_error = x.Arg() - value.Arg();
00164 if ( _isnan(angle_error) || fabs(angle_error)>within )
00165 {
00166 gl_error("Assert failed on %s: Angle of %s (%g) not within %f of given value %g",
00167 get_parent()->get_name(), get_target(), x.Arg(), within, value.Arg());
00168 return 0;
00169 }
00170 }
00171 gl_verbose("Assert passed on %s",get_parent()->get_name());
00172 return TS_NEVER;
00173 }
00174 else if (get_status() == ASSERT_FALSE)
00175 {
00176 if ( operation==FULL || operation==REAL || operation==IMAGINARY )
00177 {
00178 complex error = x - value;
00179 double real_error = error.Re();
00180 double imag_error = error.Im();
00181 if ( ( _isnan(real_error) || fabs(real_error)<within )
00182 && ( operation==FULL || operation==REAL )
00183 )
00184 {
00185 gl_error("Assert failed on %s: real part of %s %g is within %f of given value %g",
00186 get_parent()->get_name(), get_target(), x.Re(), within, value.Re());
00187 return 0;
00188 }
00189 if ( ( _isnan(imag_error) || fabs(imag_error)<within )
00190 && ( operation==FULL || operation==IMAGINARY )
00191 )
00192 {
00193 gl_error("Assert failed on %s: imaginary part of %s %+gi is within %f of given value %+gi",
00194 get_parent()->get_name(), get_target(), x.Im(), within, value.Im());
00195 return 0;
00196 }
00197 }
00198 else if ( operation==MAGNITUDE )
00199 {
00200 double magnitude_error = x.Mag() - value.Mag();
00201 if ( _isnan(magnitude_error) || fabs(magnitude_error)<within )
00202 {
00203 gl_error("Assert failed on %s: Magnitude of %s %g is within %f of given value %g",
00204 get_parent()->get_name(), get_target(), x.Mag(), within, value.Mag());
00205 return 0;
00206 }
00207 }
00208 else if (get_operation() == ANGLE)
00209 {
00210 double angle_error = x.Arg() - value.Arg();
00211 if ( _isnan(angle_error) || fabs(angle_error)<within )
00212 {
00213 gl_error("Assert failed on %s: Angle of %s %g is within %f of given value %g",
00214 get_parent()->get_name(), get_target(), x.Arg(), within, value.Arg());
00215 return 0;
00216 }
00217 }
00218 gl_verbose("Assert passed on %s",get_parent()->get_name());
00219 return TS_NEVER;
00220 }
00221 else
00222 {
00223 gl_verbose("Assert test is not being run on %s", get_parent()->get_name());
00224 return TS_NEVER;
00225 }
00226 }
00227
00228 int complex_assert::postnotify(PROPERTY *prop, char *value)
00229 {
00230 if ( once==ONCE_DONE && strcmp(prop->name, "value")==0 )
00231 {
00232 once = ONCE_TRUE ;
00233 }
00234 return 1;
00235 }
00236
00237 EXPORT SIMULATIONMODE update_complex_assert(OBJECT *obj, TIMESTAMP t0, unsigned int64 delta_time, unsigned long dt, unsigned int iteration_count_val)
00238 {
00239 char buff[64];
00240 char dateformat[8]="";
00241 char error_output_buff[1024];
00242 char datebuff[64];
00243 complex_assert *da = OBJECTDATA(obj,complex_assert);
00244 DATETIME delta_dt_val;
00245 double del_clock;
00246 TIMESTAMP del_clock_int;
00247 int del_microseconds;
00248 complex *x;
00249
00250 if(da->get_once() == da->ONCE_TRUE){
00251 da->set_once_value(da->get_value());
00252 da->set_once(da->ONCE_DONE);
00253 } else if (da->get_once() == da->ONCE_DONE){
00254 if(da->get_once_value().Re() == da->get_value().Re() && da->get_once_value().Im() == da->get_value().Im()){
00255 gl_verbose("Assert skipped with ONCE logic");
00256 return SM_EVENT;
00257 } else {
00258 da->set_once_value(da->get_value());
00259 }
00260 }
00261
00262
00263 if (iteration_count_val == 0)
00264 {
00265
00266 if (delta_time>=dt)
00267 {
00268
00269 x = (complex*)gl_get_complex_by_name(obj->parent,da->get_target());
00270
00271 if (x==NULL)
00272 {
00273 gl_error("Specified target %s for %s is not valid.",da->get_target(),gl_name(obj->parent,buff,64));
00274
00275
00276
00277
00278
00279
00280 return SM_ERROR;
00281 }
00282 else if (da->get_status() == da->ASSERT_TRUE)
00283 {
00284 if ( da->get_operation()==da->FULL || da->get_operation()==da->REAL || da->get_operation()==da->IMAGINARY )
00285 {
00286 complex error = *x - da->get_value();
00287 double real_error = error.Re();
00288 double imag_error = error.Im();
00289 if ( ( _isnan(real_error) || fabs(real_error)>da->get_within() )
00290 && ( da->get_operation()==da->FULL || da->get_operation()==da->REAL )
00291 )
00292 {
00293
00294 if (delta_time>=dt)
00295 del_clock = (double)t0 + (double)(delta_time-dt)/(double)DT_SECOND;
00296 else
00297 del_clock = (double)t0 + (double)(delta_time)/(double)DT_SECOND;
00298
00299 del_clock_int = (TIMESTAMP)del_clock;
00300 del_microseconds = (int)((del_clock-(int)(del_clock))*1000000+0.5);
00301
00302
00303 gl_localtime(del_clock_int,&delta_dt_val);
00304
00305
00306 gl_global_getvar("dateformat",dateformat,sizeof(dateformat));
00307
00308
00309 if ( strcmp(dateformat,"ISO")==0)
00310 sprintf(datebuff,"ERROR [%04d-%02d-%02d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.year,delta_dt_val.month,delta_dt_val.day,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00311 else if ( strcmp(dateformat,"US")==0)
00312 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.month,delta_dt_val.day,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00313 else if ( strcmp(dateformat,"EURO")==0)
00314 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.day,delta_dt_val.month,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00315 else
00316 sprintf(datebuff,"ERROR .09f : ",del_clock);
00317
00318
00319 sprintf(error_output_buff,"Assert failed on %s - real part of %s (%g) not within %f of given value %g",gl_name(obj->parent, buff, 64),da->get_target(), (*x).Re(), da->get_within(), da->get_value().Re());
00320
00321
00322 gl_output("%s%s",datebuff,error_output_buff);
00323
00324 return SM_ERROR;
00325 }
00326 if ( ( _isnan(imag_error) || fabs(imag_error)>da->get_within() )
00327 && ( da->get_operation()==da->FULL || da->get_operation()==da->IMAGINARY )
00328 )
00329 {
00330
00331 if (delta_time>=dt)
00332 del_clock = (double)t0 + (double)(delta_time-dt)/(double)DT_SECOND;
00333 else
00334 del_clock = (double)t0 + (double)(delta_time)/(double)DT_SECOND;
00335
00336 del_clock_int = (TIMESTAMP)del_clock;
00337 del_microseconds = (int)((del_clock-(int)(del_clock))*1000000+0.5);
00338
00339
00340 gl_localtime(del_clock_int,&delta_dt_val);
00341
00342
00343 gl_global_getvar("dateformat",dateformat,sizeof(dateformat));
00344
00345
00346 if ( strcmp(dateformat,"ISO")==0)
00347 sprintf(datebuff,"ERROR [%04d-%02d-%02d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.year,delta_dt_val.month,delta_dt_val.day,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00348 else if ( strcmp(dateformat,"US")==0)
00349 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.month,delta_dt_val.day,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00350 else if ( strcmp(dateformat,"EURO")==0)
00351 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.day,delta_dt_val.month,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00352 else
00353 sprintf(datebuff,"ERROR .09f : ",del_clock);
00354
00355
00356 sprintf(error_output_buff,"Assert failed on %s - imaginary part of %s (%g) not within %f of given value %g",gl_name(obj->parent, buff, 64),da->get_target(), (*x).Im(), da->get_within(), da->get_value().Im());
00357
00358
00359 gl_output("%s%s",datebuff,error_output_buff);
00360
00361 return SM_ERROR;
00362 }
00363 }
00364 else if ( da->get_operation()==da->MAGNITUDE )
00365 {
00366 double magnitude_error = (*x).Mag() - da->get_value().Mag();
00367 if ( _isnan(magnitude_error) || fabs(magnitude_error)>da->get_within() )
00368 {
00369
00370 if (delta_time>=dt)
00371 del_clock = (double)t0 + (double)(delta_time-dt)/(double)DT_SECOND;
00372 else
00373 del_clock = (double)t0 + (double)(delta_time)/(double)DT_SECOND;
00374
00375 del_clock_int = (TIMESTAMP)del_clock;
00376 del_microseconds = (int)((del_clock-(int)(del_clock))*1000000+0.5);
00377
00378
00379 gl_localtime(del_clock_int,&delta_dt_val);
00380
00381
00382 gl_global_getvar("dateformat",dateformat,sizeof(dateformat));
00383
00384
00385 if ( strcmp(dateformat,"ISO")==0)
00386 sprintf(datebuff,"ERROR [%04d-%02d-%02d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.year,delta_dt_val.month,delta_dt_val.day,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00387 else if ( strcmp(dateformat,"US")==0)
00388 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.month,delta_dt_val.day,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00389 else if ( strcmp(dateformat,"EURO")==0)
00390 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.day,delta_dt_val.month,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00391 else
00392 sprintf(datebuff,"ERROR .09f : ",del_clock);
00393
00394
00395 sprintf(error_output_buff,"Assert failed on %s - Magnitude of %s (%g) not within %f of given value %g",gl_name(obj->parent, buff, 64),da->get_target(), (*x).Mag(), da->get_within(), da->get_value().Mag());
00396
00397
00398 gl_output("%s%s",datebuff,error_output_buff);
00399
00400 return SM_ERROR;
00401 }
00402 }
00403 else if (da->get_operation() == da->ANGLE)
00404 {
00405 double angle_error = (*x).Arg() - da->get_value().Arg();
00406 if ( _isnan(angle_error) || fabs(angle_error)>da->get_within() )
00407 {
00408
00409 if (delta_time>=dt)
00410 del_clock = (double)t0 + (double)(delta_time-dt)/(double)DT_SECOND;
00411 else
00412 del_clock = (double)t0 + (double)(delta_time)/(double)DT_SECOND;
00413
00414 del_clock_int = (TIMESTAMP)del_clock;
00415 del_microseconds = (int)((del_clock-(int)(del_clock))*1000000+0.5);
00416
00417
00418 gl_localtime(del_clock_int,&delta_dt_val);
00419
00420
00421 gl_global_getvar("dateformat",dateformat,sizeof(dateformat));
00422
00423
00424 if ( strcmp(dateformat,"ISO")==0)
00425 sprintf(datebuff,"ERROR [%04d-%02d-%02d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.year,delta_dt_val.month,delta_dt_val.day,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00426 else if ( strcmp(dateformat,"US")==0)
00427 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.month,delta_dt_val.day,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00428 else if ( strcmp(dateformat,"EURO")==0)
00429 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.day,delta_dt_val.month,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00430 else
00431 sprintf(datebuff,"ERROR .09f : ",del_clock);
00432
00433
00434 sprintf(error_output_buff,"Assert failed on %s - Angle of %s (%g) not within %f of given value %g",gl_name(obj->parent, buff, 64),da->get_target(), (*x).Arg(), da->get_within(), da->get_value().Arg());
00435
00436
00437 gl_output("%s%s",datebuff,error_output_buff);
00438
00439 return SM_ERROR;
00440 }
00441 }
00442 gl_verbose("Assert passed on %s", gl_name(obj->parent, buff, 64));
00443 return SM_EVENT;
00444 }
00445 else if (da->get_status() == da->ASSERT_FALSE)
00446 {
00447 if ( da->get_operation()==da->FULL || da->get_operation()==da->REAL || da->get_operation()==da->IMAGINARY )
00448 {
00449 complex error = *x - da->get_value();
00450 double real_error = error.Re();
00451 double imag_error = error.Im();
00452 if ( ( _isnan(real_error) || fabs(real_error)<da->get_within() )
00453 && ( da->get_operation()==da->FULL || da->get_operation()==da->REAL )
00454 )
00455 {
00456
00457 if (delta_time>=dt)
00458 del_clock = (double)t0 + (double)(delta_time-dt)/(double)DT_SECOND;
00459 else
00460 del_clock = (double)t0 + (double)(delta_time)/(double)DT_SECOND;
00461
00462 del_clock_int = (TIMESTAMP)del_clock;
00463 del_microseconds = (int)((del_clock-(int)(del_clock))*1000000+0.5);
00464
00465
00466 gl_localtime(del_clock_int,&delta_dt_val);
00467
00468
00469 gl_global_getvar("dateformat",dateformat,sizeof(dateformat));
00470
00471
00472 if ( strcmp(dateformat,"ISO")==0)
00473 sprintf(datebuff,"ERROR [%04d-%02d-%02d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.year,delta_dt_val.month,delta_dt_val.day,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00474 else if ( strcmp(dateformat,"US")==0)
00475 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.month,delta_dt_val.day,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00476 else if ( strcmp(dateformat,"EURO")==0)
00477 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.day,delta_dt_val.month,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00478 else
00479 sprintf(datebuff,"ERROR .09f : ",del_clock);
00480
00481
00482 sprintf(error_output_buff,"Assert failed on %s - real part of %s (%g) not within %f of given value %g",gl_name(obj->parent, buff, 64),da->get_target(), (*x).Re(), da->get_within(), da->get_value().Re());
00483
00484
00485 gl_output("%s%s",datebuff,error_output_buff);
00486
00487 return SM_ERROR;
00488 }
00489 if ( ( _isnan(imag_error) || fabs(imag_error)<da->get_within() )
00490 && ( da->get_operation()==da->FULL || da->get_operation()==da->IMAGINARY )
00491 )
00492 {
00493
00494 if (delta_time>=dt)
00495 del_clock = (double)t0 + (double)(delta_time-dt)/(double)DT_SECOND;
00496 else
00497 del_clock = (double)t0 + (double)(delta_time)/(double)DT_SECOND;
00498
00499 del_clock_int = (TIMESTAMP)del_clock;
00500 del_microseconds = (int)((del_clock-(int)(del_clock))*1000000+0.5);
00501
00502
00503 gl_localtime(del_clock_int,&delta_dt_val);
00504
00505
00506 gl_global_getvar("dateformat",dateformat,sizeof(dateformat));
00507
00508
00509 if ( strcmp(dateformat,"ISO")==0)
00510 sprintf(datebuff,"ERROR [%04d-%02d-%02d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.year,delta_dt_val.month,delta_dt_val.day,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00511 else if ( strcmp(dateformat,"US")==0)
00512 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.month,delta_dt_val.day,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00513 else if ( strcmp(dateformat,"EURO")==0)
00514 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.day,delta_dt_val.month,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00515 else
00516 sprintf(datebuff,"ERROR .09f : ",del_clock);
00517
00518
00519 sprintf(error_output_buff,"Assert failed on %s - imaginary part of %s (%g) not within %f of given value %g",gl_name(obj->parent, buff, 64),da->get_target(), (*x).Im(), da->get_within(), da->get_value().Im());
00520
00521
00522 gl_output("%s%s",datebuff,error_output_buff);
00523
00524 return SM_ERROR;
00525 }
00526 }
00527 else if ( da->get_operation()==da->MAGNITUDE )
00528 {
00529 double magnitude_error = (*x).Mag() - da->get_value().Mag();
00530 if ( _isnan(magnitude_error) || fabs(magnitude_error)<da->get_within() )
00531 {
00532
00533 if (delta_time>=dt)
00534 del_clock = (double)t0 + (double)(delta_time-dt)/(double)DT_SECOND;
00535 else
00536 del_clock = (double)t0 + (double)(delta_time)/(double)DT_SECOND;
00537
00538 del_clock_int = (TIMESTAMP)del_clock;
00539 del_microseconds = (int)((del_clock-(int)(del_clock))*1000000+0.5);
00540
00541
00542 gl_localtime(del_clock_int,&delta_dt_val);
00543
00544
00545 gl_global_getvar("dateformat",dateformat,sizeof(dateformat));
00546
00547
00548 if ( strcmp(dateformat,"ISO")==0)
00549 sprintf(datebuff,"ERROR [%04d-%02d-%02d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.year,delta_dt_val.month,delta_dt_val.day,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00550 else if ( strcmp(dateformat,"US")==0)
00551 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.month,delta_dt_val.day,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00552 else if ( strcmp(dateformat,"EURO")==0)
00553 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.day,delta_dt_val.month,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00554 else
00555 sprintf(datebuff,"ERROR .09f : ",del_clock);
00556
00557
00558 sprintf(error_output_buff,"Assert failed on %s - Magnitude of %s (%g) not within %f of given value %g",gl_name(obj->parent, buff, 64),da->get_target(), (*x).Mag(), da->get_within(), da->get_value().Mag());
00559
00560
00561 gl_output("%s%s",datebuff,error_output_buff);
00562
00563 return SM_ERROR;
00564 }
00565 }
00566 else if (da->get_operation() == da->ANGLE)
00567 {
00568 double angle_error = (*x).Arg() - da->get_value().Arg();
00569 if ( _isnan(angle_error) || fabs(angle_error)<da->get_within() )
00570 {
00571
00572 if (delta_time>=dt)
00573 del_clock = (double)t0 + (double)(delta_time-dt)/(double)DT_SECOND;
00574 else
00575 del_clock = (double)t0 + (double)(delta_time)/(double)DT_SECOND;
00576
00577 del_clock_int = (TIMESTAMP)del_clock;
00578 del_microseconds = (int)((del_clock-(int)(del_clock))*1000000+0.5);
00579
00580
00581 gl_localtime(del_clock_int,&delta_dt_val);
00582
00583
00584 gl_global_getvar("dateformat",dateformat,sizeof(dateformat));
00585
00586
00587 if ( strcmp(dateformat,"ISO")==0)
00588 sprintf(datebuff,"ERROR [%04d-%02d-%02d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.year,delta_dt_val.month,delta_dt_val.day,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00589 else if ( strcmp(dateformat,"US")==0)
00590 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.month,delta_dt_val.day,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00591 else if ( strcmp(dateformat,"EURO")==0)
00592 sprintf(datebuff,"ERROR [%02d-%02d-%04d %02d:%02d:%02d.%.06d %s] : ",delta_dt_val.day,delta_dt_val.month,delta_dt_val.year,delta_dt_val.hour,delta_dt_val.minute,delta_dt_val.second,del_microseconds,delta_dt_val.tz);
00593 else
00594 sprintf(datebuff,"ERROR .09f : ",del_clock);
00595
00596
00597 sprintf(error_output_buff,"Assert failed on %s - Angle of %s (%g) not within %f of given value %g",gl_name(obj->parent, buff, 64),da->get_target(), (*x).Arg(), da->get_within(), da->get_value().Arg());
00598
00599
00600 gl_output("%s%s",datebuff,error_output_buff);
00601
00602 return SM_ERROR;
00603 }
00604 }
00605 gl_verbose("Assert passed on %s", gl_name(obj->parent, buff, 64));
00606 return SM_EVENT;
00607 }
00608 else
00609 {
00610 gl_verbose("Assert test is not being run on %s", gl_name(obj->parent, buff, 64));
00611 return SM_EVENT;
00612 }
00613 }
00614 else
00615 return SM_EVENT;
00616 }
00617 else
00618 return SM_EVENT;
00619 }