preload

1-1 Comparison: isValueEqual

Posted by Albert Gareev on Jul 12, 2010 | Categories: Source codeVerification

Reference Page: Comparison Rules

Automatic Comparison Rules

Relationship: One-to-One / Rule: Is Value Equal

Definitions

Supported data types: String, Number, Date

Values of different data types are considered unequal.
Values of unsupported data types are considered unequal.

Data type: String

Strings are compared based on total length and encoding of each character.

Two strings are considered equal if they have equal length (same number of characters) AND all characters, compared one by one, were equal.

Data type: Number

Numeric values are considered equal if there is no difference (near-zero-difference) between them (matters for floating point numbers with precision loss). 

Data type: Date

Date/time values are compared per component values: Year, Month, Day, Hour, Second. Two dates are considered equal if there is zero seconds difference between them.

Implementation


Public Function isValueEqual(ByVal sActualValue, ByVal sExpectedValue, ByVal sFormat)

  If Not isSameFormat(sActualValue, sExpectedValue, sFormat) Then
    isValueEqual = False
    Exit Function
  End If
 
  Select Case UCase(sFormat)
    Case "NUMBER"
     If Abs(CDbl(sActualValue) - CDbl(sExpectedValue)) < dblNearlyZero Then
       isValueEqual = True
    Else
       isValueEqual = False
     End If
    Case "DATE"  
      If DateDiff("s", CDate(sActualValue), CDate(sExpectedValue)) = 0 Then
      isValueEqual = True
     Else
      isValueEqual = False
     End If
   Case "STRING"
      If StrComp(CStr(sActualValue), CStr(sExpectedValue), vbBinaryCompare) = 0 Then
      isValueEqual = True
      Else
      isValueEqual = False
      End If
    Case Else 
      isValueEqual = False
  End Select
End Function

Test Code


  Log.Message("1-1 Comparison: isValueEqual")
 
  boolRC = isValueEqual(1, 1.0, "Number")
  If Not boolRC Then
    Log.Error("isValueEqual failed")
  End If
  boolRC = isValueEqual("1", "1.0", "String")
  If boolRC Then
    Log.Error("isValueEqual failed")
  End If
  boolRC = isValueEqual(1, 1.0, "Double")
  If boolRC Then
    Log.Error("isValueEqual failed")
  End If

  sValue1 = 1
  sValue2 = 1+dblNearlyZero
  boolRC = isValueEqual(sValue1, sValue2, "Number")
  If boolRC Then
    Log.Error("isValueEqual failed")
  End If

  sValue1 = 1
  sValue2 = 1+dblNearlyZero/10
  boolRC = isValueEqual(sValue1, sValue2, "Number")
  If Not boolRC Then
    Log.Error("isValueEqual failed")
  End If
 
  sValue1 = CDate("01/01/01")
  sValue2 = CDate("01/01/2001")
  boolRC = isValueEqual(sValue1, sValue2, "DATE")
  If Not boolRC Then
    Log.Error("isValueEqual failed")
  End If
     
  sValue1 = CDate("01/01/01")
  sValue2 = CDate("1/1/2001")
  boolRC = isValueEqual(sValue1, sValue2, "DATE")
  If Not boolRC Then
    Log.Error("isValueEqual failed")
  End If


Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported
This work by Albert Gareev is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported.