Private Sub RandomIntegerWithinRangeVerify()
'Check to see how many of the valid integers are generated by our random integer generator.
'Note that this function does not check to see if the random number 0 (zero) is generated.
'See also:
' RandomLongWithinRangeVerify Subroutine
' RndBitsVerify Subroutine, et. al.
Const lngMaxTries = 24
Dim alngNeg() As Long
Dim alngPos() As Long
ReDim alngNeg(MinInteger To -1)
ReDim alngPos(1 To MaxInteger)
Dim intPass As Integer
For intPass = 1 To lngMaxTries
Debug.Print "Pass #" & intPass & "..."
' Generate and log the random numbers.
Dim lngTry As Long
For lngTry = 1 To CLng(MaxInteger) - CLng(MinInteger)
Dim varRand As Variant
varRand = RandomIntegerWithinRange(MinInteger, MaxInteger)
If IsNull(varRand) Then
Debug.Print "Error: Try #" & lngTry & ": Result is Null"
ElseIf varRand < 0 Then
alngNeg(varRand) = alngNeg(varRand) + 1
ElseIf varRand > 0 Then
alngPos(varRand) = alngPos(varRand) + 1
End If
Next lngTry
' Find number of random numbers not used.
Dim lngUnused As Long
lngUnused = 0
Dim lngElem As Long
For lngElem = LBound(alngNeg) To UBound(alngNeg)
If alngNeg(lngElem) = 0 Then lngUnused = lngUnused + 1
Next lngElem
For lngElem = LBound(alngPos) To UBound(alngPos)
If alngPos(lngElem) = 0 Then lngUnused = lngUnused + 1
Next lngElem
Dim dblPctUnused As Double
dblPctUnused = CDbl(lngUnused) / (CDbl(MaxInteger) - CDbl(MinInteger)) * 100#
Debug.Print "Unused: " & Format$(lngUnused, "#,##0") & " (" & Format$(dblPctUnused, "#,##0.000 000") & "%)"
' Find minimum random number generated.
Dim varMin As Variant
varMin = "(Does Not Exist)"
For lngElem = LBound(alngNeg) To UBound(alngNeg)
If alngNeg(lngElem) <> 0 Then
varMin = lngElem
Exit For
End If
Next lngElem
Debug.Print "Minimum: " & varMin & " (Min Integer = " & MinInteger & ")"
' Find maximum random number generated.
Dim varMax As Variant
varMax = "(Does Not Exist)"
For lngElem = UBound(alngPos) To LBound(alngPos) Step -1
If alngPos(lngElem) <> 0 Then
varMax = lngElem
Exit For
End If
Next lngElem
Debug.Print "Maximum: " & varMax & " (Max Integer = " & MaxInteger & ")"
If lngUnused = 0 Then Exit For
Next intPass
End SubCopyright 1996-1999 Entisoft
Entisoft Tools is a trademark of Entisoft.