Zig

Zig Mutations

StatementBlock

Before

pub fn foo() void {
    bar();
}

After

pub fn foo() void {}

Condition

Before

pub fn foo() void {
    if (x > 0) {
        bar();
    }
}

After

pub fn foo() void {
    if (true) {
        bar();
    }
}
pub fn foo() void {
    if (false) {
        bar();
    }
}

BinaryOp - Add

Before

pub fn foo() u32 {
    return a + b;
}

After

pub fn foo() u32 {
    return a - b;
}
pub fn foo() u32 {
    return a * b;
}

BinaryOp - And

Before

pub fn foo() bool {
    return a and b;
}

After

pub fn foo() bool {
    return a or b;
}

BinaryOp - BitAnd

Before

pub fn foo() u32 {
    return a & b;
}

After

pub fn foo() u32 {
    return a | b;
}
pub fn foo() u32 {
    return a ^ b;
}

BinaryOp - BitOr

Before

pub fn foo() u32 {
    return a | b;
}

After

pub fn foo() u32 {
    return a & b;
}
pub fn foo() u32 {
    return a ^ b;
}

BinaryOp - BitXor

Before

pub fn foo() u32 {
    return a ^ b;
}

After

pub fn foo() u32 {
    return a & b;
}
pub fn foo() u32 {
    return a | b;
}

BinaryOp - Div

Before

pub fn foo() u32 {
    return a / b;
}

After

pub fn foo() u32 {
    return a * b;
}
pub fn foo() u32 {
    return a - b;
}

BinaryOp - Eq

Before

pub fn foo() bool {
    return a == b;
}

After

pub fn foo() bool {
    return a != b;
}

BinaryOp - Gt

Before

pub fn foo() bool {
    return a > b;
}

After

pub fn foo() bool {
    return a <= b;
}
pub fn foo() bool {
    return a >= b;
}

BinaryOp - Gte

Before

pub fn foo() bool {
    return a >= b;
}

After

pub fn foo() bool {
    return a < b;
}
pub fn foo() bool {
    return a > b;
}

BinaryOp - Lt

Before

pub fn foo() bool {
    return a < b;
}

After

pub fn foo() bool {
    return a >= b;
}
pub fn foo() bool {
    return a <= b;
}

BinaryOp - Lte

Before

pub fn foo() bool {
    return a <= b;
}

After

pub fn foo() bool {
    return a > b;
}
pub fn foo() bool {
    return a < b;
}

BinaryOp - Mul

Before

pub fn foo() u32 {
    return a * b;
}

After

pub fn foo() u32 {
    return a / b;
}
pub fn foo() u32 {
    return a + b;
}

BinaryOp - Or

Before

pub fn foo() bool {
    return a or b;
}

After

pub fn foo() bool {
    return a and b;
}

BinaryOp - Rem

Before

pub fn foo() u32 {
    return a % b;
}

After

pub fn foo() u32 {
    return a * b;
}
pub fn foo() u32 {
    return a / b;
}

BinaryOp - Shl

Before

pub fn foo() u32 {
    return a << b;
}

After

pub fn foo() u32 {
    return a >> b;
}

BinaryOp - Shr

Before

pub fn foo() u32 {
    return a >> b;
}

After

pub fn foo() u32 {
    return a << b;
}

BinaryOp - Ne

Before

pub fn foo() bool {
    return a != b;
}

After

pub fn foo() bool {
    return a == b;
}

BinaryOp - Sub

Before

pub fn foo() u32 {
    return a - b;
}

After

pub fn foo() u32 {
    return a + b;
}
pub fn foo() u32 {
    return a / b;
}

Assign - AddAssign

Before

pub fn foo() void {
    x += y;
}

After

pub fn foo() void {
    x -= y;
}
pub fn foo() void {
    x = y;
}

Assign - BitAndAssign

Before

pub fn foo() void {
    x &= y;
}

After

pub fn foo() void {
    x |= y;
}
pub fn foo() void {
    x = y;
}

Assign - BitOrAssign

Before

pub fn foo() void {
    x |= y;
}

After

pub fn foo() void {
    x &= y;
}
pub fn foo() void {
    x = y;
}

Assign - BitXorAssign

Before

pub fn foo() void {
    x ^= y;
}

After

pub fn foo() void {
    x &= y;
}
pub fn foo() void {
    x = y;
}

Assign - DivAssign

Before

pub fn foo() void {
    x /= y;
}

After

pub fn foo() void {
    x *= y;
}
pub fn foo() void {
    x = y;
}

Assign - MulAssign

Before

pub fn foo() void {
    x *= y;
}

After

pub fn foo() void {
    x /= y;
}
pub fn foo() void {
    x = y;
}

Assign - NormalAssign

Before

pub fn foo() void {
    x = y;
}

After

pub fn foo() void {
    x += y;
}
pub fn foo() void {
    x -= y;
}

Assign - RemAssign

Before

pub fn foo() void {
    x %= y;
}

After

pub fn foo() void {
    x *= y;
}
pub fn foo() void {
    x = y;
}

Assign - ShlAssign

Before

pub fn foo() void {
    x <<= y;
}

After

pub fn foo() void {
    x >>= y;
}
pub fn foo() void {
    x = y;
}

Assign - ShrAssign

Before

pub fn foo() void {
    x >>= y;
}

After

pub fn foo() void {
    x <<= y;
}
pub fn foo() void {
    x = y;
}

Assign - SubAssign

Before

pub fn foo() void {
    x -= y;
}

After

pub fn foo() void {
    x += y;
}
pub fn foo() void {
    x = y;
}

ArrayDecl - Inline

Before

pub fn foo() void {
    const arr = [_]u32{ 10, 20, 30 };
}

After

pub fn foo() void {
    const arr = [_]u32.{};
}

Literal - BoolTrue

Before

pub fn foo() bool {
    return true;
}

After

pub fn foo() bool {
    return false;
}

Literal - BoolFalse

Before

pub fn foo() bool {
    return false;
}

After

pub fn foo() bool {
    return true;
}

Literal - String

Before

pub fn foo() void {
    const s = "hello";
}

After

pub fn foo() void {
    const s = "";
}

Literal - EmptyString

Before

pub fn foo() void {
    const s = "";
}

After

pub fn foo() void {
    const s = "bough";
}

Literal - Number

Before

pub fn foo() u32 {
    return 42;
}

After

pub fn foo() u32 {
    return 0;
}
pub fn foo() u32 {
    return 1;
}
pub fn foo() u32 {
    return std.math.maxInt(u64);
}

UnaryNot

Before

pub fn foo() bool {
    return !x;
}

After

pub fn foo() bool {
    return x;
}

SwitchCase

Before

pub fn foo(x: u8) u8 {
    return switch (x) {
        100 => 200,
        300 => 400,
        else => 255,
    };
}

After

pub fn foo(x: u8) u8 {
    return switch (x) {
        ,
        300 => 400,
        else => 255,
    };
}
pub fn foo(x: u8) u8 {
    return switch (x) {
        100 => 200,
        ,
        else => 255,
    };
}