Fraction.java

1
package com.github.dakusui.symfonion.utils;
2
3
4
import com.github.dakusui.symfonion.compat.exceptions.FractionFormatException;
5
6
import java.io.Serial;
7
import java.io.Serializable;
8
import java.util.regex.Matcher;
9
import java.util.regex.Pattern;
10
11
import static com.github.dakusui.symfonion.compat.exceptions.CompatExceptionThrower.throwFractionFormatException;
12
import static com.github.valid8j.classic.Requires.requireArgument;
13
import static com.github.valid8j.pcond.forms.Predicates.isEqualTo;
14
import static com.github.valid8j.pcond.forms.Predicates.not;
15
16
17
/**
18
 * A class to implement simple Fraction functions
19
 * there is basically a constructor (which reduces)
20
 *
21
 * @param numerator   A numerator of a fraction
22
 * @param denominator A denominator of a fraction
23
 */
24
public record Fraction(int numerator, int denominator) implements Cloneable, Serializable {
25
  /**
26
   * A regular expression that matches a fraction.
27
   */
28
  public static final  Pattern FRACTION_PATTERN = Pattern.compile("([0-9]+)/([1-9][0-9]*)");
29
  @Serial
30
  private static final long    serialVersionUID = 9185757132113L;
31
32
  /* some useful constant fractions */
33
  public static final Fraction ZERO = new Fraction(0, 1);
34
  public static final Fraction ONE  = new Fraction(1, 1);
35
36
  /**
37
   * Creates an object of this class.
38
   *
39
   * @param numerator   A numerator
40
   * @param denominator A denominator
41
   */
42
  public Fraction(int numerator, int denominator) {
43
    requireArgument(denominator, not(isEqualTo(0)));
44
    int n = numerator;
45
    int d = denominator;
46
    int gcd;
47
48
    while (true) {
49
      gcd = this.gcd(n, d);
50
      if (gcd == 1)
51
        break;
52
      n /= gcd;
53
      d /= gcd;
54
    }
55
    this.numerator   = n;
56
    this.denominator = d;
57
  }
58
59
  /**
60
   * Parses a given string `str` and creates a `Fraction` object
61
   * The str must match with a regular expression:
62
   *
63
   * - `([0-9]+)/([1-9][0-9]*)`
64
   *
65
   * If it doesn't, A `FractionFormatException` will be thrown.
66
   *
67
   * @param str A string containing a fraction.
68
   * @return A `Fraction` object.
69
   * @see FractionFormatException
70
   */
71
  public static Fraction parseFraction(String str) throws FractionFormatException {
72 1 1. parseFraction : negated conditional → KILLED
    if (str == null) {
73
      return null;
74
    }
75
    Matcher m = FRACTION_PATTERN.matcher(str);
76 1 1. parseFraction : negated conditional → KILLED
    if (!m.matches()) {
77
      throw throwFractionFormatException(str);
78
    }
79 1 1. parseFraction : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::parseFraction → SURVIVED
    return new Fraction(
80
        Integer.parseInt(m.group(1)),
81
        Integer.parseInt(m.group(2))
82
    );
83
  }
84
85
  /**
86
   * Creates a clone of this object
87
   *
88
   * @return A cloned object.
89
   */
90
  @Override
91
  public Fraction clone() {
92
    Fraction ret;
93
    try {
94
      ret = (Fraction) super.clone();
95
    } catch (CloneNotSupportedException e) {
96
      throw new AssertionError(e);
97
    }
98 1 1. clone : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::clone → KILLED
    return ret;
99
  }
100
101
  private int gcd(int a, int b) {
102
    int t;
103
104 1 1. gcd : negated conditional → KILLED
    while (b != 0) {
105
      t = a;
106
      a = b;
107 1 1. gcd : Replaced integer modulus with multiplication → TIMED_OUT
      b = t % a;
108
    }
109 1 1. gcd : replaced int return with 0 for com/github/dakusui/symfonion/utils/Fraction::gcd → KILLED
    return (a);
110
  }
111
112
  /**
113
   * Returns a double representation of this object.
114
   *
115
   * @return value of this objet in `double`.
116
   */
117
  public double doubleValue() {
118 3 1. doubleValue : Replaced double multiplication with division → KILLED
2. doubleValue : Replaced double division with multiplication → KILLED
3. doubleValue : replaced double return with 0.0d for com/github/dakusui/symfonion/utils/Fraction::doubleValue → KILLED
    return (1.0 * this.numerator() / this.denominator());
119
  }
120
121
  /**
122
   * Returns a whole portion of this fraction.
123
   *
124
   * @return A whole portion of this fraction.
125
   */
126
  public int wholePortion() {
127 1 1. wholePortion : replaced int return with 0 for com/github/dakusui/symfonion/utils/Fraction::wholePortion → KILLED
    return (int) this.doubleValue();
128
  }
129
130
  /**
131
   * Returns a fraction portion of this fraction.
132
   *
133
   * @return A fraction portion of this fraction.
134
   */
135
  public Fraction fractionPortion() {
136
    Fraction f = new Fraction(this.wholePortion(), 1);
137 1 1. fractionPortion : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::fractionPortion → KILLED
    return subtract(this, f);
138
  }
139
140
  @Override
141
  public boolean equals(Object anotherObject) {
142 1 1. equals : negated conditional → KILLED
    if (!(anotherObject instanceof Fraction another))
143 1 1. equals : replaced boolean return with true for com/github/dakusui/symfonion/utils/Fraction::equals → KILLED
      return false;
144 3 1. equals : negated conditional → KILLED
2. equals : replaced boolean return with true for com/github/dakusui/symfonion/utils/Fraction::equals → KILLED
3. equals : negated conditional → KILLED
    return this.denominator == another.denominator && this.numerator == another.numerator;
145
  }
146
147
  @Override
148
  public String toString() {
149 1 1. toString : replaced return value with "" for com/github/dakusui/symfonion/utils/Fraction::toString → KILLED
    return (this.numerator() + "/" + this.denominator());
150
  }
151
152
  /**
153
   * Returns the addition of `f1` and `f2`.
154
   *
155
   * @param f1 A first fraction
156
   * @param f2 A second fraction
157
   * @return Result of the addition.
158
   */
159
  public static Fraction add(Fraction f1, Fraction f2) {
160
    int n,
161
        d;
162
163 3 1. add : Replaced integer multiplication with division → KILLED
2. add : Replaced integer multiplication with division → KILLED
3. add : Replaced integer addition with subtraction → KILLED
    n = f1.numerator * f2.denominator + f2.numerator * f1.denominator;
164 1 1. add : Replaced integer multiplication with division → KILLED
    d = f1.denominator * f2.denominator;
165 1 1. add : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::add → KILLED
    return new Fraction(n, d);
166
  }
167
168
  /**
169
   * Returns the subtraction of `f1` and `f2
170
   *
171
   * @param f1 A fraction
172
   * @param f2 A fraction to be subtracted from `f1`.
173
   * @return Result of the subtraction
174
   */
175
  public static Fraction subtract(Fraction f1, Fraction f2) {
176
    int n,
177
        d;
178
179 3 1. subtract : Replaced integer subtraction with addition → KILLED
2. subtract : Replaced integer multiplication with division → KILLED
3. subtract : Replaced integer multiplication with division → KILLED
    n = f1.numerator * f2.denominator - f2.numerator * f1.denominator;
180 1 1. subtract : Replaced integer multiplication with division → KILLED
    d = f1.denominator * f2.denominator;
181 1 1. subtract : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::subtract → KILLED
    return new Fraction(n, d);
182
  }
183
184
185
  /**
186
   * Multiplies two fractions.
187
   *
188
   * @param f1 A fraction.
189
   * @param f2 Another fraction.
190
   * @return A multiplied result.
191
   */
192
  public static Fraction multi(Fraction f1, Fraction f2) {
193 3 1. multi : Replaced integer multiplication with division → KILLED
2. multi : Replaced integer multiplication with division → KILLED
3. multi : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::multi → KILLED
    return new Fraction(f1.numerator * f2.numerator, f1.denominator * f2.denominator);
194
  }
195
196
  /**
197
   * Divides `f1` by `f2`.
198
   *
199
   * @param f1 A fraction to be divided.
200
   * @param f2 A divisor.
201
   * @return Result of the division.
202
   */
203
  public static Fraction div(Fraction f1, Fraction f2) {
204 3 1. div : Replaced integer multiplication with division → KILLED
2. div : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::div → KILLED
3. div : Replaced integer multiplication with division → KILLED
    return new Fraction(f1.numerator * f2.denominator, f1.denominator * f2.numerator);
205
  }
206
207
  /**
208
   * Returns the comparison result.
209
   *
210
   * @param f1 A fraction.
211
   * @param f2 A fraction to be compared with `f1`.
212
   * @return negative - `f1` is little than `f2`/ 0 - `f1` and `f2` are equal/ positive - `f1`is greater than `f2`.
213
   */
214
  public static int compare(Fraction f1, Fraction f2) {
215
    Fraction sub = subtract(f1, f2);
216 2 1. compare : Replaced integer multiplication with division → KILLED
2. compare : replaced int return with 0 for com/github/dakusui/symfonion/utils/Fraction::compare → KILLED
    return sub.numerator * sub.denominator;
217
  }
218
219
  /**
220
   * Returns a greater one from `f1`and `f2`.
221
   * When `f1` and `f2`, either of them may be returned.
222
   *
223
   * @param f1 A fraction
224
   * @param f2 Another fraction
225
   * @return Greater one of `f1` and `f2`.
226
   */
227
  public static Fraction max(Fraction f1, Fraction f2) {
228 3 1. max : changed conditional boundary → SURVIVED
2. max : negated conditional → KILLED
3. max : Replaced double subtraction with addition → KILLED
    if (f1.doubleValue() - f2.doubleValue() >= 0)
229 1 1. max : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::max → KILLED
      return f1;
230
    else
231 1 1. max : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::max → KILLED
      return f2;
232
  }
233
234
  /**
235
   * Returns a non-greater fraction from `f1` and `f2`.
236
   *
237
   * @param f1 A fraction
238
   * @param f2 Another fraction
239
   * @return A non-greater fraction.
240
   */
241
  public static Fraction min(Fraction f1, Fraction f2) {
242 3 1. min : changed conditional boundary → SURVIVED
2. min : Replaced double subtraction with addition → KILLED
3. min : negated conditional → KILLED
    if (f1.doubleValue() - f2.doubleValue() <= 0)
243 1 1. min : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::min → KILLED
      return f1;
244
    else
245 1 1. min : replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::min → KILLED
      return f2;
246
  }
247
248
  public boolean isNegative() {
249 4 1. isNegative : Replaced float multiplication with division → SURVIVED
2. isNegative : negated conditional → TIMED_OUT
3. isNegative : replaced boolean return with true for com/github/dakusui/symfonion/utils/Fraction::isNegative → TIMED_OUT
4. isNegative : changed conditional boundary → KILLED
    return Math.signum(this.numerator) * Math.signum(this.denominator) < 0;
250
  }
251
}

