New libstemmer test
[yaz-moved-to-github.git] / test / test_libstemmer.c
diff --git a/test/test_libstemmer.c b/test/test_libstemmer.c
new file mode 100644 (file)
index 0000000..e657050
--- /dev/null
@@ -0,0 +1,79 @@
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2011 Index Data
+ * See the file LICENSE for details.
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <yaz/stemmer.h>
+#include <yaz/test.h>
+
+int test_stemmer_stem(yaz_stemmer_p stemmer, const char* to_stem, const char *expected) 
+{
+    struct icu_buf_utf16 *src  = icu_buf_utf16_create(0);
+    struct icu_buf_utf16 *dst  = icu_buf_utf16_create(0);
+    struct icu_buf_utf8  *dst8 = icu_buf_utf8_create(0);
+
+    UErrorCode status; 
+    const char *result;
+    icu_utf16_from_utf8_cstr(src, to_stem, &status);
+    yaz_stemmer_stem(stemmer, dst, src, &status); 
+    /* Assume fail */
+    int rc = 0;
+    if (status == U_ZERO_ERROR) {
+        icu_utf16_to_utf8(dst8, dst, &status);
+        result = icu_buf_utf8_to_cstr(dst8);
+        rc = strcmp(result, expected) == 0;
+    }
+    icu_buf_utf8_destroy(dst8);
+    icu_buf_utf16_destroy(src);
+    icu_buf_utf16_destroy(dst);
+    return rc;
+}
+
+
+
+static void tst(void)
+{
+    UErrorCode status;
+    //== U_ZERO_ERROR; 
+    yaz_stemmer_p stemmer = yaz_stemmer_create("en", "porter", &status);
+    YAZ_CHECK(stemmer); 
+
+    /* fail  */
+    YAZ_CHECK(test_stemmer_stem(stemmer, "beer", "water") == 0 ); 
+
+    /* Same */
+    YAZ_CHECK(test_stemmer_stem(stemmer, "adadwwr", "adadwwr")); 
+
+    /* Remove S */
+    YAZ_CHECK(test_stemmer_stem(stemmer, "beers", "beer")); 
+    YAZ_CHECK(test_stemmer_stem(stemmer, "persons", "person")); 
+
+    /* Remove s and ing  */
+    YAZ_CHECK(test_stemmer_stem(stemmer, "runs", "run")); 
+    YAZ_CHECK(test_stemmer_stem(stemmer, "running", "run")); 
+
+    yaz_stemmer_destroy(stemmer);
+}
+
+int main (int argc, char **argv)
+{
+    YAZ_CHECK_INIT(argc, argv);
+    tst();
+    YAZ_CHECK_TERM;
+}
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+