Supported mutators

All Stryker versions support a variety of different mutators. We've aligned on a standard naming scheme so it is easy to switch and compare implementations. The difference in support is listed below.

Support

MutatorStrykerStryker.NETStryker4s
Arithmetic Operatorโœ…โœ…โŒ
Array Declarationโœ…โœ…โŒ
Assignment ExpressionโŒโœ…n/a
Block Statementโœ…โŒโŒ
Boolean Literalโœ…โœ…๏ธโœ…
Checked Statementn/aโœ…n/a
Conditional Expressionโœ…โœ…โœ…
Equality Operatorโœ…โœ…โœ…
Logical Operatorโœ…โœ…โœ…
Method ExpressionโŒโœ…โœ…
String Literalโœ…โœ…โœ…
Unary Operatorโœ…โœ…โŒ
Update Operatorโœ…โœ…n/a

Arithmetic Operator

OriginalMutated
a + ba - b
a - ba + b
a * ba / b
a / ba * b
a % ba * b

๐Ÿ” Back to Top

Array Declaration

OriginalMutated
new Array(1, 2, 3, 4)new Array()
[1, 2, 3, 4][ ]

๐Ÿ” Back to Top

Assignment Expression

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

๐Ÿ” Back to Top

Block Statement

Removes the content of every block statement. For example the code:

function saySomething() {
console.log('Hello world!');
}

becomes:

function saySomething() {}

๐Ÿ” Back to Top

Boolean Literal

OriginalMutated
truefalse
falsetrue
!(a == b)a == b ยน
  • ยน: Not supported by Stryker4s

๐Ÿ” Back to Top

Checked Statement

Stryker.NET specific mutator

OriginalMutated
checked(2 + 4)2 + 4

๐Ÿ” Back to Top

Conditional Expression

OriginalMutated
for (var i = 0; i < 10; i++) { }for (var i = 0; false; i++) { } ยน
while (a > b) { }while (false) { }
do { } while (a > b);do { } while (false);
if (a > b) { }if (true) { }
if (a > b) { }if (false) { }
var x = a > b ? 1 : 2;var x = true ? 1 : 2; ยน
var x = a > b ? 1 : 2;var x = false ? 1 : 2; ยน
  • ยน: Not supported by Stryker4s

๐Ÿ” Back to Top

Equality Operator

OriginalMutated
a < ba <= b
a < ba >= b
a <= ba < b
a <= ba > b
a > ba >= b
a > ba <= b
a >= ba > b
a >= ba < b
a == ba != b
a != ba == b
a === ba !== b ยน
a !== ba === b ยน
  • ยน: Only supported on StrykerJS and Stryker4s

๐Ÿ” Back to Top

Logical Operator

OriginalMutated
a && ba \|\| b
a \|\| ba && b

๐Ÿ” Back to Top

Method Expression

Due to differences in language syntax, method expressions are implemented differently in each Stryker framework:

Stryker.NET:

OriginalMutated
Distinct()``
Reverse()``
OrderBy()``
OrderByDescending()``
SingleOrDefault()FirstOrDefault()
FirstOrDefault()SingleOrDefault()
First()Last()
Last()First()
All()Any()
Any()All()
Skip()Take()
Take()Skip()
SkipWhile()TakeWhile()
TakeWhile()SkipWhile()
Min()Max()
Max()Min()
Sum()Count()
Count()Sum()

Stryker4s:

OriginalMutated
a.filter(b)a.filterNot(b)
a.filterNot(b)a.filter(b)
a.exists(b)a.forall(b)
a.forall(b)a.exists(b)
a.take(b)a.drop(b)
a.drop(b)a.take(b)
a.takeRight(b)a.dropRight(b)
a.dropRight(b)a.takeRight(b)
a.takeWhile(b)a.dropWhile(b)
a.dropWhile(b)a.takeWhile(b)
a.isEmptya.nonEmpty
a.nonEmptya.isEmpty
a.indexOfa.lastIndexOf(b)
a.lastIndexOf(b)a.indexOf(b)
a.maxa.min
a.mina.max
a.maxBy(b)a.minBy(b)
a.minBy(b)a.maxBy(b)

๐Ÿ” Back to Top

String Literal

OriginalMutated
"foo" (non-empty string)"" (empty string)
"" (empty string)"Stryker was here!"
s"foo ${bar}" (string interpolation)s"" ยน

ยน For Stryker4s, only works with string interpolation and not other types of interpolation (like Scalameta quasiquotes) to avoid compile errors

๐Ÿ” Back to Top

Unary Operator

OriginalMutated
+a-a
-a+a

๐Ÿ” Back to Top

Update Operator

OriginalMutated
a++a--
a--a++
++a--a
--a++a

๐Ÿ” Back to Top