Mutations

72

1.1
Location : parseFraction
Killed by : com.github.dakusui.symfonion.tests.InvalidDataErrorTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.InvalidDataErrorTest]/[method:illegalFraction()]
negated conditional → KILLED

76

1.1
Location : parseFraction
Killed by : com.github.dakusui.symfonion.tests.MidiCompilerTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.MidiCompilerTest]/[test-template:exercise(com.github.dakusui.symfonion.testutils.SymfonionTestCase)]/[test-template-invocation:#2]
negated conditional → KILLED

79

1.1
Location : parseFraction
Killed by : none
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::parseFraction → SURVIVED
Covering tests

98

1.1
Location : clone
Killed by : com.github.dakusui.symfonion.tests.song.GrooveTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.song.GrooveTest]/[method:test_A01()]
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::clone → KILLED

104

1.1
Location : gcd
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_equals_3()]
negated conditional → KILLED

107

1.1
Location : gcd
Killed by : none
Replaced integer modulus with multiplication → TIMED_OUT

109

1.1
Location : gcd
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_equals_2()]
replaced int return with 0 for com/github/dakusui/symfonion/utils/Fraction::gcd → KILLED

118

1.1
Location : doubleValue
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_fractionPortion_91()]
Replaced double multiplication with division → KILLED

