@Test
 public void testContainValue() {
   OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
   map.put((double) 11, item);
   assertTrue(map.containsValue(item));
   assertFalse(map.containsValue(anotherItem));
 }
  @Test
  public void testConstructors() {
    OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
    int[] capacity = new int[1];
    double[] minLoadFactor = new double[1];
    double[] maxLoadFactor = new double[1];

    map.getInternalFactors(capacity, minLoadFactor, maxLoadFactor);
    assertEquals(AbstractSet.defaultCapacity, capacity[0]);
    assertEquals(AbstractSet.defaultMaxLoadFactor, maxLoadFactor[0], 0.001);
    assertEquals(AbstractSet.defaultMinLoadFactor, minLoadFactor[0], 0.001);
    int prime = PrimeFinder.nextPrime(907);
    map = new OpenDoubleObjectHashMap<TestClass>(prime);

    map.getInternalFactors(capacity, minLoadFactor, maxLoadFactor);
    assertEquals(prime, capacity[0]);
    assertEquals(AbstractSet.defaultMaxLoadFactor, maxLoadFactor[0], 0.001);
    assertEquals(AbstractSet.defaultMinLoadFactor, minLoadFactor[0], 0.001);

    map = new OpenDoubleObjectHashMap<TestClass>(prime, 0.4, 0.8);
    map.getInternalFactors(capacity, minLoadFactor, maxLoadFactor);
    assertEquals(prime, capacity[0]);
    assertEquals(0.4, minLoadFactor[0], 0.001);
    assertEquals(0.8, maxLoadFactor[0], 0.001);
  }
  @Test
  public void testPairsMatching() {
    DoubleArrayList keyList = new DoubleArrayList();
    List<TestClass> valueList = new ArrayList<TestClass>();
    OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
    map.put((double) 11, anotherItem2);
    map.put((double) 12, anotherItem3);
    map.put((double) 13, anotherItem4);
    map.put((double) 14, anotherItem5);
    map.removeKey((double) 13);
    map.pairsMatching(
        new DoubleObjectProcedure<TestClass>() {

          @Override
          public boolean apply(double first, TestClass second) {
            return (first % 2) == 0;
          }
        },
        keyList,
        valueList);
    keyList.sort();
    Collections.sort(valueList);
    assertEquals(2, keyList.size());
    assertEquals(2, valueList.size());
    assertEquals(12, keyList.get(0), (double) 0.000001);
    assertEquals(14, keyList.get(1), (double) 0.000001);
    assertSame(anotherItem3, valueList.get(0));
    assertSame(anotherItem5, valueList.get(1));
  }
 @Test
 public void testContainsKey() {
   OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
   map.put((double) 11, item);
   assertTrue(map.containsKey((double) 11));
   assertFalse(map.containsKey((double) 12));
 }
 @Test
 public void testGet() {
   OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
   map.put((double) 11, item);
   map.put((double) 12, anotherItem);
   assertSame(item, map.get((double) 11));
   assertSame(null, map.get((double) 0));
 }
 @Test
 public void testKeysSortedByValue() {
   OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
   map.put((double) 11, anotherItem5);
   map.put((double) 12, anotherItem4);
   map.put((double) 13, anotherItem3);
   map.put((double) 14, anotherItem2);
   map.removeKey((double) 13);
   DoubleArrayList keys = new DoubleArrayList();
   map.keysSortedByValue(keys);
   double[] keysArray = keys.toArray(new double[keys.size()]);
   assertArrayEquals(new double[] {14, 12, 11}, keysArray, (double) 0.000001);
 }
  @Test
  public void testEnsureCapacity() {
    OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
    int prime = PrimeFinder.nextPrime(907);

    map.ensureCapacity(prime);
    int[] capacity = new int[1];
    double[] minLoadFactor = new double[1];
    double[] maxLoadFactor = new double[1];

    map.getInternalFactors(capacity, minLoadFactor, maxLoadFactor);
    assertEquals(prime, capacity[0]);
  }
 @Test
 public void testKeys() {
   OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
   map.put((double) 11, item);
   map.put((double) 12, item);
   DoubleArrayList keys = new DoubleArrayList();
   map.keys(keys);
   keys.sort();
   assertEquals(11, keys.get(0), (double) 0.000001);
   assertEquals(12, keys.get(1), (double) 0.000001);
   DoubleArrayList k2 = map.keys();
   k2.sort();
   assertEquals(keys, k2);
 }
  @Test
  public void testPairsSortedByValue() {
    OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
    map.put((double) 11, anotherItem5);
    map.put((double) 12, anotherItem4);
    map.put((double) 13, anotherItem3);
    map.put((double) 14, anotherItem2);

    DoubleArrayList keys = new DoubleArrayList();
    List<TestClass> values = new ArrayList<TestClass>();
    map.pairsSortedByValue(keys, values);
    assertEquals((double) 11, keys.get(3), (double) 0.000001);
    assertEquals(anotherItem5, values.get(3));
    assertEquals((double) 12, keys.get(2), (double) 0.000001);
    assertEquals(anotherItem4, values.get(2));
    assertEquals((double) 13, keys.get(1), (double) 0.000001);
    assertEquals(anotherItem3, values.get(1));
    assertEquals((double) 14, keys.get(0), (double) 0.000001);
    assertEquals(anotherItem2, values.get(0));
  }
 @Test
 public void testCopy() {
   OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
   map.put((double) 11, item);
   OpenDoubleObjectHashMap<TestClass> map2 = (OpenDoubleObjectHashMap<TestClass>) map.copy();
   map.clear();
   assertEquals(1, map2.size());
 }
 @Test
 public void testClear() {
   OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
   map.put((double) 11, item);
   assertEquals(1, map.size());
   map.clear();
   assertEquals(0, map.size());
   assertSame(null, map.get((double) 11));
 }
  @Test
  public void testForEachPair() {
    final List<Pair> pairs = new ArrayList<Pair>();
    OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
    map.put((double) 11, anotherItem);
    map.put((double) 12, anotherItem2);
    map.put((double) 13, anotherItem3);
    map.put((double) 14, anotherItem4);
    map.removeKey((double) 13);
    map.forEachPair(
        new DoubleObjectProcedure<TestClass>() {

          @Override
          public boolean apply(double first, TestClass second) {
            pairs.add(new Pair(first, second));
            return true;
          }
        });

    Collections.sort(pairs);
    assertEquals(3, pairs.size());
    assertEquals((double) 11, pairs.get(0).k, (double) 0.000001);
    assertSame(anotherItem, pairs.get(0).v);
    assertEquals((double) 12, pairs.get(1).k, (double) 0.000001);
    assertSame(anotherItem2, pairs.get(1).v);
    assertEquals((double) 14, pairs.get(2).k, (double) 0.000001);
    assertSame(anotherItem4, pairs.get(2).v);

    pairs.clear();
    map.forEachPair(
        new DoubleObjectProcedure<TestClass>() {
          int count = 0;

          @Override
          public boolean apply(double first, TestClass second) {
            pairs.add(new Pair(first, second));
            count++;
            return count < 2;
          }
        });

    assertEquals(2, pairs.size());
  }
 @Test
 public void testValues() {
   OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
   map.put((double) 11, anotherItem);
   map.put((double) 12, anotherItem2);
   map.put((double) 13, anotherItem3);
   map.put((double) 14, anotherItem4);
   map.removeKey((double) 13);
   List<TestClass> values = new ArrayList<TestClass>(100);
   map.values(values);
   assertEquals(3, values.size());
   Collections.sort(values);
   assertEquals(anotherItem2, values.get(0));
   assertEquals(anotherItem4, values.get(1));
   assertEquals(anotherItem, values.get(2));
 }
  @Test
  public void testForEachKey() {
    final DoubleArrayList keys = new DoubleArrayList();
    OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
    map.put((double) 11, anotherItem);
    map.put((double) 12, anotherItem2);
    map.put((double) 13, anotherItem3);
    map.put((double) 14, anotherItem4);
    map.removeKey((double) 13);
    map.forEachKey(
        new DoubleProcedure() {

          @Override
          public boolean apply(double element) {
            keys.add(element);
            return true;
          }
        });

    double[] keysArray = keys.toArray(new double[keys.size()]);
    Arrays.sort(keysArray);

    assertArrayEquals(new double[] {11, 12, 14}, keysArray, (double) 0.000001);
  }
 @Test
 public void testEquals() {
   // since there are no other subclasses of
   // Abstractxxx available, we have to just test the
   // obvious.
   OpenDoubleObjectHashMap<TestClass> map = new OpenDoubleObjectHashMap<TestClass>();
   map.put((double) 11, anotherItem);
   map.put((double) 12, anotherItem2);
   map.put((double) 13, anotherItem3);
   map.put((double) 14, anotherItem4);
   map.removeKey((double) 13);
   OpenDoubleObjectHashMap<TestClass> map2 = (OpenDoubleObjectHashMap<TestClass>) map.copy();
   assertEquals(map, map2);
   assertTrue(map2.equals(map));
   assertFalse("Hello Sailor".equals(map));
   assertFalse(map.equals("hello sailor"));
   map2.removeKey((double) 11);
   assertFalse(map.equals(map2));
   assertFalse(map2.equals(map));
 }