diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-05-05 13:16:24 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-05-05 13:16:24 +0200 |
commit | 260713e760233ba53037a34232323853cdc74873 (patch) | |
tree | d1210c2689c5c5b45156fe7c87d0fbddd0310e62 /container-search | |
parent | e011ec27883963cbb61a542c0dba5236a968720d (diff) |
More tests
Diffstat (limited to 'container-search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java | 27 | ||||
-rw-r--r-- | container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java | 48 |
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() { |