1-1 Comparison: isValueEqual

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 the author is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported.