private static LongLongMap ToMap(params long[] keys)
        {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.eclipse.collections.api.map.primitive.MutableLongLongMap m = new org.eclipse.collections.impl.map.mutable.primitive.LongLongHashMap();
            MutableLongLongMap m = new LongLongHashMap();

            Fill(m, keys);
            return(m);
        }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test void randomizedTest()
        internal virtual void RandomizedTest()
        {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int count = 10000 + rnd.nextInt(1000);
            int count = 10000 + _rnd.Next(1000);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.eclipse.collections.api.map.primitive.MutableLongLongMap m = new org.eclipse.collections.impl.map.mutable.primitive.LongLongHashMap();
            MutableLongLongMap m = new LongLongHashMap();

            while (m.size() < count)
            {
                m.put(_rnd.nextLong(), _rnd.nextLong());
            }

            m.forEachKeyValue((k, v) =>
            {
                assertFalse(_map.containsKey(k));
                _map.put(k, v);
                assertTrue(_map.containsKey(k));
                assertEquals(v, _map.get(k));
                assertEquals(v, _map.getOrThrow(k));
                assertEquals(v, _map.getIfAbsent(k, v * 2));
                assertEquals(v, _map.getIfAbsentPut(k, v * 2));
                assertEquals(v, _map.getIfAbsentPut(k, () => v * 2));
            });

            assertEquals(m.size(), _map.size());
            assertTrue(m.Keys.allSatisfy(_map.containsKey));

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.List<org.eclipse.collections.api.tuple.primitive.LongLongPair> toRemove = m.keyValuesView().select(p -> rnd.nextInt(100) < 75).toList().shuffleThis(rnd.random());
            IList <LongLongPair> toRemove = m.keyValuesView().select(p => _rnd.Next(100) < 75).toList().shuffleThis(_rnd.random());

            toRemove.ForEach(p =>
            {
                long k = p.One;
                long v = p.Two;

                _map.updateValue(k, v + 1, x => - x);
                assertEquals(-v, _map.get(k));

                _map.remove(k);
                assertEquals(v * 2, _map.removeKeyIfAbsent(k, v * 2));
                assertEquals(v * 2, _map.getIfAbsent(k, v * 2));
                assertFalse(_map.containsKey(k));
                assertThrows(typeof(System.InvalidOperationException), () => _map.getOrThrow(k));

                _map.updateValue(k, v + 42, x => - x);
                assertEquals(-v - 42, _map.get(k));
            });

            toRemove.ForEach(p => _map.removeKey(p.One));

            assertEquals(count - toRemove.Count, _map.size());
        }
Ejemplo n.º 3
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void indexEntryHashing()
        public virtual void IndexEntryHashing()
        {
            int collisions         = 0;
            int labelIdCount       = 50;
            int propertyKeyIdCount = 50;
            int objectCount        = 10000;
            MutableLongLongMap map = new LongLongHashMap(50 * 50 * 10000);

            string[] values = PrecomputeValues(objectCount);

            for (int labelId = 0; labelId < labelIdCount; labelId++)
            {
                for (int propertyKeyId = 0; propertyKeyId < propertyKeyIdCount; propertyKeyId++)
                {
                    for (int objectId = 0; objectId < objectCount; objectId++)
                    {
                        string @object    = values[objectId];
                        long   resourceId = indexEntryResourceId(labelId, exact(propertyKeyId, @object));

                        long newValue = PackValue(labelId, propertyKeyId, objectId);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final boolean hasOldValue = map.containsKey(resourceId);
                        bool hasOldValue = map.containsKey(resourceId);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final long oldValue = map.get(resourceId);
                        long oldValue = map.get(resourceId);
                        map.put(resourceId, newValue);
                        if (hasOldValue)
                        {
//JAVA TO C# CONVERTER TODO TASK: The following line has a Java format specifier which cannot be directly translated to .NET:
//ORIGINAL LINE: System.out.printf("Collision on %s: %s ~= %s%n", resourceId, toValueString(newValue), toValueString(oldValue));
                            Console.Write("Collision on %s: %s ~= %s%n", resourceId, ToValueString(newValue), ToValueString(oldValue));
                            collisions++;
                            if (collisions > 100)
                            {
                                fail("This hashing is terrible!");
                            }
                        }
                    }
                }
            }

            assertThat(collisions, @is(0));
        }