C++

C++ Mutations

StatementBlock

Before

void f() { x = 1; }

After

void f() {}

Condition

Before

void f() { if (x) { return; } }

After

void f() { if (true) { return; } }
void f() { if (false) { return; } }

BinaryOp - Add

Before

int x = a + b;

After

int x = a - b;
int x = a * b;

BinaryOp - And

Before

int x = a && b;

After

int x = a || b;

BinaryOp - BitAnd

Before

int x = a & b;

After

int x = a | b;
int x = a ^ b;

BinaryOp - BitOr

Before

int x = a | b;

After

int x = a & b;
int x = a ^ b;

BinaryOp - BitXor

Before

int x = a ^ b;

After

int x = a & b;
int x = a | b;

BinaryOp - Div

Before

int x = a / b;

After

int x = a * b;
int x = a - b;

BinaryOp - Eq

Before

int x = a == b;

After

int x = a != b;

BinaryOp - Gt

Before

int x = a > b;

After

int x = a <= b;
int x = a >= b;

BinaryOp - Gte

Before

int x = a >= b;

After

int x = a < b;
int x = a > b;

BinaryOp - Lt

Before

int x = a < b;

After

int x = a >= b;
int x = a <= b;

BinaryOp - Lte

Before

int x = a <= b;

After

int x = a > b;
int x = a < b;

BinaryOp - Mul

Before

int x = a * b;

After

int x = a / b;
int x = a + b;

BinaryOp - Or

Before

int x = a || b;

After

int x = a && b;

BinaryOp - Rem

Before

int x = a % b;

After

int x = a * b;
int x = a / b;

BinaryOp - Shl

Before

int x = a << b;

After

int x = a >> b;

BinaryOp - Shr

Before

int x = a >> b;

After

int x = a << b;

BinaryOp - Ne

Before

int x = a != b;

After

int x = a == b;

BinaryOp - Sub

Before

int x = a - b;

After

int x = a + b;
int x = a / b;

Assign - AddAssign

Before

void f() { x += 1; }

After

void f() { x -= 1; }
void f() { x = 1; }

Assign - BitAndAssign

Before

void f() { x &= 1; }

After

void f() { x |= 1; }
void f() { x = 1; }

Assign - BitOrAssign

Before

void f() { x |= 1; }

After

void f() { x &= 1; }
void f() { x = 1; }

Assign - BitXorAssign

Before

void f() { x ^= 1; }

After

void f() { x &= 1; }
void f() { x = 1; }

Assign - DivAssign

Before

void f() { x /= 1; }

After

void f() { x *= 1; }
void f() { x = 1; }

Assign - MulAssign

Before

void f() { x *= 1; }

After

void f() { x /= 1; }
void f() { x = 1; }

Assign - NormalAssign

Before

void f() { x = 1; }

After

void f() { x += 1; }
void f() { x -= 1; }

Assign - RemAssign

Before

void f() { x %= 1; }

After

void f() { x *= 1; }
void f() { x = 1; }

Assign - ShlAssign

Before

void f() { x <<= 1; }

After

void f() { x >>= 1; }
void f() { x = 1; }

Assign - ShrAssign

Before

void f() { x >>= 1; }

After

void f() { x <<= 1; }
void f() { x = 1; }

Assign - SubAssign

Before

void f() { x -= 1; }

After

void f() { x += 1; }
void f() { x = 1; }

ArrayDecl - Inline

Before

int arr[] = {1, 2, 3};

After

int arr[] = {};

Literal - BoolTrue

Before

bool x = true;

After

bool x = false;

Literal - BoolFalse

Before

bool x = false;

After

bool x = true;

Literal - String

Before

char *s = "hello";

After

char *s = "";

Literal - EmptyString

Before

char *s = "";

After

char *s = "bough";

Literal - Number

Before

int x = 42;

After

int x = 0;
int x = 1;
int x = -1;

UnaryNot

Before

void f() { int x = !y; }

After

void f() { int x = y; }

SwitchCase

Before

void f() { switch(x) { case 1: break; } }

After

void f() { switch(x) {  } }