use of jetbrains.exodus.core.dataStructures.hash.LongHashSet in project xodus by JetBrains.
the class BTreeStructureIdTest method assertStructureIdNotEqual.
public static void assertStructureIdNotEqual(long firstAddress, long secondAddress) {
ITree firstImTree = new BTree(log, firstAddress, false, 3);
ITree secondImTree = new BTree(log, secondAddress, false, 3);
LongIterator it = firstImTree.addressIterator();
LongHashSet firstSet = new LongHashSet();
LongHashSet secondSet = new LongHashSet();
while (it.hasNext()) firstSet.add(log.read(it.next()).getStructureId());
it = secondImTree.addressIterator();
while (it.hasNext()) secondSet.add(log.read(it.next()).getStructureId());
for (long firstStructureId : firstSet) {
for (long seconfStrutureId : secondSet) {
if (firstStructureId == seconfStrutureId)
throw new AssertionError("Structure ids are equal!");
}
}
}
use of jetbrains.exodus.core.dataStructures.hash.LongHashSet in project xodus by JetBrains.
the class TreeCursorDuplicatesTest method test_xd_347_like.
@Test
public void test_xd_347_like() {
tm = createMutableTree(true, 1);
final int count = 20000;
long value = 0;
final LongHashMap<LongHashSet> values = new LongHashMap<>();
final Random rnd = new Random();
for (int i = 0; i < count; ++i, ++value) {
if (i > count / 2) {
final Pair<Long, LongHashSet>[] pair = new Pair[1];
values.forEachEntry((ObjectProcedure<Map.Entry<Long, LongHashSet>>) object -> {
pair[0] = new Pair<>(object.getKey(), object.getValue());
return false;
});
final Pair<Long, LongHashSet> p = pair[0];
final LongHashSet oldSet = p.getSecond();
final long oldValue = oldSet.iterator().nextLong();
final Long oldKey = p.getFirst();
try (ITreeCursor cursor = tm.openCursor()) {
if (!cursor.getSearchBoth(key(oldKey), value(oldValue))) {
Assert.assertTrue(cursor.getSearchBoth(key(oldKey), value(oldValue)));
}
cursor.deleteCurrent();
}
Assert.assertTrue(oldSet.remove(oldValue));
if (oldSet.isEmpty()) {
Assert.assertEquals(oldSet, values.remove(oldKey));
}
}
final long key = System.currentTimeMillis() + rnd.nextInt(count / 10);
LongHashSet keyValues = values.get(key);
if (keyValues == null) {
keyValues = new LongHashSet();
values.put(key, keyValues);
}
Assert.assertTrue(keyValues.add(value));
tm.put(key(key), value(value));
}
}
use of jetbrains.exodus.core.dataStructures.hash.LongHashSet in project xodus by JetBrains.
the class StoreTest method concurrentPutLikeJetPass.
private void concurrentPutLikeJetPass(@NotNull final StoreConfig config) {
env.getEnvironmentConfig().setGcEnabled(false);
final Store store = openStoreAutoCommit("store", config);
final JobProcessor processor = new MultiThreadDelegatingJobProcessor("ConcurrentPutProcessor", 8) {
};
processor.setExceptionHandler(new JobProcessorExceptionHandler() {
@Override
public void handle(JobProcessor processor, Job job, Throwable t) {
t.printStackTrace(System.out);
}
});
processor.start();
final int count = 50000;
final LongSet keys = new LongHashSet();
for (int i = 0; i < count; ++i) {
processor.queue(new Job() {
@Override
protected void execute() {
env.executeInTransaction(new TransactionalExecutable() {
@Override
public void execute(@NotNull final Transaction txn) {
final long key = randomLong();
store.put(txn, LongBinding.longToCompressedEntry(key), getValue());
if (txn.flush()) {
final boolean added;
synchronized (keys) {
added = keys.add(key);
}
if (!added) {
System.out.println("Happy birthday paradox!");
}
}
}
});
}
});
}
processor.waitForJobs(10);
processor.finish();
assertEquals(count, keys.size());
env.executeInTransaction(new TransactionalExecutable() {
@Override
public void execute(@NotNull final Transaction txn) {
final long[] longs = keys.toLongArray();
for (long key : longs) {
assertEquals(getValue(), store.get(txn, LongBinding.longToCompressedEntry(key)));
}
Arrays.sort(longs);
try (Cursor cursor = store.openCursor(txn)) {
int i = 0;
while (cursor.getNext()) {
assertEquals(longs[i++], LongBinding.compressedEntryToLong(cursor.getKey()));
}
assertEquals(count, i);
}
}
});
}
Aggregations