553 if (m instanceof NavigableMap) { |
553 if (m instanceof NavigableMap) { |
554 System.out.println("NavigableMap tests..."); |
554 System.out.println("NavigableMap tests..."); |
555 |
555 |
556 NavigableMap<Integer,Integer> nm = |
556 NavigableMap<Integer,Integer> nm = |
557 (NavigableMap<Integer,Integer>) m; |
557 (NavigableMap<Integer,Integer>) m; |
|
558 testNavigableMapRemovers(nm); |
558 testNavigableMap(nm); |
559 testNavigableMap(nm); |
559 testNavigableMap(nm.headMap(6, false)); |
560 testNavigableMap(nm.headMap(6, false)); |
560 testNavigableMap(nm.headMap(5, true)); |
561 testNavigableMap(nm.headMap(5, true)); |
561 testNavigableMap(nm.tailMap(0, false)); |
562 testNavigableMap(nm.tailMap(0, false)); |
562 testNavigableMap(nm.tailMap(1, true)); |
563 testNavigableMap(nm.tailMap(1, true)); |
740 if (rnd.nextBoolean()) |
741 if (rnd.nextBoolean()) |
741 check(it.hasNext()); |
742 check(it.hasNext()); |
742 equal(it.next(), expected); |
743 equal(it.next(), expected); |
743 } |
744 } |
744 |
745 |
|
746 static void equalMaps(Map m1, Map m2) { |
|
747 equal(m1, m2); |
|
748 equal(m2, m1); |
|
749 equal(m1.size(), m2.size()); |
|
750 equal(m1.isEmpty(), m2.isEmpty()); |
|
751 equal(m1.toString(), m2.toString()); |
|
752 check(Arrays.equals(m1.entrySet().toArray(), m2.entrySet().toArray())); |
|
753 } |
|
754 |
|
755 @SuppressWarnings({"unchecked", "rawtypes"}) |
|
756 static void testNavigableMapRemovers(NavigableMap m) |
|
757 { |
|
758 final Map emptyMap = new HashMap(); |
|
759 |
|
760 final Map singletonMap = new HashMap(); |
|
761 singletonMap.put(1, 2); |
|
762 |
|
763 abstract class NavigableMapView { |
|
764 abstract NavigableMap view(NavigableMap m); |
|
765 } |
|
766 |
|
767 NavigableMapView[] views = { |
|
768 new NavigableMapView() { NavigableMap view(NavigableMap m) { |
|
769 return m; }}, |
|
770 new NavigableMapView() { NavigableMap view(NavigableMap m) { |
|
771 return m.headMap(99, true); }}, |
|
772 new NavigableMapView() { NavigableMap view(NavigableMap m) { |
|
773 return m.tailMap(-99, false); }}, |
|
774 new NavigableMapView() { NavigableMap view(NavigableMap m) { |
|
775 return m.subMap(-99, true, 99, false); }}, |
|
776 }; |
|
777 |
|
778 abstract class Remover { |
|
779 abstract void remove(NavigableMap m, Object k, Object v); |
|
780 } |
|
781 |
|
782 Remover[] removers = { |
|
783 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
784 equal(m.remove(k), v); }}, |
|
785 |
|
786 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
787 equal(m.descendingMap().remove(k), v); }}, |
|
788 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
789 equal(m.descendingMap().headMap(-86, false).remove(k), v); }}, |
|
790 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
791 equal(m.descendingMap().tailMap(86, true).remove(k), v); }}, |
|
792 |
|
793 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
794 equal(m.headMap(86, true).remove(k), v); }}, |
|
795 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
796 equal(m.tailMap(-86, true).remove(k), v); }}, |
|
797 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
798 equal(m.subMap(-86, false, 86, true).remove(k), v); }}, |
|
799 |
|
800 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
801 check(m.keySet().remove(k)); }}, |
|
802 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
803 check(m.navigableKeySet().remove(k)); }}, |
|
804 |
|
805 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
806 check(m.navigableKeySet().headSet(86, true).remove(k)); }}, |
|
807 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
808 check(m.navigableKeySet().tailSet(-86, false).remove(k)); }}, |
|
809 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
810 check(m.navigableKeySet().subSet(-86, true, 86, false) |
|
811 .remove(k)); }}, |
|
812 |
|
813 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
814 check(m.descendingKeySet().headSet(-86, false).remove(k)); }}, |
|
815 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
816 check(m.descendingKeySet().tailSet(86, true).remove(k)); }}, |
|
817 new Remover() { void remove(NavigableMap m, Object k, Object v) { |
|
818 check(m.descendingKeySet().subSet(86, true, -86, false) |
|
819 .remove(k)); }}, |
|
820 }; |
|
821 |
|
822 for (NavigableMapView view : views) { |
|
823 for (Remover remover : removers) { |
|
824 try { |
|
825 m.clear(); |
|
826 equalMaps(m, emptyMap); |
|
827 equal(m.put(1, 2), null); |
|
828 equalMaps(m, singletonMap); |
|
829 NavigableMap v = view.view(m); |
|
830 remover.remove(v, 1, 2); |
|
831 equalMaps(m, emptyMap); |
|
832 } catch (Throwable t) { unexpected(t); } |
|
833 } |
|
834 } |
|
835 } |
|
836 |
745 private static void testNavigableMap(NavigableMap<Integer,Integer> m) |
837 private static void testNavigableMap(NavigableMap<Integer,Integer> m) |
746 { |
838 { |
747 clear(m); |
839 clear(m); |
748 checkNavigableMapKeys(m, 1, null, null, null, null); |
840 checkNavigableMapKeys(m, 1, null, null, null, null); |
749 |
841 |