Ensure Repeatable Results by Preserving Insert Order in Unique Array Generation Methods #4586
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Context:
The methods
ArrayOfUniqueValues
andArrayOfUniqueStrings
aim to generate repeatable sequences of unique values or strings. The repeatability is achieved using a fixedSeed
(as noted in the comment on line 16). However, the current implementation relies on the traversal order ofHashSet
, which does not guarantee a consistent order.Issue:
The assumption that a fixed insertion sequence into a
HashSet
ensures a repeatable traversal order is flawed:HashSet
does not provide any guarantees about order semantics in its documentation..NET
, may introduce variations inSet
behavior where traversal order is inconsistent even with a fixed insertion sequence.This discrepancy could lead to non-repeatable results, breaking the method's intended behavior.
Solution:
HashSet.CopyTo
for transferring elements to the result array, we now directly assign values to the array in the order they are added to theHashSet
. This ensures the output matches the insertion order and remains repeatable with a fixed seed.ArrayOfUniqueValues
andArrayOfUniqueStrings
methods to reflect this approach.Changes:
ArrayOfUniqueValues
:HashSet.CopyTo
.ArrayOfUniqueStrings
:HashSet
.Benefits:
HashSet
traversal.