Deadline.java

1
/*
2
 * Copyright 2014-2026 Grzegorz Piwowarek, https://4comprehension.com/
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 * https://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
package com.pivovarit.collectors;
17
18
import java.util.concurrent.atomic.AtomicLong;
19
20
final class Deadline {
21
22
    private static final long UNSET = Long.MIN_VALUE;
23
24
    private final long timeoutNanos;
25
    private final AtomicLong deadlineNanos = new AtomicLong(UNSET);
26
27
    Deadline(long timeoutNanos) {
28
        this.timeoutNanos = timeoutNanos;
29
    }
30
31
    long remainingNanos() {
32
        long deadline = deadlineNanos.get();
33 1 1. remainingNanos : negated conditional → KILLED
        if (deadline == UNSET) {
34 1 1. remainingNanos : Replaced long addition with subtraction → KILLED
            long candidate = System.nanoTime() + timeoutNanos;
35 1 1. remainingNanos : negated conditional → SURVIVED
            deadline = deadlineNanos.compareAndSet(UNSET, candidate) ? candidate : deadlineNanos.get();
36
        }
37 2 1. remainingNanos : Replaced long subtraction with addition → KILLED
2. remainingNanos : replaced long return with 0 for com/pivovarit/collectors/Deadline::remainingNanos → KILLED
        return Math.max(0, deadline - System.nanoTime());
38
    }
39
}

Mutations

33

1.1
Location : remainingNanos
Killed by : com.pivovarit.collectors.DeadlineTest.[engine:junit-jupiter]/[class:com.pivovarit.collectors.DeadlineTest]/[method:shouldNotReturnNegativeAfterDeadlinePassed()]
negated conditional → KILLED

34

1.1
Location : remainingNanos
Killed by : com.pivovarit.collectors.DeadlineTest.[engine:junit-jupiter]/[class:com.pivovarit.collectors.DeadlineTest]/[method:shouldNotObserveSpuriousTimeoutWhenCalledConcurrently()]
Replaced long addition with subtraction → KILLED

35

1.1
Location : remainingNanos
Killed by : none
negated conditional → SURVIVED
Covering tests

37

1.1
Location : remainingNanos
Killed by : com.pivovarit.collectors.DeadlineTest.[engine:junit-jupiter]/[class:com.pivovarit.collectors.DeadlineTest]/[method:shouldNotReturnNegativeAfterDeadlinePassed()]
Replaced long subtraction with addition → KILLED

2.2
Location : remainingNanos
Killed by : com.pivovarit.collectors.DeadlineTest.[engine:junit-jupiter]/[class:com.pivovarit.collectors.DeadlineTest]/[method:shouldNotObserveSpuriousTimeoutWhenCalledConcurrently()]
replaced long return with 0 for com/pivovarit/collectors/Deadline::remainingNanos → KILLED

Active mutators

Tests examined


Report generated by PIT 1.30.0 support