|
23 | 23 | import fj.P6; |
24 | 24 | import fj.P7; |
25 | 25 | import fj.P8; |
| 26 | +import fj.Unit; |
| 27 | +import fj.control.parallel.ParModule; |
| 28 | +import fj.control.parallel.Strategy; |
26 | 29 | import fj.data.*; |
27 | 30 | import fj.LcgRng; |
28 | 31 | import fj.Ord; |
|
65 | 68 | import java.util.concurrent.CopyOnWriteArraySet; |
66 | 69 | import java.util.concurrent.DelayQueue; |
67 | 70 | import java.util.concurrent.Delayed; |
| 71 | +import java.util.concurrent.ExecutorService; |
| 72 | +import java.util.concurrent.Executors; |
68 | 73 | import java.util.concurrent.LinkedBlockingQueue; |
69 | 74 | import java.util.concurrent.PriorityBlockingQueue; |
70 | 75 | import java.util.concurrent.SynchronousQueue; |
| 76 | +import java.util.concurrent.ThreadFactory; |
71 | 77 |
|
72 | 78 | /** |
73 | 79 | * Common Gen helper functions. |
@@ -98,6 +104,24 @@ public static <S, A> Gen<State<S, A>> arbState(Gen<S> as, Cogen<S> cs, Gen<A> aa |
98 | 104 | return arbF(cs, arbP2(as, aa)).map(State::unit); |
99 | 105 | } |
100 | 106 |
|
| 107 | + public static Gen<ParModule> arbParModule() { |
| 108 | + return Arbitrary.<Unit>arbStrategy().map(s -> ParModule.parModule(s)); |
| 109 | + } |
| 110 | + |
| 111 | + public static <A> Gen<Strategy<A>> arbStrategy() { |
| 112 | + Strategy<A> s = Strategy.<A>executorStrategy(fixedThreadsExecutorService(2)); |
| 113 | + return Gen.elements(s); |
| 114 | + } |
| 115 | + |
| 116 | + private static ExecutorService fixedThreadsExecutorService(int n) { |
| 117 | + return Executors.newFixedThreadPool(n, r -> { |
| 118 | + ThreadFactory tf = Executors.defaultThreadFactory(); |
| 119 | + Thread t = tf.newThread(r); |
| 120 | + t.setDaemon(true); |
| 121 | + return t; |
| 122 | + }); |
| 123 | + } |
| 124 | + |
101 | 125 | /** |
102 | 126 | * An arbitrary for the LcgRng. |
103 | 127 | */ |
|
0 commit comments