Go

Go Mutations

StatementBlock

Before

package p; func f() { x = 1 }

After

package p; func f() {}

Condition

Before

package p; func f() { if x > 0 { return } }

After

package p; func f() { if true { return } }
package p; func f() { if false { return } }

BinaryOp - Add

Before

package p; var x = a + b

After

package p; var x = a - b
package p; var x = a * b

BinaryOp - And

Before

package p; var x = a && b

After

package p; var x = a || b

BinaryOp - BitAnd

Before

package p; var x = a & b

After

package p; var x = a | b
package p; var x = a ^ b

BinaryOp - BitOr

Before

package p; var x = a | b

After

package p; var x = a & b
package p; var x = a ^ b

BinaryOp - BitXor

Before

package p; var x = a ^ b

After

package p; var x = a & b
package p; var x = a | b

BinaryOp - Div

Before

package p; var x = a / b

After

package p; var x = a * b
package p; var x = a - b

BinaryOp - Eq

Before

package p; var x = a == b

After

package p; var x = a != b

BinaryOp - Gt

Before

package p; var x = a > b

After

package p; var x = a <= b
package p; var x = a >= b

BinaryOp - Gte

Before

package p; var x = a >= b

After

package p; var x = a < b
package p; var x = a > b

BinaryOp - Lt

Before

package p; var x = a < b

After

package p; var x = a >= b
package p; var x = a <= b

BinaryOp - Lte

Before

package p; var x = a <= b

After

package p; var x = a > b
package p; var x = a < b

BinaryOp - Mul

Before

package p; var x = a * b

After

package p; var x = a / b
package p; var x = a + b

BinaryOp - Or

Before

package p; var x = a || b

After

package p; var x = a && b

BinaryOp - Rem

Before

package p; var x = a % b

After

package p; var x = a * b
package p; var x = a / b

BinaryOp - Shl

Before

package p; var x = a << b

After

package p; var x = a >> b

BinaryOp - Shr

Before

package p; var x = a >> b

After

package p; var x = a << b

BinaryOp - Ne

Before

package p; var x = a != b

After

package p; var x = a == b

BinaryOp - Sub

Before

package p; var x = a - b

After

package p; var x = a + b
package p; var x = a / b

Assign - AddAssign

Before

package p; func f() { x += 1 }

After

package p; func f() { x -= 1 }
package p; func f() { x = 1 }

Assign - BitAndAssign

Before

package p; func f() { x &= 1 }

After

package p; func f() { x |= 1 }
package p; func f() { x = 1 }

Assign - BitOrAssign

Before

package p; func f() { x |= 1 }

After

package p; func f() { x &= 1 }
package p; func f() { x = 1 }

Assign - BitXorAssign

Before

package p; func f() { x ^= 1 }

After

package p; func f() { x &= 1 }
package p; func f() { x = 1 }

Assign - DivAssign

Before

package p; func f() { x /= 1 }

After

package p; func f() { x *= 1 }
package p; func f() { x = 1 }

Assign - MulAssign

Before

package p; func f() { x *= 1 }

After

package p; func f() { x /= 1 }
package p; func f() { x = 1 }

Assign - NormalAssign

Before

package p; func f() { x = 1 }

After

package p; func f() { x += 1 }
package p; func f() { x -= 1 }

Assign - RemAssign

Before

package p; func f() { x %= 1 }

After

package p; func f() { x *= 1 }
package p; func f() { x = 1 }

Assign - ShlAssign

Before

package p; func f() { x <<= 1 }

After

package p; func f() { x >>= 1 }
package p; func f() { x = 1 }

Assign - ShrAssign

Before

package p; func f() { x >>= 1 }

After

package p; func f() { x <<= 1 }
package p; func f() { x = 1 }

Assign - SubAssign

Before

package p; func f() { x -= 1 }

After

package p; func f() { x += 1 }
package p; func f() { x = 1 }

ArrayDecl - Inline

Before

package p; var x = []int{1, 2, 3}

After

package p; var x = []int{}

Literal - BoolTrue

Before

package p; var x = true

After

package p; var x = false

Literal - BoolFalse

Before

package p; var x = false

After

package p; var x = true

Literal - String

Before

package p; var x = "hello"

After

package p; var x = ""

Literal - EmptyString

Before

package p; var x = ""

After

package p; var x = "bough"

Literal - Number

Before

package p; var x = 42

After

package p; var x = 0
package p; var x = 1
package p; var x = -1

DictDecl

Before

package p; var x = map[string]int{"a": 1}

After

package p; var x = map[string]int{}

UnaryNot

Before

package p; func f() { x := !y }

After

package p; func f() { x := y }

SwitchCase

Before

package p; func f() { switch x { case 1: return } }

After

package p; func f() { switch x {  } }