package org.jctools.queues;
import org.openjdk.jcstress.annotations.Actor;
import org.openjdk.jcstress.annotations.Arbiter;
import org.openjdk.jcstress.annotations.JCStressTest;
import org.openjdk.jcstress.annotations.Outcome;
import org.openjdk.jcstress.annotations.State;
import org.openjdk.jcstress.infra.results.BooleanResult2;
import static org.openjdk.jcstress.annotations.Expect.ACCEPTABLE;
import static org.openjdk.jcstress.annotations.Expect.ACCEPTABLE_INTERESTING;
import static org.openjdk.jcstress.annotations.Expect.FORBIDDEN;
@JCStressTest
@Outcome(id = "true, true", expect = ACCEPTABLE, desc = "All ok.")
@Outcome(id = "true, false", expect = ACCEPTABLE_INTERESTING, desc = "Size is broken.")
@Outcome(id = "false, true", expect = ACCEPTABLE_INTERESTING, desc = "Offer broken.")
@Outcome(id = "false, false", expect = FORBIDDEN, desc = "Nothing ran.")
@State
public class SpscArrayQueueProducerTest {
private final SpscArrayQueue<Integer> queue = new SpscArrayQueue<>(3);
@Actor
public void actor1(BooleanResult2 br2) {
br2.r1 = queue.offer(1);
}
@Arbiter
public void arbiter1(BooleanResult2 br2) {
br2.r2 = !queue.isEmpty();
}
}