@CollectionSize.Require(ZERO) public void testEmptyMapFirst() { assertNull(navigableMap.firstEntry()); try { navigableMap.firstKey(); fail(); } catch (NoSuchElementException e) { } }
public void testBackwardIteration() throws IOException { final int records = 10000; long seed = System.currentTimeMillis(); MersenneTwisterFast mersenneTwisterFast = new MersenneTwisterFast(1381162033616L); System.out.println("testBackwardIteration seed : " + seed); NavigableMap<OClusterPosition, byte[]> positionRecordMap = new TreeMap<OClusterPosition, byte[]>(); ORecordVersion recordVersion = OVersionFactory.instance().createVersion(); recordVersion.increment(); recordVersion.increment(); for (int i = 0; i < records; i++) { int recordSize = mersenneTwisterFast.nextInt(2 * OClusterPage.MAX_RECORD_SIZE) + 1; byte[] record = new byte[recordSize]; mersenneTwisterFast.nextBytes(record); final OPhysicalPosition physicalPosition = paginatedCluster.createRecord(record, recordVersion, (byte) 2); positionRecordMap.put(physicalPosition.clusterPosition, record); } Iterator<OClusterPosition> positionIterator = positionRecordMap.keySet().iterator(); while (positionIterator.hasNext()) { OClusterPosition clusterPosition = positionIterator.next(); if (mersenneTwisterFast.nextBoolean()) { Assert.assertTrue(paginatedCluster.deleteRecord(clusterPosition)); positionIterator.remove(); } } OPhysicalPosition physicalPosition = new OPhysicalPosition(); physicalPosition.clusterPosition = OClusterPositionFactory.INSTANCE.valueOf(Long.MAX_VALUE); OPhysicalPosition[] positions = paginatedCluster.floorPositions(physicalPosition); Assert.assertTrue(positions.length > 0); positionIterator = positionRecordMap.descendingKeySet().iterator(); int counter = 0; while (positionIterator.hasNext()) { Assert.assertTrue(positions.length > 0); OClusterPosition testedPosition = positionIterator.next(); Assert.assertEquals(positions[positions.length - 1].clusterPosition, testedPosition); OPhysicalPosition positionToFind = positions[positions.length - 1]; positions = paginatedCluster.lowerPositions(positionToFind); counter++; } Assert.assertEquals(paginatedCluster.getEntries(), counter); Assert.assertEquals(paginatedCluster.getFirstPosition(), positionRecordMap.firstKey()); Assert.assertEquals(paginatedCluster.getLastPosition(), positionRecordMap.lastKey()); }
private int flushRing(int writeGroupsToFlush, int flushedGroups, boolean forceFlush) throws IOException { NavigableMap<GroupKey, WriteGroup> subMap = writeGroups.tailMap(lastGroupKey, false); if (!subMap.isEmpty()) { flushedGroups = iterateBySubRing(subMap, writeGroupsToFlush, 0, forceFlush); if (flushedGroups < writeGroupsToFlush) { if (!subMap.isEmpty()) { subMap = writeGroups.headMap(subMap.firstKey(), false); flushedGroups = iterateBySubRing(subMap, writeGroupsToFlush, flushedGroups, forceFlush); } } } else flushedGroups = iterateBySubRing(writeGroups, writeGroupsToFlush, flushedGroups, forceFlush); return flushedGroups; }
static DateTickUnit computeDateTickUnit(NavigableMap<TimeAxisKey, DiffStat> aggregatedDiffstats) { TimeAxisKey start = aggregatedDiffstats.firstKey(); TimeAxisKey end = aggregatedDiffstats.lastKey(); int yearsBetween = start.unitsBetween(end, DateTickUnitType.YEAR); if (yearsBetween >= 5) { return new DateTickUnit(DateTickUnitType.YEAR, computeTickUnitSize(yearsBetween)); } int monthsBetween = start.unitsBetween(end, DateTickUnitType.MONTH); if (monthsBetween >= 5) { return new DateTickUnit(DateTickUnitType.MONTH, computeTickUnitSize(monthsBetween)); } // TODO check if day is supported int daysBetween = start.unitsBetween(end, DateTickUnitType.DAY); return new DateTickUnit(DateTickUnitType.DAY, computeTickUnitSize(daysBetween)); }
private static Map<String, NavigableMap<String, String>> partitioning( NavigableMap<String, String> map) { assert map != null; Map<String, NavigableMap<String, String>> results = new TreeMap<String, NavigableMap<String, String>>(); while (map.isEmpty() == false) { String name = map.firstKey(); int index = name.indexOf('.'); if (index >= 0) { name = name.substring(0, index); } String first = name + '.'; String last = name + (char) ('.' + 1); NavigableMap<String, String> partition = new TreeMap<String, String>(); for (Map.Entry<String, String> entry : map.subMap(first, last).entrySet()) { String key = entry.getKey(); partition.put(key.substring(name.length() + 1), entry.getValue()); } results.put(name, partition); map.remove(name); map.subMap(first, last).clear(); } return results; }
@CollectionSize.Require(SEVERAL) public void testFirst() { assertEquals(a, navigableMap.firstEntry()); assertEquals(a.getKey(), navigableMap.firstKey()); }
@CollectionSize.Require(ONE) public void testSingletonMapFirst() { assertEquals(a, navigableMap.firstEntry()); assertEquals(a.getKey(), navigableMap.firstKey()); }
public void testFirstKey() { NavigableMap<String, Integer> map = create(); map.put("a", 1); map.firstKey(); }
public Map<Number640, Enum<?>> putAll( final NavigableMap<Number640, Data> dataMap, PublicKey publicKey, boolean putIfAbsent, boolean domainProtection, boolean sendSelf) { if (dataMap.isEmpty()) { return Collections.emptyMap(); } final Number640 min = dataMap.firstKey(); final Number640 max = dataMap.lastKey(); final Map<Number640, Enum<?>> retVal = new HashMap<Number640, Enum<?>>(); final HashSet<Number480> keysToCheck = new HashSet<Number480>(); final RangeLock<Number640>.Range lock = lock(min, max); try { for (Map.Entry<Number640, Data> entry : dataMap.entrySet()) { Number640 key = entry.getKey(); keysToCheck.add(key.locationAndDomainAndContentKey()); Data newData = entry.getValue(); if (!securityDomainCheck( key.locationAndDomainKey(), publicKey, publicKey, domainProtection)) { retVal.put(key, PutStatus.FAILED_SECURITY); newData.release(); continue; } // We need this check in case we did not use the encoder/decoder, // which is the case if we send the message to ourself. In that // case, the public key of the data is never set to the message // publick key, if the publick key of the data was null. final PublicKey dataKey; if (sendSelf && newData.publicKey() == null) { dataKey = publicKey; } else { dataKey = newData.publicKey(); } if (!securityEntryCheck( key.locationAndDomainAndContentKey(), publicKey, dataKey, newData.isProtectedEntry())) { retVal.put(key, PutStatus.FAILED_SECURITY); newData.release(); continue; } final Data oldDataGet = backend.get(key); if (oldDataGet != null) { if (putIfAbsent) { retVal.put(key, PutStatus.FAILED_NOT_ABSENT); newData.release(); continue; } if (oldDataGet.isDeleted()) { retVal.put(key, PutStatus.DELETED); newData.release(); continue; } if (!oldDataGet.basedOnSet().equals(newData.basedOnSet())) { retVal.put(key, PutStatus.VERSION_FORK); newData.release(); continue; } } final Data oldDataPut = backend.put(key, newData); long expiration = newData.expirationMillis(); // handle timeout backend.addTimeout(key, expiration); if (newData.hasPrepareFlag()) { retVal.put(key, PutStatus.OK_PREPARED); } else { retVal.put(key, PutStatus.OK); } if (oldDataPut != null && oldDataPut != newData) { oldDataPut.release(); } } for (Number480 key : keysToCheck) { // now check for forks Number640 minVersion = new Number640(key, Number160.ZERO); Number640 maxVersion = new Number640(key, Number160.MAX_VALUE); NavigableMap<Number640, Data> tmp = backend.subMap(minVersion, maxVersion); tmp = filterCopyOrig(tmp, -1, true); NavigableMap<Number640, Data> heads = getLatestInternalOrig(tmp); final boolean forked = heads.size() > 1; for (final Map.Entry<Number640, Data> entry : heads.entrySet()) { if (forked) { if (retVal.containsKey(entry.getKey())) { retVal.put(entry.getKey(), PutStatus.VERSION_FORK); } } } // now remove old versions if (maxVersions > 0) { NavigableMap<Number640, Data> versions = backend.subMap(minVersion, maxVersion); while (!versions.isEmpty() && versions.firstKey().versionKey().timestamp() + maxVersions <= versions.lastKey().versionKey().timestamp()) { Map.Entry<Number640, Data> entry = versions.pollFirstEntry(); Data removed = backend.remove(entry.getKey(), true); if (removed != null) { removed.release(); } backend.removeTimeout(entry.getKey()); } } } return retVal; } finally { lock.unlock(); } }