Skip to content

Commit

Permalink
Match Mpq tests for atomic queues
Browse files Browse the repository at this point in the history
  • Loading branch information
nitsanw committed Mar 9, 2018
1 parent dab43bc commit aeff370
Show file tree
Hide file tree
Showing 15 changed files with 454 additions and 2 deletions.
15 changes: 13 additions & 2 deletions jctools-core/src/test/java/org/jctools/queues/MpqSanityTest.java
@@ -1,5 +1,6 @@
package org.jctools.queues;

import org.jctools.queues.atomic.AtomicQueueFactory;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.jctools.queues.spec.Preference;
Expand All @@ -19,7 +20,7 @@
public abstract class MpqSanityTest
{

static final int SIZE = 8192 * 2;
public static final int SIZE = 8192 * 2;
static final int CONCURRENT_TEST_DURATION = 500;
static final int TEST_TIMEOUT = 30000;

Expand All @@ -34,7 +35,7 @@ public MpqSanityTest(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queu
this.spec = spec;
}

static Object[] makeMpq(int producers, int consumers, int capacity, Ordering ordering, Queue<Integer> q)
public static Object[] makeMpq(int producers, int consumers, int capacity, Ordering ordering, Queue<Integer> q)
{
ConcurrentQueueSpec spec = new ConcurrentQueueSpec(producers, consumers, capacity, ordering,
Preference.NONE);
Expand All @@ -45,6 +46,16 @@ static Object[] makeMpq(int producers, int consumers, int capacity, Ordering ord
return new Object[] {spec, q};
}

public static Object[] makeAtomic(int producers, int consumers, int capacity, Ordering ordering, Queue<Integer> q)
{
ConcurrentQueueSpec spec = new ConcurrentQueueSpec(producers, consumers, capacity, ordering,
Preference.NONE);
if (q == null)
{
q = AtomicQueueFactory.newQueue(spec);
}
return new Object[] {spec, q};
}
@After
public void clear() throws InterruptedException
{
Expand Down
@@ -0,0 +1,29 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTestMpmcArray;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestMpmcArray extends MpqSanityTestMpmcArray
{
public AtomicMpqSanityTestMpmcArray(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(0, 0, 2, Ordering.FIFO, null));
list.add(makeAtomic(0, 0, SIZE, Ordering.FIFO, null));
return list;
}
}
@@ -0,0 +1,30 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTest;
import org.jctools.queues.MpqSanityTestMpscArray;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestMpscArray extends MpqSanityTestMpscArray
{
public AtomicMpqSanityTestMpscArray(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(0, 1, 1, Ordering.FIFO, null));// MPSC size 1
list.add(makeAtomic(0, 1, SIZE, Ordering.FIFO, null));// MPSC size SIZE
return list;
}
}
@@ -0,0 +1,32 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTest;
import org.jctools.queues.MpqSanityTestMpscChunked;
import org.jctools.queues.MpscChunkedArrayQueue;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestMpscChunked extends MpqSanityTestMpscChunked
{
public AtomicMpqSanityTestMpscChunked(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(0, 1, 4, Ordering.FIFO, new MpscChunkedArrayQueue<>(2, 4)));// MPSC size 1
list.add(makeAtomic(0, 1, SIZE, Ordering.FIFO, new MpscChunkedArrayQueue<>(8, SIZE)));// MPSC size SIZE
return list;
}
}
@@ -0,0 +1,32 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTest;
import org.jctools.queues.MpqSanityTestMpscCompound;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

