1-1 Comparison: isValueEqual
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