summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-05-05 13:16:24 +0200
committerJon Bratseth <bratseth@oath.com>2018-05-05 13:16:24 +0200
commit260713e760233ba53037a34232323853cdc74873 (patch)
treed1210c2689c5c5b45156fe7c87d0fbddd0310e62 /container-search
parente011ec27883963cbb61a542c0dba5236a968720d (diff)
More tests
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java27
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java48
2 files changed, 60 insertions, 15 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
index e6cb3b3e18a..adc69f6f681 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
@@ -202,6 +202,19 @@ public class FastHit extends Hit {
return value;
}
+ @Override
+ public Object setField(String name, Object value) {
+ if (removedFields != null) {
+ if (removedFields.remove(name)) {
+ if (removedFields.isEmpty())
+ removedFields = null;
+ }
+ }
+ Object oldValue = super.setField(name, value);
+ if (oldValue != null) return oldValue;
+ return getSummaryValue(name);
+ }
+
/** Returns the fields of this as a read-only map. This is more costly than fieldIterator() */
@Override
public Map<String, Object> fields() {
@@ -228,6 +241,8 @@ public class FastHit extends Hit {
@Override
public void clearFields() {
summaries.clear();
+ if (removedFields != null)
+ removedFields = null;
super.clearFields();
}
@@ -459,6 +474,7 @@ public class FastHit extends Hit {
}
private Set<String> createSet() {
+ if (this.fieldSet != null) return this.fieldSet;
if ( ! hit.hasFields() && hit.summaries.isEmpty()) return Collections.emptySet(); // shortcut
Set<String> fields = new HashSet<>();
@@ -525,14 +541,13 @@ public class FastHit extends Hit {
private final FastHit hit;
private final Iterator<Map.Entry<String, Inspector>> fieldIterator;
- /**
- * The next value or null if none, eagerly read because we need to skip removed and overwritten values
- */
+ /** The next value or null if none, eagerly read because we need to skip removed and overwritten values */
private Map.Entry<String, Inspector> next;
SummaryDataIterator(FastHit hit, Iterator<Map.Entry<String, Inspector>> fieldIterator) {
this.hit = hit;
this.fieldIterator = fieldIterator;
+ advanceNext();
}
@Override
@@ -556,7 +571,7 @@ public class FastHit extends Hit {
next = fieldIterator.next();
if ( ! hit.hasField(next.getKey()) &&
! (hit.removedFields != null && hit.removedFields.contains(next.getKey())))
- break;
+ return;
}
next = null;
}
@@ -613,9 +628,7 @@ public class FastHit extends Hit {
}
@Override
- protected String toValue(Map.Entry<String, Inspector> field) {
- return field.toString();
- }
+ protected String toValue(Map.Entry<String, Inspector> field) { return field.getKey(); }
}
}
diff --git a/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java b/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java
index d36d33a0f33..3a5f36c3033 100644
--- a/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java
@@ -138,9 +138,11 @@ public class SlimeSummaryTestCase {
public void testFieldAccessAPI() {
DocsumDefinitionSet set = createDocsumDefinitionSet(summary_cf);
FastHit hit = new FastHit();
+ Map<String, Object> expected = new HashMap<>();
+
+ assertFields(expected, hit);
set.lazyDecode("default", partialSummary1(), hit);
- Map<String, Object> expected = new HashMap<>();
expected.put("integer_field", 4);
expected.put("short_field", (short) 2);
assertFields(expected, hit);
@@ -150,19 +152,49 @@ public class SlimeSummaryTestCase {
expected.put("double_field", 8.75D);
assertFields(expected, hit);
- // TODO: Things we need to check that we test:
- // - removing, then adding a field
+ hit.removeField("short_field");
+ expected.remove("short_field");
+ assertFields(expected, hit);
+
+ hit.setField("string", "hello");
+ expected.put("string", "hello");
+ assertFields(expected, hit);
+
+ hit.setField("short_field", 3.8F);
+ expected.put("short_field", 3.8F);
+ assertFields(expected, hit);
+
+ hit.removeField("string");
+ expected.remove("string");
+ assertFields(expected, hit);
+
+ hit.removeField("integer_field");
+ hit.removeField("double_field");
+ expected.remove("integer_field");
+ expected.remove("double_field");
+ assertFields(expected, hit);
+
+ hit.clearFields();
+ expected.clear();
+ assertFields(expected, hit);
+
+ // TODO:
// - removing from field and field name iterators
- // - removing fields, both summary and map, then iterating
// - removing all fields in some summary, then iterating
- // - adding a field from the iterator
// - Ensure no overlapping fields between summaries?
+ // - Remove some field which is then added from a summary?
}
/** Asserts that the expected fields are what is returned from every access method of Hit */
private void assertFields(Map<String, Object> expected, Hit hit) {
// fieldKeys
+ int fieldNameIteratorFieldCount = 0;
+ for (Iterator<String> i = hit.fieldKeys().iterator(); i.hasNext(); ) {
+ fieldNameIteratorFieldCount++;
+ assertTrue(expected.containsKey(i.next()));
+ }
+ assertEquals(expected.size(), fieldNameIteratorFieldCount);
assertEquals(expected.keySet(), hit.fieldKeys());
// getField
for (Map.Entry<String, Object> field : expected.entrySet())
@@ -170,13 +202,13 @@ public class SlimeSummaryTestCase {
// fields
assertEquals(expected, hit.fields());
// fieldIterator
- int iteratorFieldCount = 0;
+ int fieldIteratorFieldCount = 0;
for (Iterator<Map.Entry<String, Object>> i = hit.fieldIterator(); i.hasNext(); ) {
- iteratorFieldCount++;
+ fieldIteratorFieldCount++;
Map.Entry<String, Object> field = i.next();
assertEquals(field.getValue(), expected.get(field.getKey()));
}
- assertEquals(expected.size(), iteratorFieldCount);
+ assertEquals(expected.size(), fieldIteratorFieldCount);
}
private byte[] emptySummary() {