The documentation says:
For isbits types, a random/reasonable sentinel will be attempted if none provided.
...
For Integer types, all bit patterns are valid, so a random value is chosen;
But the constructor uses a constant default value. For example the default sentinel for Int is -1, so SentinelArray([-1, -1, -1]) creates an array with three missing values. From the documentation I expected an array of three -1, and a random sentinel different from -1.
The behavior with undef is also surprising: The documentation refers to the "standard undef pattern". As I understand, undef is meant to create uninitialized arrays, for cases where initialization is useless and undesired for performance reasons. But SentinelVector{Int}(undef, 3) actually initializes the array with 3 missing values. I would suggest removing the undef argument from the constructors (so a vector full of 3 missing values can be created with SentinelVector{Int}(3)). A later version could re-introduce the undef pattern with the correct semantics...
The documentation says:
But the constructor uses a constant default value. For example the default sentinel for
Intis -1, soSentinelArray([-1, -1, -1])creates an array with three missing values. From the documentation I expected an array of three-1, and a random sentinel different from -1.The behavior with
undefis also surprising: The documentation refers to the "standard undef pattern". As I understand,undefis meant to create uninitialized arrays, for cases where initialization is useless and undesired for performance reasons. ButSentinelVector{Int}(undef, 3)actually initializes the array with 3 missing values. I would suggest removing theundefargument from the constructors (so a vector full of 3 missing values can be created withSentinelVector{Int}(3)). A later version could re-introduce the undef pattern with the correct semantics...