17dd252788645e940eada959bdde927426e2531c9Paul Duffin/* 27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2012 The Guava Authors 37dd252788645e940eada959bdde927426e2531c9Paul Duffin * 47dd252788645e940eada959bdde927426e2531c9Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 57dd252788645e940eada959bdde927426e2531c9Paul Duffin * you may not use this file except in compliance with the License. 67dd252788645e940eada959bdde927426e2531c9Paul Duffin * You may obtain a copy of the License at 77dd252788645e940eada959bdde927426e2531c9Paul Duffin * 87dd252788645e940eada959bdde927426e2531c9Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 97dd252788645e940eada959bdde927426e2531c9Paul Duffin * 107dd252788645e940eada959bdde927426e2531c9Paul Duffin * Unless required by applicable law or agreed to in writing, software 117dd252788645e940eada959bdde927426e2531c9Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 127dd252788645e940eada959bdde927426e2531c9Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137dd252788645e940eada959bdde927426e2531c9Paul Duffin * See the License for the specific language governing permissions and 147dd252788645e940eada959bdde927426e2531c9Paul Duffin * limitations under the License. 157dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 167dd252788645e940eada959bdde927426e2531c9Paul Duffin 177dd252788645e940eada959bdde927426e2531c9Paul Duffinpackage com.google.common.collect; 187dd252788645e940eada959bdde927426e2531c9Paul Duffin 197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Collection; 207dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Collections; 217dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.HashSet; 227dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.LinkedHashSet; 237dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Map; 240888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Random; 257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Set; 267dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.SortedMap; 277dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.TreeSet; 287dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.concurrent.ConcurrentHashMap; 293ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffinimport java.util.concurrent.ConcurrentSkipListMap; 307dd252788645e940eada959bdde927426e2531c9Paul Duffin 317dd252788645e940eada959bdde927426e2531c9Paul Duffin/** 327dd252788645e940eada959bdde927426e2531c9Paul Duffin * Helper classes for various benchmarks. 337dd252788645e940eada959bdde927426e2531c9Paul Duffin * 347dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author Christopher Swenson 357dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 367dd252788645e940eada959bdde927426e2531c9Paul Duffinfinal class BenchmarkHelpers { 377dd252788645e940eada959bdde927426e2531c9Paul Duffin /** 387dd252788645e940eada959bdde927426e2531c9Paul Duffin * So far, this is the best way to test various implementations of {@link Set} subclasses. 397dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 407dd252788645e940eada959bdde927426e2531c9Paul Duffin public enum SetImpl { 417dd252788645e940eada959bdde927426e2531c9Paul Duffin Hash { 427dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override <E extends Comparable<E>> Set<E> create(Collection<E> contents) { 437dd252788645e940eada959bdde927426e2531c9Paul Duffin return new HashSet<E>(contents); 447dd252788645e940eada959bdde927426e2531c9Paul Duffin } 457dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 467dd252788645e940eada959bdde927426e2531c9Paul Duffin LinkedHash { 477dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override <E extends Comparable<E>> Set<E> create(Collection<E> contents) { 487dd252788645e940eada959bdde927426e2531c9Paul Duffin return new LinkedHashSet<E>(contents); 497dd252788645e940eada959bdde927426e2531c9Paul Duffin } 507dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 517dd252788645e940eada959bdde927426e2531c9Paul Duffin Tree { 527dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override <E extends Comparable<E>> Set<E> create(Collection<E> contents) { 537dd252788645e940eada959bdde927426e2531c9Paul Duffin return new TreeSet<E>(contents); 547dd252788645e940eada959bdde927426e2531c9Paul Duffin } 557dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 567dd252788645e940eada959bdde927426e2531c9Paul Duffin Unmodifiable { 577dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override <E extends Comparable<E>> Set<E> create(Collection<E> contents) { 587dd252788645e940eada959bdde927426e2531c9Paul Duffin return Collections.unmodifiableSet(new HashSet<E>(contents)); 597dd252788645e940eada959bdde927426e2531c9Paul Duffin } 607dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 617dd252788645e940eada959bdde927426e2531c9Paul Duffin Synchronized { 627dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override <E extends Comparable<E>> Set<E> create(Collection<E> contents) { 637dd252788645e940eada959bdde927426e2531c9Paul Duffin return Collections.synchronizedSet(new HashSet<E>(contents)); 647dd252788645e940eada959bdde927426e2531c9Paul Duffin } 657dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 667dd252788645e940eada959bdde927426e2531c9Paul Duffin Immutable { 677dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override <E extends Comparable<E>> Set<E> create(Collection<E> contents) { 687dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableSet.copyOf(contents); 697dd252788645e940eada959bdde927426e2531c9Paul Duffin } 707dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 717dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSorted { 727dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override <E extends Comparable<E>> Set<E> create(Collection<E> contents) { 737dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableSortedSet.copyOf(contents); 747dd252788645e940eada959bdde927426e2531c9Paul Duffin } 757dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 767dd252788645e940eada959bdde927426e2531c9Paul Duffin ; 777dd252788645e940eada959bdde927426e2531c9Paul Duffin 787dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract <E extends Comparable<E>> Set<E> create(Collection<E> contents); 797dd252788645e940eada959bdde927426e2531c9Paul Duffin } 807dd252788645e940eada959bdde927426e2531c9Paul Duffin 817dd252788645e940eada959bdde927426e2531c9Paul Duffin public enum ListMultimapImpl { 827dd252788645e940eada959bdde927426e2531c9Paul Duffin ArrayList { 837dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 847dd252788645e940eada959bdde927426e2531c9Paul Duffin <K, V> ListMultimap<K, V> create(Multimap<K, V> contents) { 857dd252788645e940eada959bdde927426e2531c9Paul Duffin return ArrayListMultimap.create(contents); 867dd252788645e940eada959bdde927426e2531c9Paul Duffin } 877dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 887dd252788645e940eada959bdde927426e2531c9Paul Duffin LinkedList { 897dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 907dd252788645e940eada959bdde927426e2531c9Paul Duffin <K, V> ListMultimap<K, V> create(Multimap<K, V> contents) { 917dd252788645e940eada959bdde927426e2531c9Paul Duffin return LinkedListMultimap.create(contents); 927dd252788645e940eada959bdde927426e2531c9Paul Duffin } 937dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 947dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableList { 957dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 967dd252788645e940eada959bdde927426e2531c9Paul Duffin <K, V> ListMultimap<K, V> create(Multimap<K, V> contents) { 977dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableListMultimap.copyOf(contents); 987dd252788645e940eada959bdde927426e2531c9Paul Duffin } 997dd252788645e940eada959bdde927426e2531c9Paul Duffin }; 1007dd252788645e940eada959bdde927426e2531c9Paul Duffin 1017dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract <K, V> ListMultimap<K, V> create(Multimap<K, V> contents); 1027dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1037dd252788645e940eada959bdde927426e2531c9Paul Duffin 1047dd252788645e940eada959bdde927426e2531c9Paul Duffin public enum SetMultimapImpl { 1057dd252788645e940eada959bdde927426e2531c9Paul Duffin Hash { 1067dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1077dd252788645e940eada959bdde927426e2531c9Paul Duffin <K extends Comparable<K>, V extends Comparable<V>> SetMultimap<K, V> create( 1087dd252788645e940eada959bdde927426e2531c9Paul Duffin Multimap<K, V> contents) { 1097dd252788645e940eada959bdde927426e2531c9Paul Duffin return HashMultimap.create(contents); 1107dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1117dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 1127dd252788645e940eada959bdde927426e2531c9Paul Duffin LinkedHash { 1137dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1147dd252788645e940eada959bdde927426e2531c9Paul Duffin <K extends Comparable<K>, V extends Comparable<V>> SetMultimap<K, V> create( 1157dd252788645e940eada959bdde927426e2531c9Paul Duffin Multimap<K, V> contents) { 1167dd252788645e940eada959bdde927426e2531c9Paul Duffin return LinkedHashMultimap.create(contents); 1177dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1187dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 1197dd252788645e940eada959bdde927426e2531c9Paul Duffin Tree { 1207dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1217dd252788645e940eada959bdde927426e2531c9Paul Duffin <K extends Comparable<K>, V extends Comparable<V>> SetMultimap<K, V> create( 1227dd252788645e940eada959bdde927426e2531c9Paul Duffin Multimap<K, V> contents) { 1237dd252788645e940eada959bdde927426e2531c9Paul Duffin return TreeMultimap.create(contents); 1247dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1257dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 1267dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSet { 1277dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1287dd252788645e940eada959bdde927426e2531c9Paul Duffin <K extends Comparable<K>, V extends Comparable<V>> SetMultimap<K, V> create( 1297dd252788645e940eada959bdde927426e2531c9Paul Duffin Multimap<K, V> contents) { 1307dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableSetMultimap.copyOf(contents); 1317dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1327dd252788645e940eada959bdde927426e2531c9Paul Duffin }; 1337dd252788645e940eada959bdde927426e2531c9Paul Duffin 1347dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract <K extends Comparable<K>, V extends Comparable<V>> SetMultimap<K, V> create( 1357dd252788645e940eada959bdde927426e2531c9Paul Duffin Multimap<K, V> contents); 1367dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1377dd252788645e940eada959bdde927426e2531c9Paul Duffin 1387dd252788645e940eada959bdde927426e2531c9Paul Duffin public enum MapImpl { 1397dd252788645e940eada959bdde927426e2531c9Paul Duffin Hash { 1407dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1417dd252788645e940eada959bdde927426e2531c9Paul Duffin <K, V> Map<K, V> create(Map<K, V> map) { 1427dd252788645e940eada959bdde927426e2531c9Paul Duffin return Maps.newHashMap(map); 1437dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1447dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 1457dd252788645e940eada959bdde927426e2531c9Paul Duffin LinkedHash { 1467dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1477dd252788645e940eada959bdde927426e2531c9Paul Duffin <K, V> Map<K, V> create(Map<K, V> map) { 1487dd252788645e940eada959bdde927426e2531c9Paul Duffin return Maps.newLinkedHashMap(map); 1497dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1507dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 1517dd252788645e940eada959bdde927426e2531c9Paul Duffin ConcurrentHash { 1527dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1537dd252788645e940eada959bdde927426e2531c9Paul Duffin <K, V> Map<K, V> create(Map<K, V> map) { 1547dd252788645e940eada959bdde927426e2531c9Paul Duffin return new ConcurrentHashMap<K, V>(map); 1557dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1567dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 1577dd252788645e940eada959bdde927426e2531c9Paul Duffin Immutable { 1587dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1597dd252788645e940eada959bdde927426e2531c9Paul Duffin <K, V> Map<K, V> create(Map<K, V> map) { 1607dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableMap.copyOf(map); 1617dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1627dd252788645e940eada959bdde927426e2531c9Paul Duffin }; 1637dd252788645e940eada959bdde927426e2531c9Paul Duffin 1647dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract <K, V> Map<K, V> create(Map<K, V> map); 1657dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1667dd252788645e940eada959bdde927426e2531c9Paul Duffin 1677dd252788645e940eada959bdde927426e2531c9Paul Duffin enum SortedMapImpl { 1687dd252788645e940eada959bdde927426e2531c9Paul Duffin Tree { 1697dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1707dd252788645e940eada959bdde927426e2531c9Paul Duffin <K extends Comparable<K>, V> SortedMap<K, V> create(Map<K, V> map) { 1717dd252788645e940eada959bdde927426e2531c9Paul Duffin SortedMap<K, V> result = Maps.newTreeMap(); 1727dd252788645e940eada959bdde927426e2531c9Paul Duffin result.putAll(map); 1737dd252788645e940eada959bdde927426e2531c9Paul Duffin return result; 1747dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1757dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 1763ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin ConcurrentSkipList { 1773ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin @Override 1783ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin <K extends Comparable<K>, V> SortedMap<K, V> create(Map<K, V> map) { 1793ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin return new ConcurrentSkipListMap<K, V>(map); 1803ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin } 1813ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin }, 1827dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSorted { 1837dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1847dd252788645e940eada959bdde927426e2531c9Paul Duffin <K extends Comparable<K>, V> SortedMap<K, V> create(Map<K, V> map) { 1857dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableSortedMap.copyOf(map); 1867dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1877dd252788645e940eada959bdde927426e2531c9Paul Duffin }; 1887dd252788645e940eada959bdde927426e2531c9Paul Duffin 1897dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract <K extends Comparable<K>, V> SortedMap<K, V> create(Map<K, V> map); 1907dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1917dd252788645e940eada959bdde927426e2531c9Paul Duffin 1927dd252788645e940eada959bdde927426e2531c9Paul Duffin enum BiMapImpl { 1937dd252788645e940eada959bdde927426e2531c9Paul Duffin Hash{ 1947dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1957dd252788645e940eada959bdde927426e2531c9Paul Duffin <K, V> BiMap<K, V> create(BiMap<K, V> map) { 1967dd252788645e940eada959bdde927426e2531c9Paul Duffin return HashBiMap.create(map); 1977dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1987dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 1997dd252788645e940eada959bdde927426e2531c9Paul Duffin Immutable { 2007dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2017dd252788645e940eada959bdde927426e2531c9Paul Duffin <K, V> BiMap<K, V> create(BiMap<K, V> map) { 2027dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableBiMap.copyOf(map); 2037dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2047dd252788645e940eada959bdde927426e2531c9Paul Duffin }; 2057dd252788645e940eada959bdde927426e2531c9Paul Duffin 2067dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract <K, V> BiMap<K, V> create(BiMap<K, V> map); 2077dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2087dd252788645e940eada959bdde927426e2531c9Paul Duffin 2097dd252788645e940eada959bdde927426e2531c9Paul Duffin enum MultisetImpl { 2107dd252788645e940eada959bdde927426e2531c9Paul Duffin Hash { 2117dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2127dd252788645e940eada959bdde927426e2531c9Paul Duffin <E> Multiset<E> create(Multiset<E> contents) { 2137dd252788645e940eada959bdde927426e2531c9Paul Duffin return HashMultiset.create(contents); 2147dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2157dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 2167dd252788645e940eada959bdde927426e2531c9Paul Duffin LinkedHash { 2177dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2187dd252788645e940eada959bdde927426e2531c9Paul Duffin <E> Multiset<E> create(Multiset<E> contents) { 2197dd252788645e940eada959bdde927426e2531c9Paul Duffin return LinkedHashMultiset.create(contents); 2207dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2217dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 2227dd252788645e940eada959bdde927426e2531c9Paul Duffin ConcurrentHash { 2237dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2247dd252788645e940eada959bdde927426e2531c9Paul Duffin <E> Multiset<E> create(Multiset<E> contents) { 2257dd252788645e940eada959bdde927426e2531c9Paul Duffin return ConcurrentHashMultiset.create(contents); 2267dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2277dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 2287dd252788645e940eada959bdde927426e2531c9Paul Duffin Immutable { 2297dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2307dd252788645e940eada959bdde927426e2531c9Paul Duffin <E> Multiset<E> create(Multiset<E> contents) { 2317dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableMultiset.copyOf(contents); 2327dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2337dd252788645e940eada959bdde927426e2531c9Paul Duffin }; 2347dd252788645e940eada959bdde927426e2531c9Paul Duffin 2357dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract <E> Multiset<E> create(Multiset<E> contents); 2367dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2377dd252788645e940eada959bdde927426e2531c9Paul Duffin 2387dd252788645e940eada959bdde927426e2531c9Paul Duffin enum SortedMultisetImpl { 2397dd252788645e940eada959bdde927426e2531c9Paul Duffin Tree { 2407dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2417dd252788645e940eada959bdde927426e2531c9Paul Duffin <E extends Comparable<E>> SortedMultiset<E> create(Multiset<E> contents) { 2427dd252788645e940eada959bdde927426e2531c9Paul Duffin return TreeMultiset.create(contents); 2437dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2447dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 2457dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSorted { 2467dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2477dd252788645e940eada959bdde927426e2531c9Paul Duffin <E extends Comparable<E>> SortedMultiset<E> create(Multiset<E> contents) { 2487dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableSortedMultiset.copyOf(contents); 2497dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2507dd252788645e940eada959bdde927426e2531c9Paul Duffin }; 2517dd252788645e940eada959bdde927426e2531c9Paul Duffin 2527dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract <E extends Comparable<E>> SortedMultiset<E> create(Multiset<E> contents); 2537dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2547dd252788645e940eada959bdde927426e2531c9Paul Duffin 2557dd252788645e940eada959bdde927426e2531c9Paul Duffin enum TableImpl { 2567dd252788645e940eada959bdde927426e2531c9Paul Duffin HashBased { 2577dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2587dd252788645e940eada959bdde927426e2531c9Paul Duffin <R extends Comparable<R>, C extends Comparable<C>, V> Table<R, C, V> create( 2597dd252788645e940eada959bdde927426e2531c9Paul Duffin Table<R, C, V> contents) { 2607dd252788645e940eada959bdde927426e2531c9Paul Duffin return HashBasedTable.create(contents); 2617dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2627dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 2637dd252788645e940eada959bdde927426e2531c9Paul Duffin TreeBased { 2647dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2657dd252788645e940eada959bdde927426e2531c9Paul Duffin <R extends Comparable<R>, C extends Comparable<C>, V> Table<R, C, V> create( 2667dd252788645e940eada959bdde927426e2531c9Paul Duffin Table<R, C, V> contents) { 2677dd252788645e940eada959bdde927426e2531c9Paul Duffin Table<R, C, V> table = TreeBasedTable.create(); 2687dd252788645e940eada959bdde927426e2531c9Paul Duffin table.putAll(contents); 2697dd252788645e940eada959bdde927426e2531c9Paul Duffin return table; 2707dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2717dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 2727dd252788645e940eada959bdde927426e2531c9Paul Duffin Array { 2737dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2747dd252788645e940eada959bdde927426e2531c9Paul Duffin <R extends Comparable<R>, C extends Comparable<C>, V> Table<R, C, V> create( 2757dd252788645e940eada959bdde927426e2531c9Paul Duffin Table<R, C, V> contents) { 2767dd252788645e940eada959bdde927426e2531c9Paul Duffin if (contents.isEmpty()) { 2777dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableTable.of(); 2787dd252788645e940eada959bdde927426e2531c9Paul Duffin } else { 2797dd252788645e940eada959bdde927426e2531c9Paul Duffin return ArrayTable.create(contents); 2807dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2817dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2827dd252788645e940eada959bdde927426e2531c9Paul Duffin }, 2837dd252788645e940eada959bdde927426e2531c9Paul Duffin Immutable { 2847dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2857dd252788645e940eada959bdde927426e2531c9Paul Duffin <R extends Comparable<R>, C extends Comparable<C>, V> Table<R, C, V> create( 2867dd252788645e940eada959bdde927426e2531c9Paul Duffin Table<R, C, V> contents) { 2877dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableTable.copyOf(contents); 2887dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2897dd252788645e940eada959bdde927426e2531c9Paul Duffin }; 2907dd252788645e940eada959bdde927426e2531c9Paul Duffin 2917dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract <R extends Comparable<R>, C extends Comparable<C>, V> 2927dd252788645e940eada959bdde927426e2531c9Paul Duffin Table<R, C, V> create(Table<R, C, V> contents); 2937dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2947dd252788645e940eada959bdde927426e2531c9Paul Duffin 2957dd252788645e940eada959bdde927426e2531c9Paul Duffin public enum Value { 2967dd252788645e940eada959bdde927426e2531c9Paul Duffin INSTANCE; 2977dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2980888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2990888a09821a98ac0680fad765217302858e70fa4Paul Duffin public enum ListSizeDistribution { 3000888a09821a98ac0680fad765217302858e70fa4Paul Duffin UNIFORM_0_TO_2(0, 2), UNIFORM_0_TO_9(0, 9), ALWAYS_0(0, 0), ALWAYS_10(10, 10); 3010888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3020888a09821a98ac0680fad765217302858e70fa4Paul Duffin final int min; 3030888a09821a98ac0680fad765217302858e70fa4Paul Duffin final int max; 3040888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3050888a09821a98ac0680fad765217302858e70fa4Paul Duffin private ListSizeDistribution(int min, int max) { 3060888a09821a98ac0680fad765217302858e70fa4Paul Duffin this.min = min; 3070888a09821a98ac0680fad765217302858e70fa4Paul Duffin this.max = max; 3080888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3090888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3100888a09821a98ac0680fad765217302858e70fa4Paul Duffin public int chooseSize(Random random) { 3110888a09821a98ac0680fad765217302858e70fa4Paul Duffin return random.nextInt(max - min + 1) + min; 3120888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3130888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3147dd252788645e940eada959bdde927426e2531c9Paul Duffin} 315