summaryrefslogtreecommitdiff
path: root/src/test/java/au/id/zancanaro/javacheck/state/queue/commands/Offer.java
blob: 366e9740e0564afba873a9cab5daadb5b1b932a8 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package au.id.zancanaro.javacheck.state.queue.commands;

import au.id.zancanaro.javacheck.Generator;
import au.id.zancanaro.javacheck.state.Command;
import au.id.zancanaro.javacheck.state.CommandValue;
import au.id.zancanaro.javacheck.state.queue.QueueState;

import java.util.ArrayList;
import java.util.List;

public class Offer<T> extends Command<QueueState<T>, T, Void> {
    public final Generator<T> generator;

    public Offer(Generator<T> argGen) {
        this.generator = argGen;
    }

    @Override
    public Generator<T> argsGenerator(QueueState<T> state) {
        return generator;
    }

    @Override
    public boolean preCondition(QueueState<T> state, T args) {
        return state != null;
    }

    @Override
    public Void runCommand(QueueState<T> state, T args) {
        state.getConcreteQueue().offer(args);
        return null;
    }

    @Override
    public QueueState<T> nextState(QueueState<T> state, T args, CommandValue<Void> result) {
        List<T> newState = new ArrayList<>(state.getAbstractQueue());
        newState.add(args);
        return state.withAbstractQueue(newState);
    }
}