| 1 |
"""Mutate Operators.""" |
|
| 2 | ||
| 3 |
from __future__ import annotations |
|
| 4 | ||
| 5 |
import ast |
|
| 6 |
from typing import Callable, ClassVar |
|
| 7 | ||
| 8 |
from poodle.data_types import FileMutation, Mutator, PoodleConfig |
|
| 9 | ||
| 10 | ||
| 11 |
class OperationMutator(ast.NodeVisitor, Mutator): |
|
| 12 |
"""Base class for mutating operations.""" |
|
| 13 | ||
| 14 |
# Binary Operators as of Python 3.12: |
|
| 15 |
# https://docs.python.org/3/library/ast.html#ast.BinOp |
|
| 16 |
# https://www.w3schools.com/python/python_operators.asp |
|
| 17 |
# ast.Add + |
|
| 18 |
# ast.Sub - |
|
| 19 |
# ast.Mult * |
|
| 20 |
# ast.Div / |
|
| 21 |
# ast.FloorDiv // |
|
| 22 |
# ast.Mod % |
|
| 23 |
# ast.Pow ** |
|
| 24 |
# ast.LShift << |
|
| 25 |
# ast.RShift >> |
|
| 26 |
# ast.BitOr | |
|
| 27 |
# ast.BitXor ^ |
|
| 28 |
# ast.BitAnd & |
|
| 29 |
# ast.MatMult @ |
|
| 30 | ||
| 31 |
type_map_levels: ClassVar[dict[str, dict[type, list[type]]]] = {
|
|
| ▸ | 32 |
"min": {
|
|
Status: Mutant Found Mutator Name: String Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:32
@@ -29,7 +29,7 @@
# ast.MatMult @
type_map_levels: ClassVar[dict[str, dict[type, list[type]]]] = {
- "min": {
+ 'XXminXX': {
ast.Add: [ast.Mult],
ast.Sub: [ast.Div],
ast.Mult: [ast.Add],
|
||
| 33 |
ast.Add: [ast.Mult], |
|
| 34 |
ast.Sub: [ast.Div], |
|
| 35 |
ast.Mult: [ast.Add], |
|
| 36 |
ast.Div: [ast.Sub], |
|
| 37 |
ast.FloorDiv: [ast.Div], |
|
| 38 |
ast.Mod: [ast.Sub], |
|
| 39 |
ast.Pow: [ast.Mult], |
|
| 40 |
ast.LShift: [ast.RShift], |
|
| 41 |
ast.RShift: [ast.LShift], |
|
| 42 |
ast.BitOr: [ast.BitAnd], |
|
| 43 |
ast.BitXor: [ast.BitOr], |
|
| 44 |
ast.BitAnd: [ast.BitXor], |
|
| 45 |
}, |
|
| ▸ | 46 |
"std": {
|
|
Status: Mutant Found Mutator Name: String Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:46
@@ -43,7 +43,7 @@
ast.BitXor: [ast.BitOr],
ast.BitAnd: [ast.BitXor],
},
- "std": {
+ 'XXstdXX': {
ast.Add: [ast.Sub, ast.Mult],
ast.Sub: [ast.Add, ast.Div],
ast.Mult: [ast.Div, ast.Add],
|
||
| 47 |
ast.Add: [ast.Sub, ast.Mult], |
|
| 48 |
ast.Sub: [ast.Add, ast.Div], |
|
| 49 |
ast.Mult: [ast.Div, ast.Add], |
|
| 50 |
ast.Div: [ast.Mult, ast.Sub], |
|
| 51 |
ast.FloorDiv: [ast.Mult, ast.Div], |
|
| 52 |
ast.Mod: [ast.FloorDiv, ast.Sub], |
|
| 53 |
ast.Pow: [ast.Mult, ast.Div], |
|
| 54 |
ast.LShift: [ast.RShift], |
|
| 55 |
ast.RShift: [ast.LShift], |
|
| 56 |
ast.BitOr: [ast.BitAnd], |
|
| 57 |
ast.BitXor: [ast.BitOr, ast.BitAnd], |
|
| 58 |
ast.BitAnd: [ast.BitOr], |
|
| 59 |
}, |
|
| ▸ | 60 |
"max": {
|
|
Status: Mutant Found Mutator Name: String Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:60
@@ -57,7 +57,7 @@
ast.BitXor: [ast.BitOr, ast.BitAnd],
ast.BitAnd: [ast.BitOr],
},
- "max": {
+ 'XXmaxXX': {
ast.Add: [ast.Sub, ast.Mult, ast.Div, ast.FloorDiv, ast.Mod, ast.Pow],
ast.Sub: [ast.Add, ast.Mult, ast.Div, ast.FloorDiv, ast.Mod, ast.Pow],
ast.Mult: [ast.Add, ast.Sub, ast.Div, ast.FloorDiv, ast.Mod, ast.Pow],
|
||
| 61 |
ast.Add: [ast.Sub, ast.Mult, ast.Div, ast.FloorDiv, ast.Mod, ast.Pow], |
|
| 62 |
ast.Sub: [ast.Add, ast.Mult, ast.Div, ast.FloorDiv, ast.Mod, ast.Pow], |
|
| 63 |
ast.Mult: [ast.Add, ast.Sub, ast.Div, ast.FloorDiv, ast.Mod, ast.Pow], |
|
| 64 |
ast.Div: [ast.Add, ast.Sub, ast.Mult, ast.FloorDiv, ast.Mod, ast.Pow], |
|
| 65 |
ast.FloorDiv: [ast.Add, ast.Sub, ast.Mult, ast.Div, ast.Mod, ast.Pow], |
|
| 66 |
ast.Mod: [ast.Add, ast.Sub, ast.Mult, ast.Div, ast.FloorDiv, ast.Pow], |
|
| 67 |
ast.Pow: [ast.Add, ast.Sub, ast.Mult, ast.Div, ast.FloorDiv, ast.Mod], |
|
| 68 |
ast.LShift: [ast.RShift, ast.BitOr, ast.BitXor, ast.BitAnd], |
|
| 69 |
ast.RShift: [ast.LShift, ast.BitOr, ast.BitXor, ast.BitAnd], |
|
| 70 |
ast.BitOr: [ast.LShift, ast.RShift, ast.BitXor, ast.BitAnd], |
|
| 71 |
ast.BitXor: [ast.LShift, ast.RShift, ast.BitOr, ast.BitAnd], |
|
| 72 |
ast.BitAnd: [ast.LShift, ast.RShift, ast.BitOr, ast.BitXor], |
|
| 73 |
}, |
|
| 74 |
} |
|
| 75 | ||
| 76 |
def __init__(self, config: PoodleConfig, echo: Callable, *args, **kwargs) -> None: |
|
| 77 |
"""Initialize and read settings.""" |
|
| ▸ | 78 |
super().__init__(config, echo, *args, **kwargs) |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:78
@@ -75,7 +75,7 @@
def __init__(self, config: PoodleConfig, echo: Callable, *args, **kwargs) -> None:
"""Initialize and read settings."""
- super().__init__(config, echo, *args, **kwargs)
+ None
self.mutants: list[FileMutation] = []
level = self.config.mutator_opts.get("operator_level", "std")
|
||
| 79 |
self.mutants: list[FileMutation] = [] |
|
| 80 | ||
| ▸ | 81 |
level = self.config.mutator_opts.get("operator_level", "std")
|
|
Status: Mutant Found Mutator Name: String Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:81
@@ -78,7 +78,7 @@
super().__init__(config, echo, *args, **kwargs)
self.mutants: list[FileMutation] = []
- level = self.config.mutator_opts.get("operator_level", "std")
+ level = self.config.mutator_opts.get('XXoperator_levelXX', "std")
if level not in self.type_map_levels:
echo(f"WARN: Invalid value operator_opts.operator_level={level}. Using Default value 'std'")
level = "std"
Status: Mutant Found Mutator Name: String Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:81
@@ -78,7 +78,7 @@
super().__init__(config, echo, *args, **kwargs)
self.mutants: list[FileMutation] = []
- level = self.config.mutator_opts.get("operator_level", "std")
+ level = self.config.mutator_opts.get("operator_level", 'XXstdXX')
if level not in self.type_map_levels:
echo(f"WARN: Invalid value operator_opts.operator_level={level}. Using Default value 'std'")
level = "std"
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:81
@@ -78,7 +78,7 @@
super().__init__(config, echo, *args, **kwargs)
self.mutants: list[FileMutation] = []
- level = self.config.mutator_opts.get("operator_level", "std")
+ level = None
if level not in self.type_map_levels:
echo(f"WARN: Invalid value operator_opts.operator_level={level}. Using Default value 'std'")
level = "std"
|
||
| ▸ | 82 |
if level not in self.type_map_levels: |
|
Status: Mutant Found Mutator Name: Compare Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:82
@@ -79,7 +79,7 @@
self.mutants: list[FileMutation] = []
level = self.config.mutator_opts.get("operator_level", "std")
- if level not in self.type_map_levels:
+ if level in self.type_map_levels:
echo(f"WARN: Invalid value operator_opts.operator_level={level}. Using Default value 'std'")
level = "std"
|
||
| ▸ | 83 |
echo(f"WARN: Invalid value operator_opts.operator_level={level}. Using Default value 'std'")
|
|
Status: Mutant Found Mutator Name: String Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:83
@@ -80,7 +80,7 @@
level = self.config.mutator_opts.get("operator_level", "std")
if level not in self.type_map_levels:
- echo(f"WARN: Invalid value operator_opts.operator_level={level}. Using Default value 'std'")
+ echo(f"'XXWARN: Invalid value operator_opts.operator_level=XX'{level}. Using Default value 'std'")
level = "std"
self.type_map: dict[type, list[type]] = self.type_map_levels[level]
Status: Mutant Found Mutator Name: String Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:83
@@ -80,7 +80,7 @@
level = self.config.mutator_opts.get("operator_level", "std")
if level not in self.type_map_levels:
- echo(f"WARN: Invalid value operator_opts.operator_level={level}. Using Default value 'std'")
+ echo(f"WARN: Invalid value operator_opts.operator_level={level}"XX. Using Default value 'std'XX"")
level = "std"
self.type_map: dict[type, list[type]] = self.type_map_levels[level]
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:83
@@ -80,7 +80,7 @@
level = self.config.mutator_opts.get("operator_level", "std")
if level not in self.type_map_levels:
- echo(f"WARN: Invalid value operator_opts.operator_level={level}. Using Default value 'std'")
+ None
level = "std"
self.type_map: dict[type, list[type]] = self.type_map_levels[level]
|
||
| ▸ | 84 |
level = "std" |
|
Status: Mutant Found Mutator Name: String Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:84
@@ -81,7 +81,7 @@
level = self.config.mutator_opts.get("operator_level", "std")
if level not in self.type_map_levels:
echo(f"WARN: Invalid value operator_opts.operator_level={level}. Using Default value 'std'")
- level = "std"
+ level = 'XXstdXX'
self.type_map: dict[type, list[type]] = self.type_map_levels[level]
|
||
| 85 | ||
| ▸ | 86 |
self.type_map: dict[type, list[type]] = self.type_map_levels[level] |
|
Status: Mutant Found Mutator Name: DictArray Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:86
@@ -83,7 +83,7 @@
echo(f"WARN: Invalid value operator_opts.operator_level={level}. Using Default value 'std'")
level = "std"
- self.type_map: dict[type, list[type]] = self.type_map_levels[level]
+ self.type_map: dict[type, list[type]] = None
def create_mutations(self, parsed_ast: ast.Module, *_, **__) -> list[FileMutation]:
"""Visit ast nodes and return created mutants."""
|
||
| 87 | ||
| 88 |
def create_mutations(self, parsed_ast: ast.Module, *_, **__) -> list[FileMutation]: |
|
| 89 |
"""Visit ast nodes and return created mutants.""" |
|
| 90 |
self.mutants = [] |
|
| ▸ | 91 |
self.add_parent_attr(parsed_ast) |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:91
@@ -88,7 +88,7 @@
def create_mutations(self, parsed_ast: ast.Module, *_, **__) -> list[FileMutation]:
"""Visit ast nodes and return created mutants."""
self.mutants = []
- self.add_parent_attr(parsed_ast)
+ None
self.visit(parsed_ast)
return self.mutants
|
||
| ▸ | 92 |
self.visit(parsed_ast) |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:92
@@ -89,7 +89,7 @@
"""Visit ast nodes and return created mutants."""
self.mutants = []
self.add_parent_attr(parsed_ast)
- self.visit(parsed_ast)
+ None
return self.mutants
|
||
| ▸ | 93 |
return self.mutants |
|
Status: Mutant Found Mutator Name: Return Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:93
@@ -90,7 +90,7 @@
self.mutants = []
self.add_parent_attr(parsed_ast)
self.visit(parsed_ast)
- return self.mutants
+ return None
class BinaryOperationMutator(OperationMutator):
|
||
| 94 | ||
| 95 | ||
| 96 |
class BinaryOperationMutator(OperationMutator): |
|
| 97 |
"""Mutate Binary Operations.""" |
|
| 98 | ||
| ▸ | 99 |
mutator_name = "BinOp" |
|
Status: Mutant Found Mutator Name: String Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:99
@@ -96,7 +96,7 @@
class BinaryOperationMutator(OperationMutator):
"""Mutate Binary Operations."""
- mutator_name = "BinOp"
+ mutator_name = 'XXBinOpXX'
def visit_BinOp(self, node: ast.BinOp) -> None:
"""Identify replacement Operations and create Mutants."""
|
||
| 100 | ||
| 101 |
def visit_BinOp(self, node: ast.BinOp) -> None: |
|
| 102 |
"""Identify replacement Operations and create Mutants.""" |
|
| ▸ | 103 |
if self.is_annotation(node): |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:103
@@ -100,7 +100,7 @@
def visit_BinOp(self, node: ast.BinOp) -> None:
"""Identify replacement Operations and create Mutants."""
- if self.is_annotation(node):
+ if None:
return
if type(node.op) in self.type_map:
|
||
| 104 |
return |
|
| 105 | ||
| ▸ | 106 |
if type(node.op) in self.type_map: |
|
Status: Mutant Found Mutator Name: Compare Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:106
@@ -103,7 +103,7 @@
if self.is_annotation(node):
return
- if type(node.op) in self.type_map:
+ if type(node.op) not in self.type_map:
mut_types = self.type_map[type(node.op)]
self.mutants.extend([self.create_bin_op_mutant(node, new_type) for new_type in mut_types])
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:106
@@ -103,7 +103,7 @@
if self.is_annotation(node):
return
- if type(node.op) in self.type_map:
+ if None in self.type_map:
mut_types = self.type_map[type(node.op)]
self.mutants.extend([self.create_bin_op_mutant(node, new_type) for new_type in mut_types])
|
||
| ▸ | 107 |
mut_types = self.type_map[type(node.op)] |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:107
@@ -104,7 +104,7 @@
return
if type(node.op) in self.type_map:
- mut_types = self.type_map[type(node.op)]
+ mut_types = self.type_map[None]
self.mutants.extend([self.create_bin_op_mutant(node, new_type) for new_type in mut_types])
def create_bin_op_mutant(self, node: ast.BinOp, new_type: type) -> FileMutation:
Status: Mutant Found Mutator Name: DictArray Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:107
@@ -104,7 +104,7 @@
return
if type(node.op) in self.type_map:
- mut_types = self.type_map[type(node.op)]
+ mut_types = None
self.mutants.extend([self.create_bin_op_mutant(node, new_type) for new_type in mut_types])
def create_bin_op_mutant(self, node: ast.BinOp, new_type: type) -> FileMutation:
|
||
| ▸ | 108 |
self.mutants.extend([self.create_bin_op_mutant(node, new_type) for new_type in mut_types]) |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:108
@@ -105,7 +105,7 @@
if type(node.op) in self.type_map:
mut_types = self.type_map[type(node.op)]
- self.mutants.extend([self.create_bin_op_mutant(node, new_type) for new_type in mut_types])
+ None
def create_bin_op_mutant(self, node: ast.BinOp, new_type: type) -> FileMutation:
"""Create BinOp with replacement operation."""
|
||
| 109 | ||
| 110 |
def create_bin_op_mutant(self, node: ast.BinOp, new_type: type) -> FileMutation: |
|
| 111 |
"""Create BinOp with replacement operation.""" |
|
| ▸ | 112 |
return self.create_file_mutation(node, ast.unparse(ast.BinOp(left=node.left, op=new_type(), right=node.right))) |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:112
@@ -109,7 +109,7 @@
def create_bin_op_mutant(self, node: ast.BinOp, new_type: type) -> FileMutation:
"""Create BinOp with replacement operation."""
- return self.create_file_mutation(node, ast.unparse(ast.BinOp(left=node.left, op=new_type(), right=node.right)))
+ return None
class AugAssignMutator(OperationMutator):
Status: Mutant Found Mutator Name: Return Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:112
@@ -109,7 +109,7 @@
def create_bin_op_mutant(self, node: ast.BinOp, new_type: type) -> FileMutation:
"""Create BinOp with replacement operation."""
- return self.create_file_mutation(node, ast.unparse(ast.BinOp(left=node.left, op=new_type(), right=node.right)))
+ return None
class AugAssignMutator(OperationMutator):
|
||
| 113 | ||
| 114 | ||
| 115 |
class AugAssignMutator(OperationMutator): |
|
| 116 |
"""Mutate Augmented Assignments.""" |
|
| 117 | ||
| ▸ | 118 |
mutator_name = "AugAssign" |
|
Status: Mutant Found Mutator Name: String Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:118
@@ -115,7 +115,7 @@
class AugAssignMutator(OperationMutator):
"""Mutate Augmented Assignments."""
- mutator_name = "AugAssign"
+ mutator_name = 'XXAugAssignXX'
def visit_AugAssign(self, node: ast.AugAssign) -> None:
"""Identify replacement Operations and create Mutants."""
|
||
| 119 | ||
| 120 |
def visit_AugAssign(self, node: ast.AugAssign) -> None: |
|
| 121 |
"""Identify replacement Operations and create Mutants.""" |
|
| ▸ | 122 |
self.mutants.append(self.create_assign_mutant(node)) |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:122
@@ -119,7 +119,7 @@
def visit_AugAssign(self, node: ast.AugAssign) -> None:
"""Identify replacement Operations and create Mutants."""
- self.mutants.append(self.create_assign_mutant(node))
+ None
if type(node.op) in self.type_map:
mut_types = self.type_map[type(node.op)]
|
||
| 123 | ||
| ▸ | 124 |
if type(node.op) in self.type_map: |
|
Status: Mutant Found Mutator Name: Compare Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:124
@@ -121,7 +121,7 @@
"""Identify replacement Operations and create Mutants."""
self.mutants.append(self.create_assign_mutant(node))
- if type(node.op) in self.type_map:
+ if type(node.op) not in self.type_map:
mut_types = self.type_map[type(node.op)]
self.mutants.extend([self.create_aug_assign_mutant(node, new_type) for new_type in mut_types])
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:124
@@ -121,7 +121,7 @@
"""Identify replacement Operations and create Mutants."""
self.mutants.append(self.create_assign_mutant(node))
- if type(node.op) in self.type_map:
+ if None in self.type_map:
mut_types = self.type_map[type(node.op)]
self.mutants.extend([self.create_aug_assign_mutant(node, new_type) for new_type in mut_types])
|
||
| ▸ | 125 |
mut_types = self.type_map[type(node.op)] |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:125
@@ -122,7 +122,7 @@
self.mutants.append(self.create_assign_mutant(node))
if type(node.op) in self.type_map:
- mut_types = self.type_map[type(node.op)]
+ mut_types = self.type_map[None]
self.mutants.extend([self.create_aug_assign_mutant(node, new_type) for new_type in mut_types])
def create_assign_mutant(self, node: ast.AugAssign) -> FileMutation:
Status: Mutant Found Mutator Name: DictArray Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:125
@@ -122,7 +122,7 @@
self.mutants.append(self.create_assign_mutant(node))
if type(node.op) in self.type_map:
- mut_types = self.type_map[type(node.op)]
+ mut_types = None
self.mutants.extend([self.create_aug_assign_mutant(node, new_type) for new_type in mut_types])
def create_assign_mutant(self, node: ast.AugAssign) -> FileMutation:
|
||
| ▸ | 126 |
self.mutants.extend([self.create_aug_assign_mutant(node, new_type) for new_type in mut_types]) |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:126
@@ -123,7 +123,7 @@
if type(node.op) in self.type_map:
mut_types = self.type_map[type(node.op)]
- self.mutants.extend([self.create_aug_assign_mutant(node, new_type) for new_type in mut_types])
+ None
def create_assign_mutant(self, node: ast.AugAssign) -> FileMutation:
"""Create Assign to replace AugAssign."""
|
||
| 127 | ||
| 128 |
def create_assign_mutant(self, node: ast.AugAssign) -> FileMutation: |
|
| 129 |
"""Create Assign to replace AugAssign.""" |
|
| ▸ | 130 |
return self.create_file_mutation( |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:130
@@ -127,10 +127,7 @@
def create_assign_mutant(self, node: ast.AugAssign) -> FileMutation:
"""Create Assign to replace AugAssign."""
- return self.create_file_mutation(
- node,
- ast.unparse(ast.Assign(lineno=node.lineno, targets=[node.target], value=node.value)),
- )
+ return None
def create_aug_assign_mutant(self, node: ast.AugAssign, new_type: type) -> FileMutation:
"""Create replacement AugAssign with alternate operation."""
Status: Mutant Found Mutator Name: Return Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:130
@@ -127,10 +127,7 @@
def create_assign_mutant(self, node: ast.AugAssign) -> FileMutation:
"""Create Assign to replace AugAssign."""
- return self.create_file_mutation(
- node,
- ast.unparse(ast.Assign(lineno=node.lineno, targets=[node.target], value=node.value)),
- )
+ return None
def create_aug_assign_mutant(self, node: ast.AugAssign, new_type: type) -> FileMutation:
"""Create replacement AugAssign with alternate operation."""
|
||
| 131 |
node, |
|
| 132 |
ast.unparse(ast.Assign(lineno=node.lineno, targets=[node.target], value=node.value)), |
|
| 133 |
) |
|
| 134 | ||
| 135 |
def create_aug_assign_mutant(self, node: ast.AugAssign, new_type: type) -> FileMutation: |
|
| 136 |
"""Create replacement AugAssign with alternate operation.""" |
|
| ▸ | 137 |
return self.create_file_mutation( |
|
Status: Mutant Found Mutator Name: FuncCall Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:137
@@ -134,7 +134,4 @@
def create_aug_assign_mutant(self, node: ast.AugAssign, new_type: type) -> FileMutation:
"""Create replacement AugAssign with alternate operation."""
- return self.create_file_mutation(
- node,
- ast.unparse(ast.AugAssign(target=node.target, op=new_type(), value=node.value)),
- )
+ return None
Status: Mutant Found Mutator Name: Return Unified Diff: --- src\poodle\mutators\operators.py
+++ [Mutant] src\poodle\mutators\operators.py:137
@@ -134,7 +134,4 @@
def create_aug_assign_mutant(self, node: ast.AugAssign, new_type: type) -> FileMutation:
"""Create replacement AugAssign with alternate operation."""
- return self.create_file_mutation(
- node,
- ast.unparse(ast.AugAssign(target=node.target, op=new_type(), value=node.value)),
- )
+ return None
|
||
| 138 |
node, |
|
| 139 |
ast.unparse(ast.AugAssign(target=node.target, op=new_type(), value=node.value)), |
|
| 140 |
) |