2.2
Location : doubleValue
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_fractionPortion_91()]
Replaced double division with multiplication → KILLED

3.3
Location : doubleValue
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_fractionPortion_91()]
replaced double return with 0.0d for com/github/dakusui/symfonion/utils/Fraction::doubleValue → KILLED

127

1.1
Location : wholePortion
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_fractionPortion_91()]
replaced int return with 0 for com/github/dakusui/symfonion/utils/Fraction::wholePortion → KILLED

137

1.1
Location : fractionPortion
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_fractionPortion_91()]
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::fractionPortion → KILLED

142

1.1
Location : equals
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_equals_4()]
negated conditional → KILLED

143

1.1
Location : equals
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_equals_4()]
replaced boolean return with true for com/github/dakusui/symfonion/utils/Fraction::equals → KILLED

144

1.1
Location : equals
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_equals_1()]
negated conditional → KILLED

2.2
Location : equals
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_equals_3()]
replaced boolean return with true for com/github/dakusui/symfonion/utils/Fraction::equals → KILLED

3.3
Location : equals
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_equals_3()]
negated conditional → KILLED

149

1.1
Location : toString
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_toString()]
replaced return value with "" for com/github/dakusui/symfonion/utils/Fraction::toString → KILLED

163

1.1
Location : add
Killed by : com.github.dakusui.symfonion.tests.song.GrooveTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.song.GrooveTest]/[method:test_B04()]
Replaced integer multiplication with division → KILLED

