X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=test%2Fapi%2Ftest_sortidx.c;h=908fd8a78cc1c18b4df5b4d3150f43b3ec2acdb5;hb=250de4ed23a44f5eb3552db317eef0d0fbe3265c;hp=5640ce66daa30277a8a910d1ebad498eb7a28afa;hpb=ce556bc293c5eed60090acaf82cc668d333abd7b;p=idzebra-moved-to-github.git diff --git a/test/api/test_sortidx.c b/test/api/test_sortidx.c index 5640ce6..908fd8a 100644 --- a/test/api/test_sortidx.c +++ b/test/api/test_sortidx.c @@ -1,5 +1,5 @@ /* This file is part of the Zebra server. - Copyright (C) 1995-2008 Index Data + Copyright (C) 2004-2013 Index Data Zebra is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -17,36 +17,100 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#if HAVE_CONFIG_H +#include +#endif #include #include #include "testlib.h" +static void sort_add_cstr(zebra_sort_index_t si, const char *str, + zint section_id) +{ + WRBUF w = wrbuf_alloc(); + wrbuf_puts(w, str); + wrbuf_putc(w, '\0'); + zebra_sort_add(si, section_id, w); + wrbuf_destroy(w); +} + static void tst1(zebra_sort_index_t si) { zint sysno = 12; /* just some sysno */ int my_type = 2; /* just some type ID */ - char read_buf[SORT_IDX_ENTRYSIZE]; + WRBUF w = wrbuf_alloc(); zebra_sort_type(si, my_type); zebra_sort_sysno(si, sysno); - YAZ_CHECK_EQ(zebra_sort_read(si, read_buf), 0); + YAZ_CHECK_EQ(zebra_sort_read(si, 0, w), 0); - zebra_sort_add(si, "abcde1", 6); + sort_add_cstr(si, "abcde1", 0); zebra_sort_sysno(si, sysno); - YAZ_CHECK_EQ(zebra_sort_read(si, read_buf), 1); - YAZ_CHECK(!strcmp(read_buf, "abcde1")); + YAZ_CHECK_EQ(zebra_sort_read(si, 0, w), 1); + YAZ_CHECK(!strcmp(wrbuf_cstr(w), "abcde1")); zebra_sort_sysno(si, sysno+1); - YAZ_CHECK_EQ(zebra_sort_read(si, read_buf), 0); + YAZ_CHECK_EQ(zebra_sort_read(si, 0, w), 0); zebra_sort_sysno(si, sysno-1); - YAZ_CHECK_EQ(zebra_sort_read(si, read_buf), 0); + YAZ_CHECK_EQ(zebra_sort_read(si, 0, w), 0); + + zebra_sort_sysno(si, sysno); + zebra_sort_delete(si, 0); + YAZ_CHECK_EQ(zebra_sort_read(si, 0, w), 0); + + zebra_sort_type(si, my_type); + + zebra_sort_sysno(si, sysno); + YAZ_CHECK_EQ(zebra_sort_read(si, 0, w), 0); + + wrbuf_rewind(w); + sort_add_cstr(si, "abcde1", 0); zebra_sort_sysno(si, sysno); - zebra_sort_delete(si); - YAZ_CHECK_EQ(zebra_sort_read(si, read_buf), 0); + YAZ_CHECK_EQ(zebra_sort_read(si, 0, w), 1); + YAZ_CHECK(!strcmp(wrbuf_cstr(w), "abcde1")); + + zebra_sort_sysno(si, sysno); + zebra_sort_delete(si, 0); + + wrbuf_destroy(w); +} + +static void tst2(zebra_sort_index_t si) +{ + zint sysno = 15; /* just some sysno */ + int my_type = 2; /* just some type ID */ + int i; + + zebra_sort_type(si, my_type); + + for (sysno = 1; sysno < 50; sysno++) + { + zint input_section_id = 12345; + zint output_section_id = 0; + WRBUF w1 = wrbuf_alloc(); + WRBUF w2 = wrbuf_alloc(); + zebra_sort_sysno(si, sysno); + YAZ_CHECK_EQ(zebra_sort_read(si, 0, w2), 0); + + for (i = 0; i < 600; i++) /* 600 * 6 < max size =4K */ + wrbuf_write(w1, "12345", 6); + + zebra_sort_add(si, input_section_id, w1); + + zebra_sort_sysno(si, sysno); + + YAZ_CHECK_EQ(zebra_sort_read(si, &output_section_id, w2), 1); + + YAZ_CHECK_EQ(wrbuf_len(w1), wrbuf_len(w2)); + YAZ_CHECK(!memcmp(wrbuf_buf(w1), wrbuf_buf(w2), wrbuf_len(w2))); + YAZ_CHECK_EQ(input_section_id, output_section_id); + wrbuf_destroy(w1); + wrbuf_destroy(w2); + } } static void tst(int argc, char **argv) @@ -58,6 +122,17 @@ static void tst(int argc, char **argv) if (bfs) { bf_reset(bfs); + si = zebra_sort_open(bfs, 1, ZEBRA_SORT_TYPE_FLAT); + YAZ_CHECK(si); + if (si) + { + tst1(si); + zebra_sort_close(si); + } + } + if (bfs) + { + bf_reset(bfs); si = zebra_sort_open(bfs, 1, ZEBRA_SORT_TYPE_ISAMB); YAZ_CHECK(si); if (si) @@ -66,15 +141,15 @@ static void tst(int argc, char **argv) zebra_sort_close(si); } } - if (bfs) { bf_reset(bfs); - si = zebra_sort_open(bfs, 1, ZEBRA_SORT_TYPE_FLAT); + si = zebra_sort_open(bfs, 1, ZEBRA_SORT_TYPE_MULTI); YAZ_CHECK(si); if (si) { tst1(si); + tst2(si); zebra_sort_close(si); } } @@ -86,6 +161,7 @@ TL_MAIN /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab