< Summary - Igor Pro Universal Testing Framework

Information
Class: procedures.igortest-assertion-checks
Assembly: procedures
File(s): /builds/mirror/igortest/procedures/igortest-assertion-checks.ipf
Tag: 74147b3
Line coverage
8%
Covered lines: 21
Uncovered lines: 221
Coverable lines: 242
Total lines: 403
Line coverage: 8.6%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/builds/mirror/igortest/procedures/igortest-assertion-checks.ipf

#LineLine coverage
 1#pragma rtGlobals=3
 2#pragma rtFunctionErrors=1
 3#pragma version=1.10
 4#pragma TextEncoding="UTF-8"
 5#pragma ModuleName=IUTF_Checks
 6
 7/// @cond HIDDEN_SYMBOL
 8
 9static Constant NUMTYPE_NAN = 2
 10
 11/// @name CountObjects and CountObjectsDFR constant
 12/// @anchor TypeFlags
 13/// @{
 14static Constant COUNTOBJECTS_WAVES      = 1
 15static Constant COUNTOBJECTS_VAR        = 2
 16static Constant COUNTOBJECTS_STR        = 3
 17static Constant COUNTOBJECTS_DATAFOLDER = 4
 18/// @}
 19
 020static Function IsDataFolderEmpty(folder)
 21  string folder
 22
 023  return ((CountObjects(folder, COUNTOBJECTS_WAVES) + CountObjects(folder, COUNTOBJECTS_VAR) + CountObjects(folder, COUN
 024End
 25
 2126static Function IsTrue(var)
 27  variable var
 28
 2129  return (var != 0 && numType(var) != NUMTYPE_NAN)
 2130End
 31
 48032static Function IsNullString(str)
 33  string &str
 34
 48035  return (numtype(strlen(str)) == NUMTYPE_NAN)
 48036End
 37
 038static Function IsEmptyString(str)
 39  string &str
 40
 041  return (strlen(str) == 0)
 042End
 43
 044static Function IsProperString(str)
 45  string &str
 46
 047  return !IsEmptyString(str) && !IsNullString(str)
 048End
 49
 33050static Function AreBothVariablesNaN(var1, var2)
 51  variable var1, var2
 52
 33053  variable type1 = numType(var1)
 33054  variable type2 = numType(var2)
 55
 33056  return (type1 == type2) && (type1 == NUMTYPE_NAN)
 33057End
 58
 33059static Function AreVariablesEqual(var1, var2)
 60  variable var1, var2
 61
 33062  return AreBothVariablesNaN(var1, var2) || (var1 == var2)
 33063End
 64
 065static Function IsLessOrEqual(var1, var2)
 66  variable var1, var2
 67
 068  return AreVariablesEqual(var1, var2) || IsLess(var1, var2)
 069End
 70
 071static Function IsLess(var1, var2)
 72  variable var1, var2
 73
 074  return var1 < var2
 075End
 76
 77#if IgorVersion() >= 7.00
 78
 079static Function AreINT64Equal(int64 var1, int64 var2)
 080  int64 IsEqual
 81
 082  IsEqual = var1 == var2
 083  return IsEqual
 084End
 85
 086static Function AreUINT64Equal(uint64 var1, uint64 var2)
 087  uint64 IsEqual
 88
 089  IsEqual = var1 == var2
 090  return IsEqual
 091End
 92
 93#endif
 94
 095static Function IsVariableSmall(var, tol)
 96  variable var
 97  variable tol
 98
 099  return (abs(var) <= abs(tol))
 0100End
 101
 102#if IgorVersion() >= 7.0
 103
 0104static Function IsINT64Small(int64 var, int64 tol)
 0105  int64 comparison
 106
 0107  comparison = tol < 0
 0108  if(comparison)
 0109    tol = -tol
 0110  endif
 111
 0112  comparison = var < 0
 0113  if(comparison)
 0114    var = -var
 0115  endif
 116
 0117  comparison = var < tol
 0118  return comparison
 0119End
 120
 0121static Function IsUINT64Small(uint64 var, uint64 tol)
 0122  uint64 comparison
 123
 0124  comparison = var < tol
 125
 0126  return comparison
 0127End
 128
 129#endif
 130
 0131static Function AreVariablesClose(var1, var2, tol, strong)
 132  variable var1, var2
 133  variable tol
 134  variable strong
 135
 0136  if(var1 == 0 || var2 == 0)
 0137    return IsVariableSmall(var1 - var2, tol)
 0138  endif
 139
 0140  strong = !!strong
 141
 0142  variable diff = abs(var1 - var2)
 0143  variable d1   = diff / abs(var1)
 0144  variable d2   = diff / abs(var2)
 145
 0146  // printf "d1 %.15g, d2 %.15g, d1 - d2 %.15g, strong %d, weak %d\r", d1, d2, d1 - d2, (d1 <= tol && d2 <= tol), (d1 <=
 147
 0148  if(strong)
 0149    return (d1 <= tol && d2 <= tol)
 0150  else
 0151    return (d1 <= tol || d2 <= tol)
 0152  endif
 0153End
 154
 155#if IgorVersion() >= 7.0
 156
 0157static Function AreINT64Close(int64 var1, int64 var2, int64 tol)
 0158  int64 temp, diff, comparison
 159
 0160  comparison = tol < 0
 0161  if(comparison)
 0162    tol = -tol
 0163  endif
 164
 0165  comparison = var2 > var1
 0166  if(comparison)
 0167    temp = var1
 0168    var1 = var2
 0169    var2 = temp
 0170  endif
 171
 0172  diff       = var1 - var2
 0173  comparison = diff < tol
 174
 0175  return comparison
 0176End
 177
 0178static Function AreUINT64Close(uint64 var1, uint64 var2, uint64 tol)
 0179  uint64 temp, diff, comparison
 180
 0181  comparison = var2 > var1
 0182  if(comparison)
 0183    temp = var1
 0184    var1 = var2
 0185    var2 = temp
 0186  endif
 187
 0188  diff       = var1 - var2
 0189  comparison = diff < tol
 190
 0191  return comparison
 0192End
 193
 194#endif
 195
 196/// @return 1 if both strings are equal and zero otherwise
 160197static Function AreStringsEqual(str1, str2, case_sensitive)
 198  string &str1, &str2
 199  variable case_sensitive
 200
 160201  case_sensitive = !!case_sensitive
 202
 160203  if(IsNullString(str1) && IsNullString(str2))
 0204    return 1
 160205  elseif(IsNullString(str1) || IsNullString(str2))
 0206    return 0
 160207  else
 160208    return (cmpstr(str1, str2, case_sensitive) == 0)
 0209  endif
 160210End
 211
 0212static Function AreWavesEqual(wv1, wv2, mode, tol, detailedMsg)
 213  WAVE/Z wv1, wv2
 214  variable mode, tol
 215  string &detailedMsg
 216
 0217  string waveDataMsg = ""
 0218  string dimLabelMsg = ""
 0219  variable result, err
 220
 0221  if(mode == WAVE_DATA)
 0222    if(!numpnts(wv1) || !numpnts(wv2))
 0223      result = !numpnts(wv1) && !numpnts(wv2)
 0224    elseif(WaveType(wv1, 1) != WaveType(wv2, 1))
 0225      detailedMsg = "The base wave types are different, WAVE_DATA can not be compared."
 0226      return 0
 0227    else
 0228      result = EqualWaves(wv1, wv2, mode, tol) == 1
 0229    endif
 0230  else
 0231    result = EqualWaves(wv1, wv2, mode, tol) == 1
 0232  endif
 233
 0234  if(!result)
 0235    switch(mode)
 0236      case WAVE_DATA:
 0237        waveDataMsg = IUTF_Utils#DetermineWaveDataDifference(wv1, wv2, tol)
 0238      case WAVE_DATA_TYPE:
 0239      case WAVE_SCALING:
 0240      case DATA_UNITS:
 0241      case DIMENSION_UNITS:
 0242      case WAVE_NOTE:
 0243      case WAVE_LOCK_STATE:
 0244      case DATA_FULL_SCALE:
 0245      case DIMENSION_SIZES:
 0246        // FIXME add detailed msg generation functions
 0247        break
 0248      case DIMENSION_LABELS:
 0249        // work around buggy EqualWaves versions which detect some
 0250        // waves as differing but they are not in reality
 251#if IgorVersion() >= 9.0
 0252        GenerateDimLabelDifference(wv1, wv2, dimLabelMsg)
 253#elif IgorVersion() >= 8.0
 254#if NumberByKey("BUILD", IgorInfo(0)) >= 33425
 0255        GenerateDimLabelDifference(wv1, wv2, dimLabelMsg)
 256#else // old IP8
 0257        result = GenerateDimLabelDifference(wv1, wv2, dimLabelMsg)
 258#endif
 259#else // IP7 and older
 0260        result = GenerateDimLabelDifference(wv1, wv2, dimLabelMsg)
 261#endif
 0262        break
 0263    endswitch
 264
 0265    detailedMsg = waveDataMsg
 0266    if(!IUTF_Utils#IsEmpty(dimLabelMsg))
 0267      detailedMsg += "\r" + dimLabelMsg
 0268    endif
 0269  else
 0270    detailedMsg = ""
 0271  endif
 272
 0273  return result
 0274End
 275
 0276static Function AddIfFlagSet(var, flag, flagString, str)
 277  variable var, flag
 278  string  flagString
 279  string &str
 280
 0281  if((var & flag) == flag)
 0282    str = flagString + ", " + str
 0283  endif
 0284End
 285
 0286static Function GetWaveMajorType(wv)
 287  WAVE/Z wv
 288
 0289  variable type  = 0
 0290  variable type2 = WaveType(wv, 2)
 0291  variable type1 = WaveType(wv, 1)
 292
 0293  if(type1 > 0 && type1 <= 4)
 0294    type = type | 2^(type1 - 1)
 0295  endif
 296
 0297  if(type2 > 0 && type2 <= 2)
 0298    type = type | 2^(type2 + 3)
 0299  endif
 300
 0301  if((type1 == 0 && type2 == 0) || !WaveExists(wv))
 0302    type = NULL_WAVE
 0303  endif
 304
 0305  return type
 0306End
 307
 0308static Function HasWaveMajorType(wv, majorType)
 309  WAVE/Z   wv
 310  variable majorType
 311
 0312  return (GetWaveMajorType(wv) & majorType) == majorType
 0313End
 314
 0315static Function/S GetWaveMajorTypeString(type)
 316  variable type
 317
 0318  string str = ""
 319
 0320  if((type & NULL_WAVE) == NULL_WAVE)
 0321    return "NULL_WAVE"
 0322  endif
 0323  AddIfFlagSet(type, NUMERIC_WAVE, "NUMERIC_WAVE", str)
 0324  AddIfFlagSet(type, TEXT_WAVE, "TEXT_WAVE", str)
 0325  AddIfFlagSet(type, DATAFOLDER_WAVE, "DATAFOLDER_WAVE", str)
 0326  AddIfFlagSet(type, WAVE_WAVE, "WAVE_WAVE", str)
 0327  AddIfFlagSet(type, NORMAL_WAVE, "NORMAL_WAVE", str)
 0328  AddIfFlagSet(type, FREE_WAVE, "FREE_WAVE", str)
 329
 0330  if(!CmpStr(str, ""))
 0331    return num2str(type)
 0332  endif
 333
 0334  return RemoveEnding(str, ", ")
 0335End
 336
 0337static Function GetWaveMinorType(wv)
 338  WAVE/Z wv
 339
 0340  variable type
 341
 0342  if(!WaveExists(wv))
 0343    return NULL_WAVE
 0344  endif
 345
 0346  type = WaveType(wv, 0)
 347
 0348  if(type == 0)
 0349    type = NON_NUMERIC_WAVE
 0350  endif
 351
 0352  return type
 0353End
 354
 0355static Function HasWaveMinorType(wv, minorType)
 356  WAVE/Z   wv
 357  variable minorType
 358
 0359  return (GetWaveMinorType(wv) & minorType) == minorType
 0360End
 361
 0362static Function/S GetWaveMinorTypeString(type)
 363  variable type
 364
 0365  string str = ""
 366
 0367  if((type & NULL_WAVE) == NULL_WAVE)
 0368    return "NULL_WAVE"
 0369  endif
 0370  AddIfFlagSet(type, NON_NUMERIC_WAVE, "NON_NUMERIC_WAVE", str)
 0371  AddIfFlagSet(type, COMPLEX_WAVE, "COMPLEX_WAVE", str)
 0372  AddIfFlagSet(type, FLOAT_WAVE, "FLOAT_WAVE", str)
 0373  AddIfFlagSet(type, DOUBLE_WAVE, "DOUBLE_WAVE", str)
 0374  AddIfFlagSet(type, INT8_WAVE, "INT8_WAVE", str)
 0375  AddIfFlagSet(type, INT16_WAVE, "INT16_WAVE", str)
 0376  AddIfFlagSet(type, INT32_WAVE, "INT32_WAVE", str)
 0377  AddIfFlagSet(type, INT64_WAVE, "INT64_WAVE", str)
 0378  AddIfFlagSet(type, UNSIGNED_WAVE, "UNSIGNED_WAVE", str)
 379
 0380  if(!CmpStr(str, ""))
 0381    return num2str(type)
 0382  endif
 383
 0384  return RemoveEnding(str, ", ")
 0385End
 386
 0387static Function HasRTE(code)
 388  variable code
 389
 0390  variable rte = GetRTError(0)
 391
 0392  return rte == code
 0393End
 394
 0395static Function HasAnyRTE()
 0396  variable code
 397
 0398  variable rte = GetRTError(0)
 399
 0400  return !!rte
 0401End
 402
 403/// @endcond // HIDDEN_SYMBOL