#include <sortidx.h>
#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);
+ 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);
- YAZ_CHECK_EQ(zebra_sort_read(si, read_buf), 0);
+ 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)
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)
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);
}
}