CheckedBinaryOperator.java

1
/*-
2
 * #%L
3
 * io.earcam.unexceptional
4
 * %%
5
 * Copyright (C) 2016 - 2017 earcam
6
 * %%
7
 * SPDX-License-Identifier: (BSD-3-Clause OR EPL-1.0 OR Apache-2.0 OR MIT)
8
 * 
9
 * You <b>must</b> choose to accept, in full - any individual or combination of 
10
 * the following licenses:
11
 * <ul>
12
 * 	<li><a href="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</a></li>
13
 * 	<li><a href="https://www.eclipse.org/legal/epl-v10.html">EPL-1.0</a></li>
14
 * 	<li><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache-2.0</a></li>
15
 * 	<li><a href="https://opensource.org/licenses/MIT">MIT</a></li>
16
 * </ul>
17
 * #L%
18
 */
19
package io.earcam.unexceptional;
20
21
import static java.util.Objects.requireNonNull;
22
23
import java.io.Serializable;//NOSONAR stfu false positive (suspect Sonar Squid is looking at bytecode here? as erasure of all but left-most bound where multiple bounds occur, see casts of return types in maxBy/minBy)
24
import java.util.Comparator;
25
import java.util.Objects;
26
27
/**
28
 * A checked parallel of {@link java.util.function.BinaryOperator}
29
 * 
30
 * @param <T> arguments and return type
31
 * @param <E> the type of Throwable declared
32
 * 
33
 * @since 0.2.0
34
 * 
35
 * @see java.util.function.BinaryOperator
36
 */
37
@FunctionalInterface
38
public interface CheckedBinaryOperator<T, E extends Throwable> extends CheckedBiFunction<T, T, T, E> {
39
40
	/**
41
	 * See {@link java.util.function.BinaryOperator#minBy(Comparator)}
42
	 *
43
	 * @param <T> arguments and return type
44
	 * 
45
	 * @param comparator the comparator used to determine the minimum.
46
	 * @return a {@link CheckedBinaryOperator}
47
	 * @throws NullPointerException if {@code comparator} is {@code null}
48
	 */
49
	@SuppressWarnings("squid:S1905") // SonarQube false positive
50
	public static <T, E extends Throwable> CheckedBinaryOperator<T, E> minBy(/* @Nonnull */ CheckedComparator<? super T, E> comparator)
51
	{
52
		requireNonNull(comparator);
53 4 1. lambda$minBy$64dd3a98$1 : changed conditional boundary → KILLED
2. lambda$minBy$64dd3a98$1 : negated conditional → KILLED
3. lambda$minBy$64dd3a98$1 : mutated return of Object value for io/earcam/unexceptional/CheckedBinaryOperator::lambda$minBy$64dd3a98$1 to ( if (x != null) null else throw new RuntimeException ) → KILLED
4. minBy : mutated return of Object value for io/earcam/unexceptional/CheckedBinaryOperator::minBy to ( if (x != null) null else throw new RuntimeException ) → KILLED
		return (CheckedBinaryOperator<T, E> & Serializable) (a, b) -> comparator.compare(a, b) < 0 ? a : b;
54
	}
55
56
57
	/**
58
	 * See {@link java.util.function.BinaryOperator#maxBy(Comparator)}
59
	 * 
60
	 * @param <T> arguments and return type
61
	 * 
62
	 * @param comparator the comparator used to determine the maximum.
63
	 * @return a {@link CheckedBinaryOperator}
64
	 * @throws NullPointerException if {@code comparator} is {@code null}
65
	 */
66
	@SuppressWarnings("squid:S1905") // SonarQube false positive
67
	public static <T, E extends Throwable> CheckedBinaryOperator<T, E> maxBy(/* @Nonnull */ CheckedComparator<? super T, ? extends E> comparator)
68
	{
69
		Objects.requireNonNull(comparator);
70 4 1. lambda$maxBy$e8f13ff0$1 : changed conditional boundary → KILLED
2. lambda$maxBy$e8f13ff0$1 : negated conditional → KILLED
3. lambda$maxBy$e8f13ff0$1 : mutated return of Object value for io/earcam/unexceptional/CheckedBinaryOperator::lambda$maxBy$e8f13ff0$1 to ( if (x != null) null else throw new RuntimeException ) → KILLED
4. maxBy : mutated return of Object value for io/earcam/unexceptional/CheckedBinaryOperator::maxBy to ( if (x != null) null else throw new RuntimeException ) → KILLED
		return (CheckedBinaryOperator<T, E> & Serializable) (a, b) -> comparator.compare(a, b) > 0 ? a : b;
71
	}
72
}

Mutations

53

1.1
Location : lambda$minBy$64dd3a98$1
Killed by : io.earcam.unexceptional.CheckedBinaryOperatorTest.minByReturnsSecondWhenEqual()
changed conditional boundary → KILLED

2.2
Location : lambda$minBy$64dd3a98$1
Killed by : io.earcam.unexceptional.CheckedBinaryOperatorTest.minByReturnsSecondWhenEqual()
negated conditional → KILLED

3.3
Location : lambda$minBy$64dd3a98$1
Killed by : io.earcam.unexceptional.CheckedBinaryOperatorTest.minByReturnsSecondWhenEqual()
mutated return of Object value for io/earcam/unexceptional/CheckedBinaryOperator::lambda$minBy$64dd3a98$1 to ( if (x != null) null else throw new RuntimeException ) → KILLED

4.4
Location : minBy
Killed by : io.earcam.unexceptional.CheckedBinaryOperatorTest.minByReturnsSecondWhenEqual()
mutated return of Object value for io/earcam/unexceptional/CheckedBinaryOperator::minBy to ( if (x != null) null else throw new RuntimeException ) → KILLED

70

1.1
Location : lambda$maxBy$e8f13ff0$1
Killed by : io.earcam.unexceptional.CheckedBinaryOperatorTest.maxByReturnsSecondWhenEqual()
changed conditional boundary → KILLED

2.2
Location : lambda$maxBy$e8f13ff0$1
Killed by : io.earcam.unexceptional.CheckedBinaryOperatorTest.maxByReturnsSecondWhenEqual()
negated conditional → KILLED

3.3
Location : lambda$maxBy$e8f13ff0$1
Killed by : io.earcam.unexceptional.CheckedBinaryOperatorTest.maxByReturnsSecondWhenEqual()
mutated return of Object value for io/earcam/unexceptional/CheckedBinaryOperator::lambda$maxBy$e8f13ff0$1 to ( if (x != null) null else throw new RuntimeException ) → KILLED

4.4
Location : maxBy
Killed by : io.earcam.unexceptional.CheckedBinaryOperatorTest.maxByReturnsSecondWhenEqual()
mutated return of Object value for io/earcam/unexceptional/CheckedBinaryOperator::maxBy to ( if (x != null) null else throw new RuntimeException ) → KILLED

Active mutators

Tests examined


Report generated by PIT 1.4.0