ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/StampedLockTest.java
(Generate patch)

Comparing jsr166/src/test/tck/StampedLockTest.java (file contents):
Revision 1.15 by jsr166, Tue Jun 7 00:03:27 2016 UTC vs.
Revision 1.19 by jsr166, Tue Jun 7 06:25:29 2016 UTC

# Line 718 | Line 718 | public class StampedLockTest extends JSR
718      public void testTryConvertToOptimisticRead() throws InterruptedException {
719          StampedLock lock = new StampedLock();
720          long s, p;
721 <        s = 0L;
722 <        assertFalse((p = lock.tryConvertToOptimisticRead(s)) != 0L);
721 >        assertEquals(0L, lock.tryConvertToOptimisticRead(0L));
722 >
723          assertTrue((s = lock.tryOptimisticRead()) != 0L);
724 <        assertTrue((p = lock.tryConvertToOptimisticRead(s)) != 0L);
724 >        assertEquals(s, lock.tryConvertToOptimisticRead(s));
725 >        assertTrue(lock.validate(s));
726 >
727          assertTrue((s = lock.writeLock()) != 0L);
728          assertTrue((p = lock.tryConvertToOptimisticRead(s)) != 0L);
729          assertTrue(lock.validate(p));
730 +
731          assertTrue((s = lock.readLock()) != 0L);
732          assertTrue(lock.validate(s));
733          assertTrue((p = lock.tryConvertToOptimisticRead(s)) != 0L);
734          assertTrue(lock.validate(p));
735 +
736          assertTrue((s = lock.tryWriteLock()) != 0L);
737          assertTrue(lock.validate(s));
738          assertTrue((p = lock.tryConvertToOptimisticRead(s)) != 0L);
739          assertTrue(lock.validate(p));
740 +
741          assertTrue((s = lock.tryReadLock()) != 0L);
742          assertTrue(lock.validate(s));
743          assertTrue((p = lock.tryConvertToOptimisticRead(s)) != 0L);
744          assertTrue(lock.validate(p));
745 +
746          assertTrue((s = lock.tryWriteLock(100L, MILLISECONDS)) != 0L);
747          assertTrue((p = lock.tryConvertToOptimisticRead(s)) != 0L);
748          assertTrue(lock.validate(p));
749 +
750          assertTrue((s = lock.tryReadLock(100L, MILLISECONDS)) != 0L);
751          assertTrue(lock.validate(s));
752          assertTrue((p = lock.tryConvertToOptimisticRead(s)) != 0L);
# Line 888 | Line 895 | public class StampedLockTest extends JSR
895                       () -> sl.asReadWriteLock().readLock().newCondition());
896      }
897  
898 +    /**
899 +     * Passing optimistic read stamps to unlock operations result in
900 +     * IllegalMonitorStateException
901 +     */
902 +    public void testCannotUnlockOptimisticReadStamps() {
903 +        Runnable[] actions = {
904 +            () -> {
905 +                StampedLock sl = new StampedLock();
906 +                long stamp = sl.tryOptimisticRead();
907 +                assertTrue(stamp != 0);
908 +                sl.unlockRead(stamp);
909 +            },
910 +            () -> {
911 +                StampedLock sl = new StampedLock();
912 +                long stamp = sl.tryOptimisticRead();
913 +                sl.unlock(stamp);
914 +            },
915 +
916 +            () -> {
917 +                StampedLock sl = new StampedLock();
918 +                long stamp = sl.tryOptimisticRead();
919 +                sl.writeLock();
920 +                sl.unlock(stamp);
921 +            },
922 +            () -> {
923 +                StampedLock sl = new StampedLock();
924 +                long stamp = sl.tryOptimisticRead();
925 +                sl.readLock();
926 +                sl.unlockRead(stamp);
927 +            },
928 +            () -> {
929 +                StampedLock sl = new StampedLock();
930 +                long stamp = sl.tryOptimisticRead();
931 +                sl.readLock();
932 +                sl.unlock(stamp);
933 +            },
934 +
935 +            () -> {
936 +                StampedLock sl = new StampedLock();
937 +                long stamp = sl.tryConvertToOptimisticRead(sl.writeLock());
938 +                assertTrue(stamp != 0);
939 +                sl.writeLock();
940 +                sl.unlockWrite(stamp);
941 +            },
942 +            () -> {
943 +                StampedLock sl = new StampedLock();
944 +                long stamp = sl.tryConvertToOptimisticRead(sl.writeLock());
945 +                sl.writeLock();
946 +                sl.unlock(stamp);
947 +            },
948 +            () -> {
949 +                StampedLock sl = new StampedLock();
950 +                long stamp = sl.tryConvertToOptimisticRead(sl.writeLock());
951 +                sl.readLock();
952 +                sl.unlockRead(stamp);
953 +            },
954 +            () -> {
955 +                StampedLock sl = new StampedLock();
956 +                long stamp = sl.tryConvertToOptimisticRead(sl.writeLock());
957 +                sl.readLock();
958 +                sl.unlock(stamp);
959 +            },
960 +
961 +            () -> {
962 +                StampedLock sl = new StampedLock();
963 +                long stamp = sl.tryConvertToOptimisticRead(sl.readLock());
964 +                assertTrue(stamp != 0);
965 +                sl.writeLock();
966 +                sl.unlockWrite(stamp);
967 +            },
968 +            () -> {
969 +                StampedLock sl = new StampedLock();
970 +                long stamp = sl.tryConvertToOptimisticRead(sl.readLock());
971 +                sl.writeLock();
972 +                sl.unlock(stamp);
973 +            },
974 +            () -> {
975 +                StampedLock sl = new StampedLock();
976 +                long stamp = sl.tryConvertToOptimisticRead(sl.readLock());
977 +                sl.readLock();
978 +                sl.unlockRead(stamp);
979 +            },
980 +            () -> {
981 +                StampedLock sl = new StampedLock();
982 +                sl.readLock();
983 +                long stamp = sl.tryConvertToOptimisticRead(sl.readLock());
984 +                assertTrue(stamp != 0);
985 +                sl.readLock();
986 +                sl.unlockRead(stamp);
987 +            },
988 +            () -> {
989 +                StampedLock sl = new StampedLock();
990 +                long stamp = sl.tryConvertToOptimisticRead(sl.readLock());
991 +                sl.readLock();
992 +                sl.unlock(stamp);
993 +            },
994 +            () -> {
995 +                StampedLock sl = new StampedLock();
996 +                sl.readLock();
997 +                long stamp = sl.tryConvertToOptimisticRead(sl.readLock());
998 +                sl.readLock();
999 +                sl.unlock(stamp);
1000 +            },
1001 +        };
1002 +
1003 +        assertThrows(IllegalMonitorStateException.class, actions);
1004 +    }
1005 +
1006   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines