Customize and test Collector Go bindings.

*   Custom binding for SortCollector's PopMatchDocs.
*   Tests for BitCollector, OffsetCollector, SortCollector


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/40a1eecb
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/40a1eecb
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/40a1eecb

Branch: refs/heads/master
Commit: 40a1eecbec1b212d6d2b7742bfeba7d546467d15
Parents: d850571
Author: Marvin Humphrey <[email protected]>
Authored: Fri Sep 11 19:21:05 2015 -0700
Committer: Marvin Humphrey <[email protected]>
Committed: Tue Sep 15 15:54:51 2015 -0700

----------------------------------------------------------------------
 go/build.go            |  4 ++++
 go/lucy/search.go      | 14 ++++++++++++++
 go/lucy/search_test.go | 38 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 56 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/40a1eecb/go/build.go
----------------------------------------------------------------------
diff --git a/go/build.go b/go/build.go
index 11615aa..15fbd21 100644
--- a/go/build.go
+++ b/go/build.go
@@ -202,6 +202,10 @@ func specClasses(parcel *cfc.Parcel) {
        sortSpecBinding.SetSuppressCtor(true)
        sortSpecBinding.SpecMethod("Get_Rules", "GetRules() []SortRule")
        sortSpecBinding.Register()
+
+       sortCollBinding := cfc.NewGoClass(parcel, 
"Lucy::Search::Collector::SortCollector")
+       sortCollBinding.SpecMethod("Pop_Match_Docs", "PopMatchDocs() 
[]MatchDoc")
+       sortCollBinding.Register()
 }
 
 func build() {

http://git-wip-us.apache.org/repos/asf/lucy/blob/40a1eecb/go/lucy/search.go
----------------------------------------------------------------------
diff --git a/go/lucy/search.go b/go/lucy/search.go
index 2723265..b47b340 100644
--- a/go/lucy/search.go
+++ b/go/lucy/search.go
@@ -18,6 +18,7 @@ package lucy
 
 /*
 #include "Lucy/Search/Collector.h"
+#include "Lucy/Search/Collector/SortCollector.h"
 #include "Lucy/Search/Hits.h"
 #include "Lucy/Search/IndexSearcher.h"
 #include "Lucy/Search/Query.h"
@@ -326,3 +327,16 @@ func newMockMatcher(docIDs []int32, scores []float32) 
MockMatcher {
        matcher := C.lucy_MockMatcher_new(docIDsCF, blob)
        return WRAPMockMatcher(unsafe.Pointer(matcher))
 }
+
+func (sc *SortCollectorIMP) PopMatchDocs() []MatchDoc {
+       self := (*C.lucy_SortCollector)(clownfish.Unwrap(sc, "sc"))
+       matchDocsC := C.LUCY_SortColl_Pop_Match_Docs(self)
+       defer C.cfish_decref(unsafe.Pointer(matchDocsC))
+       length := int(C.CFISH_Vec_Get_Size(matchDocsC))
+       slice := make([]MatchDoc, length)
+       for i := 0; i < length; i++ {
+               elem := 
C.cfish_incref(unsafe.Pointer(C.CFISH_Vec_Fetch(matchDocsC, C.size_t(i))))
+               slice[i] = WRAPMatchDoc(unsafe.Pointer(elem))
+       }
+       return slice
+}

http://git-wip-us.apache.org/repos/asf/lucy/blob/40a1eecb/go/lucy/search_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/search_test.go b/go/lucy/search_test.go
index 6d0c42d..d084f53 100644
--- a/go/lucy/search_test.go
+++ b/go/lucy/search_test.go
@@ -529,3 +529,41 @@ func TestSpanBasics(t *testing.T) {
                t.Errorf("Set/Get weight: %f", got)
        }
 }
+
+func TestBitCollectorBasics(t *testing.T) {
+       index := createTestIndex("a", "b", "c", "a")
+       searcher, _ := OpenIndexSearcher(index)
+       bitVec := NewBitVector(5)
+       collector := NewBitCollector(bitVec)
+       searcher.Collect(NewTermQuery("content", "a"), collector)
+       expected := []bool{false, true, false, false, true, false, false, false}
+       if got := bitVec.ToArray(); !reflect.DeepEqual(got,expected) {
+               t.Errorf("Unexpected result set: %v", got)
+       }
+}
+
+func TestOffsetCollectorBasics(t *testing.T) {
+       index := createTestIndex("a", "b", "c")
+       searcher, _ := OpenIndexSearcher(index)
+       bitVec := NewBitVector(64)
+       bitColl := NewBitCollector(bitVec)
+       offsetColl := NewOffsetCollector(bitColl, 40)
+       searcher.Collect(NewTermQuery("content", "b"), offsetColl)
+       if got := bitVec.NextHit(0); got != 42 {
+               t.Errorf("Unexpected docID: %d", got)
+       }
+}
+
+func TestSortCollectorBasics(t *testing.T) {
+       index := createTestIndex("a", "b", "c", "a")
+       searcher, _ := OpenIndexSearcher(index)
+       collector := NewSortCollector(nil, nil, 1)
+       searcher.Collect(NewTermQuery("content", "a"), collector)
+       if totalHits := collector.GetTotalHits(); totalHits != 2 {
+               t.Errorf("Unexpected TotalHits: %d", totalHits)
+       }
+       matchDocs := collector.PopMatchDocs()
+       if docID := matchDocs[0].GetDocID(); docID != 1 {
+               t.Errorf("Weird MatchDoc: %d", docID)
+       }
+}

Reply via email to