11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect.testing.google; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.Preconditions.checkNotNull; 207dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static com.google.common.collect.testing.Helpers.mapEntry; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableSortedMap; 247dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.Ordering; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SampleElements; 267dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.TestListGenerator; 277dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.TestStringListGenerator; 287dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.TestStringSortedMapGenerator; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 327dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.SortedMap; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Generators of sorted maps and derived collections. 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jesse Wilson 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Hayward Chan 417dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author Chris Povirk 427dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author Louis Wasserman 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class SortedMapGenerators { 467dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class ImmutableSortedMapGenerator extends TestStringSortedMapGenerator { 477dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override public SortedMap<String, String> create(Entry<String, String>[] entries) { 487dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.Builder<String, String> builder = ImmutableSortedMap.naturalOrder(); 497dd252788645e940eada959bdde927426e2531c9Paul Duffin for (Entry<String, String> entry : entries) { 507dd252788645e940eada959bdde927426e2531c9Paul Duffin checkNotNull(entry); 517dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put(entry.getKey(), entry.getValue()); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 537dd252788645e940eada959bdde927426e2531c9Paul Duffin return builder.build(); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 577dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class ImmutableSortedMapEntryListGenerator 587dd252788645e940eada959bdde927426e2531c9Paul Duffin implements TestListGenerator<Entry<String, Integer>> { 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 617dd252788645e940eada959bdde927426e2531c9Paul Duffin public SampleElements<Entry<String, Integer>> samples() { 627dd252788645e940eada959bdde927426e2531c9Paul Duffin return new SampleElements<Entry<String, Integer>>( 637dd252788645e940eada959bdde927426e2531c9Paul Duffin mapEntry("foo", 5), 647dd252788645e940eada959bdde927426e2531c9Paul Duffin mapEntry("bar", 3), 657dd252788645e940eada959bdde927426e2531c9Paul Duffin mapEntry("baz", 17), 667dd252788645e940eada959bdde927426e2531c9Paul Duffin mapEntry("quux", 1), 677dd252788645e940eada959bdde927426e2531c9Paul Duffin mapEntry("toaster", -2)); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 707dd252788645e940eada959bdde927426e2531c9Paul Duffin @SuppressWarnings("unchecked") 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 727dd252788645e940eada959bdde927426e2531c9Paul Duffin public Entry<String, Integer>[] createArray(int length) { 737dd252788645e940eada959bdde927426e2531c9Paul Duffin return new Entry[length]; 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 777dd252788645e940eada959bdde927426e2531c9Paul Duffin public Iterable<Entry<String, Integer>> order(List<Entry<String, Integer>> insertionOrder) { 787dd252788645e940eada959bdde927426e2531c9Paul Duffin return new Ordering<Entry<String, Integer>>() { 797dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 807dd252788645e940eada959bdde927426e2531c9Paul Duffin public int compare(Entry<String, Integer> left, Entry<String, Integer> right) { 817dd252788645e940eada959bdde927426e2531c9Paul Duffin return left.getKey().compareTo(right.getKey()); 827dd252788645e940eada959bdde927426e2531c9Paul Duffin } 837dd252788645e940eada959bdde927426e2531c9Paul Duffin }.sortedCopy(insertionOrder); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 877dd252788645e940eada959bdde927426e2531c9Paul Duffin public List<Entry<String, Integer>> create(Object... elements) { 887dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 897dd252788645e940eada959bdde927426e2531c9Paul Duffin for (Object o : elements) { 907dd252788645e940eada959bdde927426e2531c9Paul Duffin @SuppressWarnings("unchecked") 917dd252788645e940eada959bdde927426e2531c9Paul Duffin Entry<String, Integer> entry = (Entry<String, Integer>) o; 927dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put(entry); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 947dd252788645e940eada959bdde927426e2531c9Paul Duffin return builder.build().entrySet().asList(); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 987dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class ImmutableSortedMapKeyListGenerator extends TestStringListGenerator { 997dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override protected List<String> create(String[] elements) { 1007dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < elements.length; i++) { 1027dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put(elements[i], i); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1047dd252788645e940eada959bdde927426e2531c9Paul Duffin return builder.build().keySet().asList(); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public List<String> order(List<String> insertionOrder) { 1097dd252788645e940eada959bdde927426e2531c9Paul Duffin return Ordering.natural().sortedCopy(insertionOrder); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1137dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class ImmutableSortedMapValueListGenerator extends TestStringListGenerator { 1147dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override protected List<String> create(String[] elements) { 1157dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.Builder<Integer, String> builder = ImmutableSortedMap.naturalOrder(); 1167dd252788645e940eada959bdde927426e2531c9Paul Duffin for (int i = 0; i < elements.length; i++) { 1177dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put(i, elements[i]); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1197dd252788645e940eada959bdde927426e2531c9Paul Duffin return builder.build().values().asList(); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 123