--- jsr166/src/test/tck/AtomicReferenceArray9Test.java 2016/06/17 19:00:48 1.1 +++ jsr166/src/test/tck/AtomicReferenceArray9Test.java 2021/01/26 13:33:05 1.5 @@ -4,7 +4,6 @@ * http://creativecommons.org/publicdomain/zero/1.0/ */ -import java.util.Arrays; import java.util.concurrent.atomic.AtomicReferenceArray; import junit.framework.Test; @@ -25,7 +24,8 @@ public class AtomicReferenceArray9Test e AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int index : new int[] { -1, SIZE }) { final int j = index; - final Runnable[] tasks = { + assertThrows( + IndexOutOfBoundsException.class, () -> aa.getPlain(j), () -> aa.getOpaque(j), () -> aa.getAcquire(j), @@ -35,12 +35,10 @@ public class AtomicReferenceArray9Test e () -> aa.compareAndExchange(j, null, null), () -> aa.compareAndExchangeAcquire(j, null, null), () -> aa.compareAndExchangeRelease(j, null, null), + () -> aa.weakCompareAndSetPlain(j, null, null), () -> aa.weakCompareAndSetVolatile(j, null, null), () -> aa.weakCompareAndSetAcquire(j, null, null), - () -> aa.weakCompareAndSetRelease(j, null, null), - }; - - assertThrows(IndexOutOfBoundsException.class, tasks); + () -> aa.weakCompareAndSetRelease(j, null, null)); } } @@ -48,14 +46,14 @@ public class AtomicReferenceArray9Test e * getPlain returns the last value set */ public void testGetPlainSet() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.set(i, one); assertEquals(one, aa.getPlain(i)); aa.set(i, two); assertEquals(two, aa.getPlain(i)); - aa.set(i, m3); - assertEquals(m3, aa.getPlain(i)); + aa.set(i, minusThree); + assertEquals(minusThree, aa.getPlain(i)); } } @@ -63,14 +61,14 @@ public class AtomicReferenceArray9Test e * getOpaque returns the last value set */ public void testGetOpaqueSet() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.set(i, one); assertEquals(one, aa.getOpaque(i)); aa.set(i, two); assertEquals(two, aa.getOpaque(i)); - aa.set(i, m3); - assertEquals(m3, aa.getOpaque(i)); + aa.set(i, minusThree); + assertEquals(minusThree, aa.getOpaque(i)); } } @@ -78,14 +76,14 @@ public class AtomicReferenceArray9Test e * getAcquire returns the last value set */ public void testGetAcquireSet() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.set(i, one); assertEquals(one, aa.getAcquire(i)); aa.set(i, two); assertEquals(two, aa.getAcquire(i)); - aa.set(i, m3); - assertEquals(m3, aa.getAcquire(i)); + aa.set(i, minusThree); + assertEquals(minusThree, aa.getAcquire(i)); } } @@ -93,14 +91,14 @@ public class AtomicReferenceArray9Test e * get returns the last value setPlain */ public void testGetSetPlain() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.setPlain(i, one); assertEquals(one, aa.get(i)); aa.setPlain(i, two); assertEquals(two, aa.get(i)); - aa.setPlain(i, m3); - assertEquals(m3, aa.get(i)); + aa.setPlain(i, minusThree); + assertEquals(minusThree, aa.get(i)); } } @@ -108,14 +106,14 @@ public class AtomicReferenceArray9Test e * get returns the last value setOpaque */ public void testGetSetOpaque() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.setOpaque(i, one); assertEquals(one, aa.get(i)); aa.setOpaque(i, two); assertEquals(two, aa.get(i)); - aa.setOpaque(i, m3); - assertEquals(m3, aa.get(i)); + aa.setOpaque(i, minusThree); + assertEquals(minusThree, aa.get(i)); } } @@ -123,14 +121,14 @@ public class AtomicReferenceArray9Test e * get returns the last value setRelease */ public void testGetSetRelease() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.setRelease(i, one); assertEquals(one, aa.get(i)); aa.setRelease(i, two); assertEquals(two, aa.get(i)); - aa.setRelease(i, m3); - assertEquals(m3, aa.get(i)); + aa.setRelease(i, minusThree); + assertEquals(minusThree, aa.get(i)); } } @@ -139,15 +137,15 @@ public class AtomicReferenceArray9Test e * expected else fails */ public void testCompareAndExchange() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.set(i, one); assertEquals(one, aa.compareAndExchange(i, one, two)); - assertEquals(two, aa.compareAndExchange(i, two, m4)); - assertEquals(m4, aa.get(i)); - assertEquals(m4, aa.compareAndExchange(i,m5, seven)); - assertEquals(m4, aa.get(i)); - assertEquals(m4, aa.compareAndExchange(i, m4, seven)); + assertEquals(two, aa.compareAndExchange(i, two, minusFour)); + assertEquals(minusFour, aa.get(i)); + assertEquals(minusFour, aa.compareAndExchange(i,minusFive, seven)); + assertEquals(minusFour, aa.get(i)); + assertEquals(minusFour, aa.compareAndExchange(i, minusFour, seven)); assertEquals(seven, aa.get(i)); } } @@ -157,15 +155,15 @@ public class AtomicReferenceArray9Test e * expected else fails */ public void testCompareAndExchangeAcquire() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.set(i, one); assertEquals(one, aa.compareAndExchangeAcquire(i, one, two)); - assertEquals(two, aa.compareAndExchangeAcquire(i, two, m4)); - assertEquals(m4, aa.get(i)); - assertEquals(m4, aa.compareAndExchangeAcquire(i,m5, seven)); - assertEquals(m4, aa.get(i)); - assertEquals(m4, aa.compareAndExchangeAcquire(i, m4, seven)); + assertEquals(two, aa.compareAndExchangeAcquire(i, two, minusFour)); + assertEquals(minusFour, aa.get(i)); + assertEquals(minusFour, aa.compareAndExchangeAcquire(i,minusFive, seven)); + assertEquals(minusFour, aa.get(i)); + assertEquals(minusFour, aa.compareAndExchangeAcquire(i, minusFour, seven)); assertEquals(seven, aa.get(i)); } } @@ -175,15 +173,31 @@ public class AtomicReferenceArray9Test e * expected else fails */ public void testCompareAndExchangeRelease() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.set(i, one); assertEquals(one, aa.compareAndExchangeRelease(i, one, two)); - assertEquals(two, aa.compareAndExchangeRelease(i, two, m4)); - assertEquals(m4, aa.get(i)); - assertEquals(m4, aa.compareAndExchangeRelease(i,m5, seven)); - assertEquals(m4, aa.get(i)); - assertEquals(m4, aa.compareAndExchangeRelease(i, m4, seven)); + assertEquals(two, aa.compareAndExchangeRelease(i, two, minusFour)); + assertEquals(minusFour, aa.get(i)); + assertEquals(minusFour, aa.compareAndExchangeRelease(i,minusFive, seven)); + assertEquals(minusFour, aa.get(i)); + assertEquals(minusFour, aa.compareAndExchangeRelease(i, minusFour, seven)); + assertEquals(seven, aa.get(i)); + } + } + + /** + * repeated weakCompareAndSetPlain succeeds in changing value when equal + * to expected + */ + public void testWeakCompareAndSetPlain() { + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + for (int i = 0; i < SIZE; i++) { + aa.set(i, one); + do {} while (!aa.weakCompareAndSetPlain(i, one, two)); + do {} while (!aa.weakCompareAndSetPlain(i, two, minusFour)); + assertEquals(minusFour, aa.get(i)); + do {} while (!aa.weakCompareAndSetPlain(i, minusFour, seven)); assertEquals(seven, aa.get(i)); } } @@ -193,13 +207,13 @@ public class AtomicReferenceArray9Test e * to expected */ public void testWeakCompareAndSetVolatile() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.set(i, one); do {} while (!aa.weakCompareAndSetVolatile(i, one, two)); - do {} while (!aa.weakCompareAndSetVolatile(i, two, m4)); - assertEquals(m4, aa.get(i)); - do {} while (!aa.weakCompareAndSetVolatile(i, m4, seven)); + do {} while (!aa.weakCompareAndSetVolatile(i, two, minusFour)); + assertEquals(minusFour, aa.get(i)); + do {} while (!aa.weakCompareAndSetVolatile(i, minusFour, seven)); assertEquals(seven, aa.get(i)); } } @@ -209,13 +223,13 @@ public class AtomicReferenceArray9Test e * to expected */ public void testWeakCompareAndSetAcquire() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.set(i, one); do {} while (!aa.weakCompareAndSetAcquire(i, one, two)); - do {} while (!aa.weakCompareAndSetAcquire(i, two, m4)); - assertEquals(m4, aa.get(i)); - do {} while (!aa.weakCompareAndSetAcquire(i, m4, seven)); + do {} while (!aa.weakCompareAndSetAcquire(i, two, minusFour)); + assertEquals(minusFour, aa.get(i)); + do {} while (!aa.weakCompareAndSetAcquire(i, minusFour, seven)); assertEquals(seven, aa.get(i)); } } @@ -225,13 +239,13 @@ public class AtomicReferenceArray9Test e * to expected */ public void testWeakCompareAndSetRelease() { - AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); + AtomicReferenceArray aa = new AtomicReferenceArray<>(SIZE); for (int i = 0; i < SIZE; i++) { aa.set(i, one); do {} while (!aa.weakCompareAndSetRelease(i, one, two)); - do {} while (!aa.weakCompareAndSetRelease(i, two, m4)); - assertEquals(m4, aa.get(i)); - do {} while (!aa.weakCompareAndSetRelease(i, m4, seven)); + do {} while (!aa.weakCompareAndSetRelease(i, two, minusFour)); + assertEquals(minusFour, aa.get(i)); + do {} while (!aa.weakCompareAndSetRelease(i, minusFour, seven)); assertEquals(seven, aa.get(i)); } }