import static org.jctools.util.PortableJvmInfo.CPUs;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestMpscCompound extends MpqSanityTestMpscCompound
{
public AtomicMpqSanityTestMpscCompound(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(0, 1, CPUs, Ordering.NONE, null));// MPSC size 1
list.add(makeAtomic(0, 1, SIZE, Ordering.NONE, null));// MPSC size SIZE
return list;
}
}
@@ -0,0 +1,32 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTest;
import org.jctools.queues.MpqSanityTestMpscGrowable;
import org.jctools.queues.MpscGrowableArrayQueue;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestMpscGrowable extends MpqSanityTestMpscGrowable
{
public AtomicMpqSanityTestMpscGrowable(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(0, 1, 4, Ordering.FIFO, new MpscGrowableArrayQueue<>(2, 4)));// MPSC size 1
list.add(makeAtomic(0, 1, SIZE, Ordering.FIFO, new MpscGrowableArrayQueue<>(8, SIZE)));// MPSC size SIZE
return list;
}

}
@@ -0,0 +1,29 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTest;
import org.jctools.queues.MpqSanityTestMpscLinked;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestMpscLinked extends MpqSanityTestMpscLinked
{
public AtomicMpqSanityTestMpscLinked(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(0, 1, 0, Ordering.FIFO, null));// unbounded MPSC
return list;
}
}
@@ -0,0 +1,32 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTest;
import org.jctools.queues.MpqSanityTestMpscUnbounded;
import org.jctools.queues.MpscUnboundedArrayQueue;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestMpscUnbounded extends MpqSanityTestMpscUnbounded
{
public AtomicMpqSanityTestMpscUnbounded(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(0, 1, 0, Ordering.FIFO, new MpscUnboundedArrayQueue<>(2)));
list.add(makeAtomic(0, 1, 0, Ordering.FIFO, new MpscUnboundedArrayQueue<>(64)));
return list;
}

}
@@ -0,0 +1,30 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTest;
import org.jctools.queues.MpqSanityTestSpmcArray;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestSpmcArray extends MpqSanityTestSpmcArray
{
public AtomicMpqSanityTestSpmcArray(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(1, 0, 1, Ordering.FIFO, null));// SPMC size 1
list.add(makeAtomic(1, 0, SIZE, Ordering.FIFO, null));// SPMC size SIZE
return list;
}
}
@@ -0,0 +1,30 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTest;
import org.jctools.queues.MpqSanityTestSpscArray;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestSpscArray extends MpqSanityTestSpscArray
{
public AtomicMpqSanityTestSpscArray(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(1, 1, 4, Ordering.FIFO, null));// SPSC size 4
list.add(makeAtomic(1, 1, SIZE, Ordering.FIFO, null));// SPSC size SIZE
return list;
}
}
@@ -0,0 +1,32 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTest;
import org.jctools.queues.MpqSanityTestSpscChunked;
import org.jctools.queues.SpscChunkedArrayQueue;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestSpscChunked extends MpqSanityTestSpscChunked
{
public AtomicMpqSanityTestSpscChunked(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(1, 1, 16, Ordering.FIFO, new SpscChunkedArrayQueue<>(8, 16)));// MPSC size 1
list.add(makeAtomic(1, 1, SIZE, Ordering.FIFO, new SpscChunkedArrayQueue<>(8, SIZE)));// MPSC size SIZE
return list;
}
}
@@ -0,0 +1,33 @@
package org.jctools.queues.atomic;

import org.jctools.queues.MessagePassingQueue;
import org.jctools.queues.MpqSanityTest;
import org.jctools.queues.MpqSanityTestSpscGrowable;
import org.jctools.queues.SpscGrowableArrayQueue;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.ArrayList;
import java.util.Collection;

@RunWith(Parameterized.class)
public class AtomicMpqSanityTestSpscGrowable extends MpqSanityTestSpscGrowable
{

public AtomicMpqSanityTestSpscGrowable(ConcurrentQueueSpec spec, MessagePassingQueue<Integer> queue)
{
super(spec, queue);
}

@Parameterized.Parameters
public static Collection<Object[]> parameters()
{
ArrayList<Object[]> list = new ArrayList<Object[]>();
list.add(makeAtomic(1, 1, 16, Ordering.FIFO, new SpscGrowableArrayQueue<>(8, 16)));
list.add(makeAtomic(1, 1, SIZE, Ordering.FIFO, new SpscGrowableArrayQueue<>(8, SIZE)));
return list;
}

}

0 comments on commit aeff370

Please sign in to comment.