|
19 | 19 | import net.openhft.affinity.Affinity; |
20 | 20 | import net.openhft.affinity.CpuLayout; |
21 | 21 | import net.openhft.affinity.IAffinity; |
| 22 | +import net.openhft.affinity.IDefaultLayoutAffinity; |
22 | 23 | import org.junit.Assume; |
23 | 24 | import org.junit.BeforeClass; |
24 | 25 | import org.junit.Test; |
25 | 26 |
|
26 | 27 | import java.util.BitSet; |
| 28 | +import java.util.Random; |
27 | 29 |
|
28 | 30 | import static org.junit.Assert.assertEquals; |
29 | 31 | import static org.junit.Assert.assertNotNull; |
30 | 32 |
|
31 | | -/** |
32 | | - * @author peter.lawrey |
33 | | - */ |
34 | 33 | public class HwLocJNAAffinityTest extends AbstractAffinityImplTest { |
35 | 34 | @BeforeClass |
36 | 35 | public static void checkJniLibraryPresent() { |
@@ -67,5 +66,34 @@ public void getAffinityReturnsValuePreviouslySet() { |
67 | 66 | } |
68 | 67 | } |
69 | 68 |
|
| 69 | + @Test |
| 70 | + public void getAffinityReturnsValuePreviouslySetRandom() { |
| 71 | + final IAffinity impl = getImpl(); |
| 72 | + final BitSet cmask = impl.getAffinity(); |
| 73 | + if (impl instanceof IDefaultLayoutAffinity) { |
| 74 | + IDefaultLayoutAffinity idla = (IDefaultLayoutAffinity) impl; |
| 75 | + CpuLayout layout = idla.getDefaultLayout(); |
| 76 | + int nCPUs = layout.cpus(); |
| 77 | + Random rnd = new Random(); |
| 78 | + System.out.println("current mask: " + cmask); |
| 79 | + for (int i = 0; i < 1000; i++) { |
| 80 | + final BitSet mask = new BitSet(); |
| 81 | + for (int index = 0; index < nCPUs; index++) { |
| 82 | + if (rnd.nextBoolean()) { |
| 83 | + mask.set(index); |
| 84 | + } |
| 85 | + } |
| 86 | + if (mask.isEmpty()) { // avoid EINVAL |
| 87 | + continue; |
| 88 | + } |
| 89 | +// System.out.print("mask → " + mask); |
| 90 | + impl.setAffinity(mask); |
| 91 | + final BitSet ret_mask = impl.getAffinity(); |
| 92 | +// System.out.println(" … " + ret_mask); |
| 93 | + assertEquals(mask, ret_mask); |
| 94 | + } |
| 95 | + } |
| 96 | + } |
| 97 | + |
70 | 98 |
|
71 | 99 | } |
0 commit comments