diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-05-04 15:31:21 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-05-04 15:31:21 +0200 |
commit | e011ec27883963cbb61a542c0dba5236a968720d (patch) | |
tree | 0b965afd0a53ec7fd549a816c5689b1a20f42308 /container-search | |
parent | 40c5ae419aeb153492e2fa64bcd00e37df976e1d (diff) |
More tests
Diffstat (limited to 'container-search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java | 25 | ||||
-rw-r--r-- | container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java | 72 |
2 files changed, 88 insertions, 9 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 f3232bd2d2a..e6cb3b3e18a 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 @@ -441,6 +441,23 @@ public class FastHit extends Hit { return hit.fieldNameIterator(); } + @Override + public int hashCode() { + return createSet().hashCode(); + } + + @Override + public boolean equals(Object o) { + if (o == this) return true; + if ( ! (o instanceof Set)) return false; + return createSet().equals(o); + } + + @Override + public String toString() { + return createSet().toString(); + } + private Set<String> createSet() { if ( ! hit.hasFields() && hit.summaries.isEmpty()) return Collections.emptySet(); // shortcut @@ -450,7 +467,8 @@ public class FastHit extends Hit { for (SummaryData summaryData : hit.summaries) summaryData.data.traverse((ObjectTraverser)(name, __) -> fields.add(name)); - fields.removeAll(hit.removedFields); + if (hit.removedFields != null) + fields.removeAll(hit.removedFields); this.fieldSet = fields; @@ -536,7 +554,8 @@ public class FastHit extends Hit { private void advanceNext() { while (fieldIterator.hasNext()) { next = fieldIterator.next(); - if (!hit.hasField(next.getKey()) && !hit.removedFields.contains(next.getKey())) + if ( ! hit.hasField(next.getKey()) && + ! (hit.removedFields != null && hit.removedFields.contains(next.getKey()))) break; } next = null; @@ -633,6 +652,8 @@ public class FastHit extends Hit { throw new IllegalStateException(); if ( ! ( currentIterator instanceof SummaryData.SummaryDataIterator)) currentIterator.remove(); // remove from the map + if (hit.removedFields == null) + hit.removedFields = new HashSet<>(); hit.removedFields.add(nameOf(previousReturned)); previousReturned = null; } 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 06431fcdae0..d36d33a0f33 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 @@ -6,12 +6,16 @@ import com.yahoo.container.search.LegacyEmulationConfig; import com.yahoo.prelude.hitfield.RawData; import com.yahoo.prelude.hitfield.XMLString; import com.yahoo.prelude.hitfield.JSONString; +import com.yahoo.search.result.Hit; import com.yahoo.search.result.NanNumber; import com.yahoo.search.result.StructuredData; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; import com.yahoo.slime.BinaryFormat; import com.yahoo.slime.Cursor; @@ -21,8 +25,10 @@ import com.yahoo.tensor.serialization.TypedBinaryFormat; import org.junit.Test; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; public class SlimeSummaryTestCase { @@ -128,15 +134,51 @@ public class SlimeSummaryTestCase { assertEquals(tensor2, hit.getField("tensor_field2")); } - // TODO: Things we need to check that we test: - // - removing, then adding a field - // - 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 - // - iterating with fields set and multiple summaries, where some summaries have overlapping fields (TODO: Or ensure no overlapping fields?) + @Test + public void testFieldAccessAPI() { + DocsumDefinitionSet set = createDocsumDefinitionSet(summary_cf); + FastHit hit = new FastHit(); + + 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); + + set.lazyDecode("default", partialSummary2(), hit); + expected.put("float_field", 4.5F); + expected.put("double_field", 8.75D); + assertFields(expected, hit); + + // TODO: Things we need to check that we test: + // - removing, then adding a field + // - 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? + } + /** 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 + assertEquals(expected.keySet(), hit.fieldKeys()); + // getField + for (Map.Entry<String, Object> field : expected.entrySet()) + assertEquals(field.getValue(), hit.getField(field.getKey())); + // fields + assertEquals(expected, hit.fields()); + // fieldIterator + int iteratorFieldCount = 0; + for (Iterator<Map.Entry<String, Object>> i = hit.fieldIterator(); i.hasNext(); ) { + iteratorFieldCount++; + Map.Entry<String, Object> field = i.next(); + assertEquals(field.getValue(), expected.get(field.getKey())); + } + assertEquals(expected.size(), iteratorFieldCount); + } + private byte[] emptySummary() { Slime slime = new Slime(); slime.setObject(); @@ -149,6 +191,22 @@ public class SlimeSummaryTestCase { return encode((slime)); } + private byte[] partialSummary1() { + Slime slime = new Slime(); + Cursor docsum = slime.setObject(); + docsum.setLong("integer_field", 4); + docsum.setLong("short_field", 2); + return encode((slime)); + } + + private byte[] partialSummary2() { + Slime slime = new Slime(); + Cursor docsum = slime.setObject(); + docsum.setDouble("float_field", 4.5); + docsum.setDouble("double_field", 8.75); + return encode((slime)); + } + private byte[] fullSummary(Tensor tensor1, Tensor tensor2) { Slime slime = new Slime(); Cursor docsum = slime.setObject(); |