Equivalent skips

Mutineer does not emit some mutants. The change is often noise. A normal test usually cannot kill it. There is no switch to turn these skips off. A chain-link skip matches the method name only. That match does not prove the two mutants are equivalent. An endless range skip is equivalent.

A team still silences an equivalent mutant that Mutineer does emit. Use # mutineer:disable-line or an ignore: entry, and put a reason on it. To put a reason on an ignore: entry, write the entry as a mapping: an id plus an optional reason. Any mapping needs Mutineer 1.7 or later in every gate that reads the file. An older version does not ignore that mutant, and it does not warn. See Suppressing equivalent mutants. mutineer triage prints those entries from a JSON report.

The chain_link operator drops one dotted call from a chain. It never drops the names below. The skip uses the name only. It does not check the receiver or the next call. The dropped call is often equivalent, not always. On a value that already has the target type, or that needs no copy, the call changes nothing. Dropping new sends the next call to the class. That raises, or it reaches a class method. Neither result says anything about the tests.

NameWhy it is skipped
to_sConversion. On a string, the call changes nothing.
to_strConversion. On a string, the call changes nothing.
to_symConversion. On a symbol, the call changes nothing.
to_iConversion. On an integer, the call changes nothing.
to_intConversion. On an integer, the call changes nothing.
to_fConversion. On a float, the call changes nothing.
to_rConversion. On a rational, the call changes nothing.
to_cConversion. On a complex number, the call changes nothing.
to_aConversion. On an array, the call changes nothing.
to_aryConversion. On an array, the call changes nothing.
to_hConversion. On a hash, the call changes nothing.
to_hashConversion. On a hash, the call changes nothing.
to_procConversion. On a proc, the call changes nothing.
to_setConversion. On a set, the call changes nothing.
dupCopy. Dropping it is a no-op when the next call does not mutate the receiver.
cloneCopy. Dropping it is a no-op when the next call does not mutate the receiver.
freezeA freeze that nothing later mutates changes nothing a test can see.
itselfReturns the receiver. Dropping it changes nothing.
newThe next call goes to the class. That raises, or it is a class method.

Endless range

The range operator swaps .. and .... An endless range (1.. or 1..nil) is skipped. (1..) and (1...) give the same result for slicing, include?, ===, size, and patterns, so the mutant is equivalent.