Consider adding NullableRef and NullableValue wrappers
Opened this issue · 4 comments
The code below does not fail in v3. This seems similar to #30 (v2 does still return nulls).
[Property]
public Property Test(string s) {
return (s != null).Collect(s);
}
Is this an expected change for v3? What is the recommended way to have nulls mixed in?
Yeah, I felt like the default has changed to "nulls are opt-in" in recent years, in F# since the beginning and in C# more recently.
You can write a string generator that also generates nulls in whatever frequency you'd like.
Thank you, I was able to figure out the following which fails the test with null
s...
[Property]
public Property Test() {
// Gen<string?> NullableString() => Gen.Frequency((1, Gen.Constant<string?>(null)), (7, ArbMap.Default.GeneratorFor<string?>()));
Gen<string?> NullableString() => Gen.OrNull(ArbMap.Default.GeneratorFor<string?>());
return Prop.ForAll(NullableString().ToArbitrary(), s => {
return (s != null).Collect(s);
});
}
I see something in the source called Nullable
that looks like it gens a null 1/8th of the time and may be simpler to use, but I can't figure out how to use it. Do you have an example somewhere?
that's in reference to https://docs.microsoft.com/en-us/dotnet/api/system.nullable-1.value?view=net-6.0 i.e. for nullable value types. So it won't help with strings.
Should probably have NullableRef and NullableValue at this point...
The idea to use this would be:
public Property Test(NullableRef<string> wrapper) {
var theStringOrNull = wrapper.Value;
}
OK, thanks for all the help!
Not sure if you want this issue open for "NullableRef and NullableValue", so feel free to close if not.