89 }
90
91 @Test(dataProvider = "varHandlesProvider")
92 public void testIsAccessModeSupported(VarHandle vh) {
93 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET));
94 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET));
95 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_VOLATILE));
96 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_VOLATILE));
97 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_ACQUIRE));
98 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_RELEASE));
99 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_OPAQUE));
100 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_OPAQUE));
101
102 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET));
103 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE));
104 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE));
105 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE));
106 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET));
107 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE));
108 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE));
109 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE));
110 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET));
111
112 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
113 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
114 }
115
116
117 @DataProvider
118 public Object[][] typesProvider() throws Exception {
119 List<Object[]> types = new ArrayList<>();
120 types.add(new Object[] {vhField, Arrays.asList(VarHandleTestAccessString.class)});
121 types.add(new Object[] {vhStaticField, Arrays.asList()});
122 types.add(new Object[] {vhArray, Arrays.asList(String[].class, int.class)});
123
124 return types.stream().toArray(Object[][]::new);
125 }
126
127 @Test(dataProvider = "typesProvider")
128 public void testTypes(VarHandle vh, List<Class<?>> pts) {
129 assertEquals(vh.varType(), String.class);
399 assertEquals(r, "bar", "failing compareAndExchangeAcquire String");
400 String x = (String) vh.get(recv);
401 assertEquals(x, "bar", "failing compareAndExchangeAcquire String value");
402 }
403
404 {
405 String r = (String) vh.compareAndExchangeRelease(recv, "bar", "foo");
406 assertEquals(r, "bar", "success compareAndExchangeRelease String");
407 String x = (String) vh.get(recv);
408 assertEquals(x, "foo", "success compareAndExchangeRelease String value");
409 }
410
411 {
412 String r = (String) vh.compareAndExchangeRelease(recv, "bar", "baz");
413 assertEquals(r, "foo", "failing compareAndExchangeRelease String");
414 String x = (String) vh.get(recv);
415 assertEquals(x, "foo", "failing compareAndExchangeRelease String value");
416 }
417
418 {
419 boolean r = vh.weakCompareAndSet(recv, "foo", "bar");
420 assertEquals(r, true, "weakCompareAndSet String");
421 String x = (String) vh.get(recv);
422 assertEquals(x, "bar", "weakCompareAndSet String value");
423 }
424
425 {
426 boolean r = vh.weakCompareAndSetAcquire(recv, "bar", "foo");
427 assertEquals(r, true, "weakCompareAndSetAcquire String");
428 String x = (String) vh.get(recv);
429 assertEquals(x, "foo", "weakCompareAndSetAcquire String");
430 }
431
432 {
433 boolean r = vh.weakCompareAndSetRelease(recv, "foo", "bar");
434 assertEquals(r, true, "weakCompareAndSetRelease String");
435 String x = (String) vh.get(recv);
436 assertEquals(x, "bar", "weakCompareAndSetRelease String");
437 }
438
439 // Compare set and get
440 {
441 String o = (String) vh.getAndSet(recv, "foo");
442 assertEquals(o, "bar", "getAndSet String");
443 String x = (String) vh.get(recv);
444 assertEquals(x, "foo", "getAndSet String value");
445 }
446
447 }
448
449 static void testInstanceFieldUnsupported(VarHandleTestAccessString recv, VarHandle vh) {
450
451 checkUOE(() -> {
452 String o = (String) vh.getAndAdd(recv, "foo");
453 });
454
531 assertEquals(r, "bar", "failing compareAndExchangeAcquire String");
532 String x = (String) vh.get();
533 assertEquals(x, "bar", "failing compareAndExchangeAcquire String value");
534 }
535
536 {
537 String r = (String) vh.compareAndExchangeRelease("bar", "foo");
538 assertEquals(r, "bar", "success compareAndExchangeRelease String");
539 String x = (String) vh.get();
540 assertEquals(x, "foo", "success compareAndExchangeRelease String value");
541 }
542
543 {
544 String r = (String) vh.compareAndExchangeRelease("bar", "baz");
545 assertEquals(r, "foo", "failing compareAndExchangeRelease String");
546 String x = (String) vh.get();
547 assertEquals(x, "foo", "failing compareAndExchangeRelease String value");
548 }
549
550 {
551 boolean r = (boolean) vh.weakCompareAndSet("foo", "bar");
552 assertEquals(r, true, "weakCompareAndSet String");
553 String x = (String) vh.get();
554 assertEquals(x, "bar", "weakCompareAndSet String value");
555 }
556
557 {
558 boolean r = (boolean) vh.weakCompareAndSetAcquire("bar", "foo");
559 assertEquals(r, true, "weakCompareAndSetAcquire String");
560 String x = (String) vh.get();
561 assertEquals(x, "foo", "weakCompareAndSetAcquire String");
562 }
563
564 {
565 boolean r = (boolean) vh.weakCompareAndSetRelease( "foo", "bar");
566 assertEquals(r, true, "weakCompareAndSetRelease String");
567 String x = (String) vh.get();
568 assertEquals(x, "bar", "weakCompareAndSetRelease String");
569 }
570
571 // Compare set and get
572 {
573 String o = (String) vh.getAndSet( "foo");
574 assertEquals(o, "bar", "getAndSet String");
575 String x = (String) vh.get();
576 assertEquals(x, "foo", "getAndSet String value");
577 }
578
579 }
580
581 static void testStaticFieldUnsupported(VarHandle vh) {
582
583 checkUOE(() -> {
584 String o = (String) vh.getAndAdd("foo");
585 });
586
666 assertEquals(r, "bar", "failing compareAndExchangeAcquire String");
667 String x = (String) vh.get(array, i);
668 assertEquals(x, "bar", "failing compareAndExchangeAcquire String value");
669 }
670
671 {
672 String r = (String) vh.compareAndExchangeRelease(array, i, "bar", "foo");
673 assertEquals(r, "bar", "success compareAndExchangeRelease String");
674 String x = (String) vh.get(array, i);
675 assertEquals(x, "foo", "success compareAndExchangeRelease String value");
676 }
677
678 {
679 String r = (String) vh.compareAndExchangeRelease(array, i, "bar", "baz");
680 assertEquals(r, "foo", "failing compareAndExchangeRelease String");
681 String x = (String) vh.get(array, i);
682 assertEquals(x, "foo", "failing compareAndExchangeRelease String value");
683 }
684
685 {
686 boolean r = vh.weakCompareAndSet(array, i, "foo", "bar");
687 assertEquals(r, true, "weakCompareAndSet String");
688 String x = (String) vh.get(array, i);
689 assertEquals(x, "bar", "weakCompareAndSet String value");
690 }
691
692 {
693 boolean r = vh.weakCompareAndSetAcquire(array, i, "bar", "foo");
694 assertEquals(r, true, "weakCompareAndSetAcquire String");
695 String x = (String) vh.get(array, i);
696 assertEquals(x, "foo", "weakCompareAndSetAcquire String");
697 }
698
699 {
700 boolean r = vh.weakCompareAndSetRelease(array, i, "foo", "bar");
701 assertEquals(r, true, "weakCompareAndSetRelease String");
702 String x = (String) vh.get(array, i);
703 assertEquals(x, "bar", "weakCompareAndSetRelease String");
704 }
705
706 // Compare set and get
707 {
708 String o = (String) vh.getAndSet(array, i, "foo");
709 assertEquals(o, "bar", "getAndSet String");
710 String x = (String) vh.get(array, i);
711 assertEquals(x, "foo", "getAndSet String value");
712 }
713
714 }
715 }
716
717 static void testArrayUnsupported(VarHandle vh) {
718 String[] array = new String[10];
719
720 int i = 0;
721
|
89 }
90
91 @Test(dataProvider = "varHandlesProvider")
92 public void testIsAccessModeSupported(VarHandle vh) {
93 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET));
94 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET));
95 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_VOLATILE));
96 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_VOLATILE));
97 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_ACQUIRE));
98 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_RELEASE));
99 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_OPAQUE));
100 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_OPAQUE));
101
102 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET));
103 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE));
104 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE));
105 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE));
106 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET));
107 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE));
108 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE));
109 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET));
110
111 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
112 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
113 }
114
115
116 @DataProvider
117 public Object[][] typesProvider() throws Exception {
118 List<Object[]> types = new ArrayList<>();
119 types.add(new Object[] {vhField, Arrays.asList(VarHandleTestAccessString.class)});
120 types.add(new Object[] {vhStaticField, Arrays.asList()});
121 types.add(new Object[] {vhArray, Arrays.asList(String[].class, int.class)});
122
123 return types.stream().toArray(Object[][]::new);
124 }
125
126 @Test(dataProvider = "typesProvider")
127 public void testTypes(VarHandle vh, List<Class<?>> pts) {
128 assertEquals(vh.varType(), String.class);
398 assertEquals(r, "bar", "failing compareAndExchangeAcquire String");
399 String x = (String) vh.get(recv);
400 assertEquals(x, "bar", "failing compareAndExchangeAcquire String value");
401 }
402
403 {
404 String r = (String) vh.compareAndExchangeRelease(recv, "bar", "foo");
405 assertEquals(r, "bar", "success compareAndExchangeRelease String");
406 String x = (String) vh.get(recv);
407 assertEquals(x, "foo", "success compareAndExchangeRelease String value");
408 }
409
410 {
411 String r = (String) vh.compareAndExchangeRelease(recv, "bar", "baz");
412 assertEquals(r, "foo", "failing compareAndExchangeRelease String");
413 String x = (String) vh.get(recv);
414 assertEquals(x, "foo", "failing compareAndExchangeRelease String value");
415 }
416
417 {
418 boolean success = false;
419 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
420 success = vh.weakCompareAndSet(recv, "foo", "bar");
421 }
422 assertEquals(success, true, "weakCompareAndSet String");
423 String x = (String) vh.get(recv);
424 assertEquals(x, "bar", "weakCompareAndSet String value");
425 }
426
427 {
428 boolean success = false;
429 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
430 success = vh.weakCompareAndSetAcquire(recv, "bar", "foo");
431 }
432 assertEquals(success, true, "weakCompareAndSetAcquire String");
433 String x = (String) vh.get(recv);
434 assertEquals(x, "foo", "weakCompareAndSetAcquire String");
435 }
436
437 {
438 boolean success = false;
439 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
440 success = vh.weakCompareAndSetRelease(recv, "foo", "bar");
441 }
442 assertEquals(success, true, "weakCompareAndSetRelease String");
443 String x = (String) vh.get(recv);
444 assertEquals(x, "bar", "weakCompareAndSetRelease String");
445 }
446
447 // Compare set and get
448 {
449 String o = (String) vh.getAndSet(recv, "foo");
450 assertEquals(o, "bar", "getAndSet String");
451 String x = (String) vh.get(recv);
452 assertEquals(x, "foo", "getAndSet String value");
453 }
454
455 }
456
457 static void testInstanceFieldUnsupported(VarHandleTestAccessString recv, VarHandle vh) {
458
459 checkUOE(() -> {
460 String o = (String) vh.getAndAdd(recv, "foo");
461 });
462
539 assertEquals(r, "bar", "failing compareAndExchangeAcquire String");
540 String x = (String) vh.get();
541 assertEquals(x, "bar", "failing compareAndExchangeAcquire String value");
542 }
543
544 {
545 String r = (String) vh.compareAndExchangeRelease("bar", "foo");
546 assertEquals(r, "bar", "success compareAndExchangeRelease String");
547 String x = (String) vh.get();
548 assertEquals(x, "foo", "success compareAndExchangeRelease String value");
549 }
550
551 {
552 String r = (String) vh.compareAndExchangeRelease("bar", "baz");
553 assertEquals(r, "foo", "failing compareAndExchangeRelease String");
554 String x = (String) vh.get();
555 assertEquals(x, "foo", "failing compareAndExchangeRelease String value");
556 }
557
558 {
559 boolean success = false;
560 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
561 success = vh.weakCompareAndSet("foo", "bar");
562 }
563 assertEquals(success, true, "weakCompareAndSet String");
564 String x = (String) vh.get();
565 assertEquals(x, "bar", "weakCompareAndSet String value");
566 }
567
568 {
569 boolean success = false;
570 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
571 success = vh.weakCompareAndSetAcquire("bar", "foo");
572 }
573 assertEquals(success, true, "weakCompareAndSetAcquire String");
574 String x = (String) vh.get();
575 assertEquals(x, "foo", "weakCompareAndSetAcquire String");
576 }
577
578 {
579 boolean success = false;
580 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
581 success = vh.weakCompareAndSetRelease("foo", "bar");
582 }
583 assertEquals(success, true, "weakCompareAndSetRelease String");
584 String x = (String) vh.get();
585 assertEquals(x, "bar", "weakCompareAndSetRelease String");
586 }
587
588 // Compare set and get
589 {
590 String o = (String) vh.getAndSet( "foo");
591 assertEquals(o, "bar", "getAndSet String");
592 String x = (String) vh.get();
593 assertEquals(x, "foo", "getAndSet String value");
594 }
595
596 }
597
598 static void testStaticFieldUnsupported(VarHandle vh) {
599
600 checkUOE(() -> {
601 String o = (String) vh.getAndAdd("foo");
602 });
603
683 assertEquals(r, "bar", "failing compareAndExchangeAcquire String");
684 String x = (String) vh.get(array, i);
685 assertEquals(x, "bar", "failing compareAndExchangeAcquire String value");
686 }
687
688 {
689 String r = (String) vh.compareAndExchangeRelease(array, i, "bar", "foo");
690 assertEquals(r, "bar", "success compareAndExchangeRelease String");
691 String x = (String) vh.get(array, i);
692 assertEquals(x, "foo", "success compareAndExchangeRelease String value");
693 }
694
695 {
696 String r = (String) vh.compareAndExchangeRelease(array, i, "bar", "baz");
697 assertEquals(r, "foo", "failing compareAndExchangeRelease String");
698 String x = (String) vh.get(array, i);
699 assertEquals(x, "foo", "failing compareAndExchangeRelease String value");
700 }
701
702 {
703 boolean success = false;
704 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
705 success = vh.weakCompareAndSet(array, i, "foo", "bar");
706 }
707 assertEquals(success, true, "weakCompareAndSet String");
708 String x = (String) vh.get(array, i);
709 assertEquals(x, "bar", "weakCompareAndSet String value");
710 }
711
712 {
713 boolean success = false;
714 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
715 success = vh.weakCompareAndSetAcquire(array, i, "bar", "foo");
716 }
717 assertEquals(success, true, "weakCompareAndSetAcquire String");
718 String x = (String) vh.get(array, i);
719 assertEquals(x, "foo", "weakCompareAndSetAcquire String");
720 }
721
722 {
723 boolean success = false;
724 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
725 success = vh.weakCompareAndSetRelease(array, i, "foo", "bar");
726 }
727 assertEquals(success, true, "weakCompareAndSetRelease String");
728 String x = (String) vh.get(array, i);
729 assertEquals(x, "bar", "weakCompareAndSetRelease String");
730 }
731
732 // Compare set and get
733 {
734 String o = (String) vh.getAndSet(array, i, "foo");
735 assertEquals(o, "bar", "getAndSet String");
736 String x = (String) vh.get(array, i);
737 assertEquals(x, "foo", "getAndSet String value");
738 }
739
740 }
741 }
742
743 static void testArrayUnsupported(VarHandle vh) {
744 String[] array = new String[10];
745
746 int i = 0;
747
|