2.2
Location : add
Killed by : com.github.dakusui.symfonion.tests.song.GrooveTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.song.GrooveTest]/[method:test_B04()]
Replaced integer multiplication with division → KILLED

3.3
Location : add
Killed by : com.github.dakusui.symfonion.tests.song.GrooveTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.song.GrooveTest]/[method:test_A01()]
Replaced integer addition with subtraction → KILLED

164

1.1
Location : add
Killed by : com.github.dakusui.symfonion.tests.song.GrooveTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.song.GrooveTest]/[method:test_A01()]
Replaced integer multiplication with division → KILLED

165

1.1
Location : add
Killed by : com.github.dakusui.symfonion.tests.song.GrooveTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.song.GrooveTest]/[method:test_A01()]
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::add → KILLED

179

1.1
Location : subtract
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_compare_02()]
Replaced integer subtraction with addition → KILLED

2.2
Location : subtract
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_compare_03()]
Replaced integer multiplication with division → KILLED

3.3
Location : subtract
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_compare_02()]
Replaced integer multiplication with division → KILLED

180

1.1
Location : subtract
Killed by : com.github.dakusui.symfonion.tests.song.GrooveTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.song.GrooveTest]/[method:test_A05()]
Replaced integer multiplication with division → KILLED

181

1.1
Location : subtract
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_compare_02()]
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::subtract → KILLED

193

1.1
Location : multi
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_multiply_01()]
Replaced integer multiplication with division → KILLED

2.2
Location : multi
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_multiply_01()]
Replaced integer multiplication with division → KILLED

3.3
Location : multi
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_multiply_01()]
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::multi → KILLED

204

1.1
Location : div
Killed by : com.github.dakusui.symfonion.tests.song.GrooveTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.song.GrooveTest]/[method:test_B02()]
Replaced integer multiplication with division → KILLED

2.2
Location : div
Killed by : com.github.dakusui.symfonion.tests.song.GrooveTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.song.GrooveTest]/[method:test_B02()]
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::div → KILLED

3.3
Location : div
Killed by : com.github.dakusui.symfonion.tests.MidiCompilerTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.MidiCompilerTest]/[test-template:exercise(com.github.dakusui.symfonion.testutils.SymfonionTestCase)]/[test-template-invocation:#4]
Replaced integer multiplication with division → KILLED

216

1.1
Location : compare
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_compare_02()]
Replaced integer multiplication with division → KILLED

2.2
Location : compare
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_compare_02()]
replaced int return with 0 for com/github/dakusui/symfonion/utils/Fraction::compare → KILLED

228

1.1
Location : max
Killed by : none
changed conditional boundary → SURVIVED
Covering tests

2.2
Location : max
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_max_2()]
negated conditional → KILLED

3.3
Location : max
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_max_1()]
Replaced double subtraction with addition → KILLED

229

1.1
Location : max
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_max_2()]
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::max → KILLED

231

1.1
Location : max
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_max_1()]
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::max → KILLED

242

1.1
Location : min
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_min_1()]
Replaced double subtraction with addition → KILLED

2.2
Location : min
Killed by : none
changed conditional boundary → SURVIVED
Covering tests

3.3
Location : min
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_min_1()]
negated conditional → KILLED

243

1.1
Location : min
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_min_1()]
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::min → KILLED

245

1.1
Location : min
Killed by : com.github.dakusui.symfonion.tests.core.FractionTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.core.FractionTest]/[method:test_min_2()]
replaced return value with null for com/github/dakusui/symfonion/utils/Fraction::min → KILLED

249

1.1
Location : isNegative
Killed by : com.github.dakusui.symfonion.tests.song.GrooveTest.[engine:junit-jupiter]/[class:com.github.dakusui.symfonion.tests.song.GrooveTest]/[method:test_A01()]
changed conditional boundary → KILLED

2.2
Location : isNegative
Killed by : none
negated conditional → TIMED_OUT

3.3
Location : isNegative
Killed by : none
replaced boolean return with true for com/github/dakusui/symfonion/utils/Fraction::isNegative → TIMED_OUT

4.4
Location : isNegative
Killed by : none
Replaced float multiplication with division → SURVIVED
Covering tests

Active mutators

Tests examined


Report generated by PIT 1.19.1