Commits

Miki Tebeka committed dd5cd68

Working

  • Participants
  • Parent commits 5dc57ef

Comments (0)

Files changed (2)

 }
 
 func free(stemmer *Stemmer) {
-	C.sb_stemmer_delete(stemmer.stemmer)
+	if stemmer.stemmer != nil {
+		C.sb_stemmer_delete(stemmer.stemmer)
+		stemmer.stemmer = nil
+	}
 }
 
 // New creates a new stemmer for lang
 	return stemmer, nil
 }
 
+// Lang return the stemmer language
 func (stemmer *Stemmer) Lang() string {
 	return stemmer.lang
 }
 
-/*
 // Stem returns them stem of word (e.g. running -> run)
 func (stemmer *Stemmer) Stem(word string) string {
-	cstr := C.sb_stemmer_stem(stemmer.stemmer, C.CString(word), C.int(len(word)))
-	return C.GoString(cstr)
+	ptr := unsafe.Pointer(C.CString(word))
+	w := (*C.sb_symbol)(ptr)
+	res := unsafe.Pointer(C.sb_stemmer_stem(stemmer.stemmer, w, C.int(len(word))))
+	size := C.sb_stemmer_length(stemmer.stemmer)
+
+	buf := C.GoBytes(res, size)
+	return string(buf)
 }
-*/
 
 // List returns the list of languages supported by snowball
 func List() []string {

File snowball_test.go

 	"testing"
 )
 
-/*
-func TestStem(t *testing.T) {
-	stemmer = New("en")
-	word = "running"
-	stemmed = stemmer.Stem(word)
-	if stemmed != "run" {
-		t.Fatalf("stem(%s) -> '%s' (expected 'run')", word, stemmed)
-	}
-}
-*/
-
 func TestList(t *testing.T) {
 	if len(List()) == 0 {
 		t.Fatal("No langs")
 		t.Fatal("dude, we have a klingon stemmer!")
 	}
 }
+
+
+func check(t *testing.T, lang, word, stem string) {
+	stemmer, err := New(lang)
+	if err != nil {
+		t.Fatalf("can't create stemmer for %s - %s", lang, err)
+	}
+
+	w := stemmer.Stem(word)
+	if w != stem {
+		t.Fatalf("error stemming '%s', got %s instead of '%s'", word, w, stem)
+	}
+}
+
+
+func TestStemEn(t *testing.T) {
+	check(t, "english", "running", "run")
+}
+
+func TestStemDe(t *testing.T) {
+	check(t, "german", "käuflich", "kauflich")
+}