lucy-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mar...@apache.org
Subject [11/13] lucy git commit: Tune and test Go bindings for Doc.
Date Tue, 24 Nov 2015 23:38:33 GMT
Tune and test Go bindings for Doc.


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

Branch: refs/heads/master
Commit: 91dd3894b16cc3f5140c2ac398d193a59f4b19a0
Parents: d5063a5
Author: Marvin Humphrey <marvin@rectangular.com>
Authored: Mon Nov 16 17:15:05 2015 -0800
Committer: Marvin Humphrey <marvin@rectangular.com>
Committed: Fri Nov 20 19:00:31 2015 -0800

----------------------------------------------------------------------
 go/build.go              |  6 ++++
 go/lucy/document.go      | 21 ++++++++++++
 go/lucy/document_test.go | 74 +++++++++++++++++++++++++++++++++++++++++++
 go/lucy/lucy.go          |  2 +-
 4 files changed, 102 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/91dd3894/go/build.go
----------------------------------------------------------------------
diff --git a/go/build.go b/go/build.go
index 3b6fc68..8db2109 100644
--- a/go/build.go
+++ b/go/build.go
@@ -159,6 +159,12 @@ func specClasses(parcel *cfc.Parcel) {
 	polyAnalyzerBinding.SetSuppressCtor(true)
 	polyAnalyzerBinding.Register()
 
+	docBinding := cfc.NewGoClass(parcel, "Lucy::Document::Doc")
+	docBinding.SpecMethod("", "GetFields() map[string]interface{}")
+	docBinding.SpecMethod("", "SetFields(map[string]interface{})")
+	docBinding.SpecMethod("Field_Names", "FieldNames() []string")
+	docBinding.Register()
+
 	indexerBinding := cfc.NewGoClass(parcel, "Lucy::Index::Indexer")
 	indexerBinding.SpecMethod("", "Close() error")
 	indexerBinding.SpecMethod("Add_Doc", "AddDoc(doc interface{}) error")

http://git-wip-us.apache.org/repos/asf/lucy/blob/91dd3894/go/lucy/document.go
----------------------------------------------------------------------
diff --git a/go/lucy/document.go b/go/lucy/document.go
index 1221810..1d8c289 100644
--- a/go/lucy/document.go
+++ b/go/lucy/document.go
@@ -48,3 +48,24 @@ func fetchDocFields(d *C.lucy_Doc) map[string]interface{} {
 	}
 	return fieldsGo
 }
+
+func (d *DocIMP) GetFields() map[string]interface{} {
+	self := (*C.lucy_Doc)(clownfish.Unwrap(d, "d"))
+	return fetchDocFields(self)
+}
+
+func (d *DocIMP) SetFields(fields map[string]interface{}) {
+	self := (*C.lucy_Doc)(clownfish.Unwrap(d, "d"))
+	ivars := C.lucy_Doc_IVARS(self)
+	oldID := uintptr(unsafe.Pointer(ivars.fields))
+	newFieldsID := registry.store(fields)
+	ivars.fields = unsafe.Pointer(newFieldsID)
+	registry.delete(oldID)
+}
+
+func (d *DocIMP) FieldNames() []string {
+	self := (*C.lucy_Doc)(unsafe.Pointer(d.TOPTR()))
+	fieldsCF := C.LUCY_Doc_Field_Names(self)
+	defer C.cfish_decref(unsafe.Pointer(fieldsCF))
+	return vecToStringSlice(fieldsCF)
+}

http://git-wip-us.apache.org/repos/asf/lucy/blob/91dd3894/go/lucy/document_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/document_test.go b/go/lucy/document_test.go
new file mode 100644
index 0000000..2cf6313
--- /dev/null
+++ b/go/lucy/document_test.go
@@ -0,0 +1,74 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package lucy
+
+import "testing"
+import "reflect"
+import "git-wip-us.apache.org/repos/asf/lucy-clownfish.git/runtime/go/clownfish"
+
+func TestDocMisc(t *testing.T) {
+	doc := NewDoc(1)
+	if got := doc.GetDocID(); got != 1 {
+		t.Errorf("GetDocID: %d", got)
+	}
+	doc.SetDocID(42)
+	if got := doc.GetDocID(); got != 42 {
+		t.Errorf("Set/GetDocID: %d", got)
+	}
+	fields := map[string]interface{}{"content": "foo"}
+	doc.SetFields(fields)
+	if got, ok := doc.Extract("content").(string); !ok || got != "foo" {
+		t.Errorf("Extract: %v", got)
+	}
+	doc.Store("content", "bar")
+	retrievedFields := doc.GetFields()
+	if got, ok := retrievedFields["content"].(string); !ok || got != "bar" {
+		t.Errorf("Store/GetFields: %v", got)
+	}
+	if got := doc.GetSize(); got != 1 {
+		t.Errorf("GetSize: %d", got)
+	}
+	if got := doc.FieldNames(); !reflect.DeepEqual(got, []string{"content"}) {
+		t.Errorf("FieldNames: %v", got)
+	}
+	checkDocSerialize(t, doc)
+	checkdocDumpLoad(t, doc)
+}
+
+func checkDocSerialize(t *testing.T, doc Doc) {
+	folder := NewRAMFolder("")
+	outStream, _ := folder.OpenOut("foo")
+	doc.serialize(outStream)
+	outStream.Close()
+	inStream, _ := folder.OpenIn("foo")
+	dupe := clownfish.GetClass(doc).MakeObj().(Doc).deserialize(inStream)
+	if !doc.Equals(dupe) {
+		t.Errorf("Unsuccessful serialization round trip -- expected '%v', got '%v'",
+				 doc.ToString(), dupe.ToString())
+	}
+}
+
+func checkdocDumpLoad(t *testing.T, doc Doc) {
+	t.Skip("Dump/Load are TODO")
+	return
+	dupe := clownfish.GetClass(doc).MakeObj().(Doc)
+	dupe = dupe.load(doc.dump()).(Doc)
+	if !doc.Equals(dupe) {
+		t.Errorf("Unsuccessful dump/load round trip -- expected '%v', got '%v'",
+				 doc.ToString(), dupe.ToString())
+	}
+}

http://git-wip-us.apache.org/repos/asf/lucy/blob/91dd3894/go/lucy/lucy.go
----------------------------------------------------------------------
diff --git a/go/lucy/lucy.go b/go/lucy/lucy.go
index 585a192..03307bb 100644
--- a/go/lucy/lucy.go
+++ b/go/lucy/lucy.go
@@ -273,7 +273,7 @@ func GOLUCY_Doc_init(d *C.lucy_Doc, fields unsafe.Pointer, docID C.int32_t)
*C.l
 
 //export GOLUCY_Doc_Set_Fields
 func GOLUCY_Doc_Set_Fields(d *C.lucy_Doc, fields unsafe.Pointer) {
-	panic(clownfish.NewErr("Set_Fields unsupported in Go bindings"))
+	panic(clownfish.NewErr("Set_Fields unsupported from C-space in Go"))
 }
 
 //export GOLUCY_Doc_Get_Size


Mime
View raw message