Mutators

Stryker supports a variety of mutators, which are listed below. Do you have a suggestion for a (new) mutator? Feel free to create an issue!

Arithmetic Operators

OriginalMutated
+-
-+
*/
/*
%*

Equality Operators

OriginalMutated
><
>>=
>=<
>=>
<>
<<=
<=>
<=<
==!=
!===

Logical Operators

OriginalMutated
&&\|\|
\|\|&&
^==

Boolean Literals

OriginalMutated
truefalse
falsetrue
!person.IsAdult()person.IsAdult()
if(person.IsAdult())if(!person.IsAdult())
while(person.IsAdult())while(!person.IsAdult())

Assignment Statements

OriginalMutated
+= -=
-= +=
*= /=
/= *=
%= *=
<<=>>=
>>=<<=
&= \|=
&= ^=
\|= &=
\|= ^=
^= \|=
^= &=

Collection initialization

OriginalMutated
new int[] { 1, 2 };new int[] { };
int[] numbers = { 1, 2 };int[] numbers = { };
new List<int> { 1, 2 };new List<int> { };
new Collection<int> { 1, 2 };new Collection<int> { };
new Dictionary<int, int> { { 1, 1 } };new Dictionary<int, int> { };

Unary Operators

OriginalMutated
-variable+variable
+variable-variable
~variablevariable

Update Operators

OriginalMutated
variable++variable--
variable--variable++
++variable--variable
--variable++variable

Checked Statements

OriginalMutated
checked(2 + 4)2 + 4

Linq Methods

OriginalMutated
SingleOrDefault()Single()
Single()SingleOrDefault()
FirstOrDefault()First()
First()FirstOrDefault()
Last()First()
All()Any()
Any()All()
Skip()Take()
Take()Skip()
SkipWhile()TakeWhile()
TakeWhile()SkipWhile()
Min()Max()
Max()Min()
Sum()Max()*
Count()Sum()
Average()Min()
OrderBy()OrderByDescending()
OrderByDescending()OrderBy()
ThenBy()ThenByDescending()
ThenByDescending()ThenBy()
Reverse()AsEnumerable()
AsEnumerable()Reverse()
Union()Intersect()
Intersect()Union()
Concat()Except()
Except()Concat()

* Sum() was mutated to Count() in previous versions; this change reduces compilation errors.

String Literals and Constants

OriginalMutated
"foo"""
"""Stryker was here!"
$"foo {bar}"$""
@"foo"@""
string.Empty"Stryker was here!"

Bitwise Operators

OriginalMutated
<<>>
>><<
&\|
\|&
a^b~(a^b)

Regular Expressions

For the full list of all available regex mutations, see the regex mutator docs.