replace negate conditional with remove conditional #943
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.
Removes negate conditionals from the default set and replaces it with remove conditional (false). Remove conditional (true) is added to the STRONGER set.
This leaves both sets creating the same number of mutants, but as remove conditional is more stable than negate conditional a stronger test suite is required to kill the mutants.
Remove conditional logically subsumes negate conditional. We can see this with a truth table.
The != operator gives
true true -> false
true false -> true
false true -> true
false false -> false
Its negation (==) gives
true true -> true
true false -> false
false true -> false
false false -> true
where as replacing it with false gives
true true -> false
true false -> false
false true -> false
false false -> false
So, if the test suite provided only true,true and false,false as inputs, the mutant would be killed for negation, but survive for removal.