[RService] Enhance test for LazyRStore
diff --git a/core/org.eclipse.statet.rj.services.core-tests/src/org/eclipse/statet/rj/services/util/dataaccess/LazyRStoreTest.java b/core/org.eclipse.statet.rj.services.core-tests/src/org/eclipse/statet/rj/services/util/dataaccess/LazyRStoreTest.java
index bf0963a..14bea22 100644
--- a/core/org.eclipse.statet.rj.services.core-tests/src/org/eclipse/statet/rj/services/util/dataaccess/LazyRStoreTest.java
+++ b/core/org.eclipse.statet.rj.services.core-tests/src/org/eclipse/statet/rj/services/util/dataaccess/LazyRStoreTest.java
@@ -69,8 +69,6 @@
}
- private AtomicReference<@Nullable String> prefix;
-
private LazyRStore<TestElement> store;
@@ -80,184 +78,207 @@
@Test
- public void get_directUpdate_Row() {
+ public void get_directUpdate_scrollRows() {
final long rowCount= 2000000;
final long colCount= 100000;
- this.prefix= new AtomicReference<>("A");
- this.store= new LazyRStore<>(rowCount, colCount, 10, directUpdater());
+ final AtomicReference<@Nullable String> prefix= new AtomicReference<>();
+ this.store= new LazyRStore<>(rowCount, colCount, 10, directUpdater(prefix));
final ProgressMonitor m= new NullProgressMonitor();
+ prefix.set("A");
for (long colIdx= 0; colIdx < colCount; colIdx+= 33333) {
for (long rowIdx= 0; rowIdx < rowCount; rowIdx+= 20) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, "A", m);
}
for (long rowIdx= 0; rowIdx < rowCount; rowIdx+= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, "A", m);
}
for (long rowIdx= rowCount - 1; rowIdx >= 0; rowIdx-= 20) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, "A", m);
}
for (long rowIdx= rowCount - 1; rowIdx >= 0; rowIdx-= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, "A", m);
}
for (long rowIdx= 0; rowIdx < rowCount; rowIdx+= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, "A", m);
}
}
}
@Test
- public void get_directUpdate_Col() {
+ public void get_directUpdate_scrollCols() {
final long rowCount= 100000;
final long colCount= 2000000;
- this.prefix= new AtomicReference<>("A");
- this.store= new LazyRStore<>(rowCount, colCount, 10, directUpdater());
+ final AtomicReference<@Nullable String> prefix= new AtomicReference<>();
+ this.store= new LazyRStore<>(rowCount, colCount, 10, directUpdater(prefix));
final ProgressMonitor m= new NullProgressMonitor();
+ prefix.set("A");
for (long rowIdx= 0; rowIdx < rowCount; rowIdx+= 33333) {
for (long colIdx= 0; colIdx < colCount; colIdx+= 20) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, "A", m);
}
for (long colIdx= 0; colIdx < colCount; colIdx+= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, "A", m);
}
for (long colIdx= colCount - 1; colIdx >= 0; colIdx-= 20) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, "A", m);
}
for (long colIdx= colCount - 1; colIdx >= 0; colIdx-= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, "A", m);
}
for (long colIdx= 0; colIdx < colCount; colIdx+= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, "A", m);
}
}
}
@Test
- public void get_directUpdate_Random() {
+ public void get_directUpdate_random() {
final int rowCount= 2000000;
final int colCount= 2000000;
- this.prefix= new AtomicReference<>("A");
- this.store= new LazyRStore<>(rowCount, colCount, 10, directUpdater());
+ final AtomicReference<@Nullable String> prefix= new AtomicReference<>();
+ this.store= new LazyRStore<>(rowCount, colCount, 10, directUpdater(prefix));
final ProgressMonitor m= new NullProgressMonitor();
final Random rand= new Random(RANDOM_SEED);
+
+ prefix.set("A");
for (int i= 0; i < 100000; i++) {
- assertFragment(rand.nextInt(rowCount), rand.nextInt(colCount), m);
+ assertFragment(rand.nextInt(rowCount), rand.nextInt(colCount), "A", m);
}
}
@Test
- public void get_directUpdate_RandomLong() {
+ public void get_directUpdate_randomLong() {
final long rowCount= 200000000000L;
final long colCount= 20000000000L;
- this.prefix= new AtomicReference<>("A");
- this.store= new LazyRStore<>(rowCount, colCount, 10, directUpdater());
+ final AtomicReference<@Nullable String> prefix= new AtomicReference<>();
+ this.store= new LazyRStore<>(rowCount, colCount, 10, directUpdater(prefix));
final ProgressMonitor m= new NullProgressMonitor();
final Random rand= new Random(RANDOM_SEED);
final OfLong rows= rand.longs(0, rowCount).iterator();
final OfLong cols= rand.longs(0, colCount).iterator();
+
+ prefix.set("A");
for (int i= 0; i < 100000; i++) {
- assertFragment(rows.nextLong(), cols.nextLong(), m);
+ assertFragment(rows.nextLong(), cols.nextLong(), "A", m);
}
}
@Test
- public void get_noUpdate_Row() {
+ public void get_noUpdate_scrollRows() {
final long rowCount= 2000000;
final long colCount= 100000;
- this.prefix= new AtomicReference<>();
this.store= new LazyRStore<>(rowCount, colCount, 10, noUpdater());
final ProgressMonitor m= new NullProgressMonitor();
for (long colIdx= 0; colIdx < colCount; colIdx+= 33333) {
for (long rowIdx= 0; rowIdx < rowCount; rowIdx+= 20) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, null, m);
}
for (long rowIdx= 0; rowIdx < rowCount; rowIdx+= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, null, m);
}
for (long rowIdx= rowCount - 1; rowIdx >= 0; rowIdx-= 20) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, null, m);
}
for (long rowIdx= rowCount - 1; rowIdx >= 0; rowIdx-= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, null, m);
}
for (long rowIdx= 0; rowIdx < rowCount; rowIdx+= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, null, m);
}
}
}
@Test
- public void get_noUpdate_Col() {
+ public void get_noUpdate_scrollCols() {
final long rowCount= 100000;
final long colCount= 2000000;
- this.prefix= new AtomicReference<>();
this.store= new LazyRStore<>(rowCount, colCount, 10, noUpdater());
final ProgressMonitor m= new NullProgressMonitor();
for (long rowIdx= 0; rowIdx < rowCount; rowIdx+= 33333) {
for (long colIdx= 0; colIdx < colCount; colIdx+= 20) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, null, m);
}
for (long colIdx= 0; colIdx < colCount; colIdx+= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, null, m);
}
for (long colIdx= colCount - 1; colIdx >= 0; colIdx-= 20) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, null, m);
}
for (long colIdx= colCount - 1; colIdx >= 0; colIdx-= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, null, m);
}
for (long colIdx= 0; colIdx < colCount; colIdx+= 1000) {
- assertFragment(rowIdx, colIdx, m);
+ assertFragment(rowIdx, colIdx, null, m);
}
}
}
@Test
- public void get_noUpdate_Random() {
+ public void get_noUpdate_random() {
final int rowCount= 2000000;
final int colCount= 2000000;
- this.prefix= new AtomicReference<>();
this.store= new LazyRStore<>(rowCount, colCount, 10, noUpdater());
final ProgressMonitor m= new NullProgressMonitor();
final Random rand= new Random(RANDOM_SEED);
+
for (int i= 0; i < 100000; i++) {
- assertFragment(rand.nextInt(rowCount), rand.nextInt(colCount), m);
+ assertFragment(rand.nextInt(rowCount), rand.nextInt(colCount), null, m);
}
}
@Test
- public void get_noUpdate_RandomLong() {
+ public void get_noUpdate_randomLong() {
final long rowCount= 200000000000L;
final long colCount= 20000000000L;
- this.prefix= new AtomicReference<>();
this.store= new LazyRStore<>(rowCount, colCount, 10, noUpdater());
final ProgressMonitor m= new NullProgressMonitor();
final Random rand= new Random(RANDOM_SEED);
final OfLong rows= rand.longs(0, rowCount).iterator();
final OfLong cols= rand.longs(0, colCount).iterator();
+
for (int i= 0; i < 100000; i++) {
- assertFragment(rows.nextLong(), cols.nextLong(), m);
+ assertFragment(rows.nextLong(), cols.nextLong(), null, m);
}
}
- private Updater<TestElement> directUpdater() {
+ @Test
+ public void get_ensureCached() {
+ final long rowCount= 100000;
+ final long colCount= 2000000;
+ final AtomicReference<@Nullable String> prefix= new AtomicReference<>();
+ this.store= new LazyRStore<>(rowCount, colCount, 10, directUpdater(prefix));
+ final ProgressMonitor m= new NullProgressMonitor();
+
+ prefix.set("A");
+ assertFragment(10, 200, "A", m);
+
+ prefix.set("B");
+ for (int i= 0; i < 9; i++) {
+ assertFragment(10000, i * 10000, "B", m);
+ }
+
+ assertFragment(10, 200, "A", m);
+ }
+
+
+ private Updater<TestElement> directUpdater(final AtomicReference<@Nullable String> prefix) {
return new LazyRStore.Updater<LazyRStoreTest.TestElement>() {
- private final AtomicReference<@Nullable String> prefix= LazyRStoreTest.this.prefix;
@Override
public void scheduleUpdate(final LazyRStore<TestElement> store,
final @Nullable RDataAssignment assignment, final @Nullable Fragment<TestElement> fragment,
final int flags, final ProgressMonitor m) {
if (fragment != null) {
store.updateFragment(fragment,
- new TestElement(nonNullAssert(this.prefix.get()), fragment) );
+ new TestElement(nonNullAssert(prefix.get()), fragment) );
}
}
};
@@ -274,8 +295,8 @@
}
private void assertFragment(final long rowIdx, final long colIdx,
+ final @Nullable String expectedPrefix,
final ProgressMonitor m) {
- final String expectedPrefix= this.prefix.get();
final String id= String.format("[%1$s,%2$s]", rowIdx, colIdx);
try {
final Fragment<TestElement> fragment= this.store.getFragment(rowIdx, colIdx, 0, m);