isomorfeus-ferret 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (222) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +612 -0
  3. data/README.md +44 -0
  4. data/ext/isomorfeus_ferret_ext/benchmark.c +223 -0
  5. data/ext/isomorfeus_ferret_ext/benchmark.h +45 -0
  6. data/ext/isomorfeus_ferret_ext/benchmarks_all.h +25 -0
  7. data/ext/isomorfeus_ferret_ext/bm_bitvector.c +123 -0
  8. data/ext/isomorfeus_ferret_ext/bm_hash.c +118 -0
  9. data/ext/isomorfeus_ferret_ext/bm_micro_string.c +40 -0
  10. data/ext/isomorfeus_ferret_ext/bm_store.c +93 -0
  11. data/ext/isomorfeus_ferret_ext/email.rl +21 -0
  12. data/ext/isomorfeus_ferret_ext/extconf.rb +5 -0
  13. data/ext/isomorfeus_ferret_ext/fio_tmpfile.h +53 -0
  14. data/ext/isomorfeus_ferret_ext/frb_analysis.c +2577 -0
  15. data/ext/isomorfeus_ferret_ext/frb_index.c +3457 -0
  16. data/ext/isomorfeus_ferret_ext/frb_lang.c +9 -0
  17. data/ext/isomorfeus_ferret_ext/frb_lang.h +17 -0
  18. data/ext/isomorfeus_ferret_ext/frb_qparser.c +629 -0
  19. data/ext/isomorfeus_ferret_ext/frb_search.c +4460 -0
  20. data/ext/isomorfeus_ferret_ext/frb_store.c +515 -0
  21. data/ext/isomorfeus_ferret_ext/frb_threading.h +30 -0
  22. data/ext/isomorfeus_ferret_ext/frb_utils.c +1127 -0
  23. data/ext/isomorfeus_ferret_ext/frt_analysis.c +1644 -0
  24. data/ext/isomorfeus_ferret_ext/frt_analysis.h +247 -0
  25. data/ext/isomorfeus_ferret_ext/frt_array.c +124 -0
  26. data/ext/isomorfeus_ferret_ext/frt_array.h +54 -0
  27. data/ext/isomorfeus_ferret_ext/frt_bitvector.c +95 -0
  28. data/ext/isomorfeus_ferret_ext/frt_bitvector.h +586 -0
  29. data/ext/isomorfeus_ferret_ext/frt_compound_io.c +374 -0
  30. data/ext/isomorfeus_ferret_ext/frt_config.h +44 -0
  31. data/ext/isomorfeus_ferret_ext/frt_document.c +134 -0
  32. data/ext/isomorfeus_ferret_ext/frt_document.h +52 -0
  33. data/ext/isomorfeus_ferret_ext/frt_except.c +95 -0
  34. data/ext/isomorfeus_ferret_ext/frt_except.h +188 -0
  35. data/ext/isomorfeus_ferret_ext/frt_field_index.c +233 -0
  36. data/ext/isomorfeus_ferret_ext/frt_field_index.h +42 -0
  37. data/ext/isomorfeus_ferret_ext/frt_filter.c +157 -0
  38. data/ext/isomorfeus_ferret_ext/frt_fs_store.c +502 -0
  39. data/ext/isomorfeus_ferret_ext/frt_global.c +427 -0
  40. data/ext/isomorfeus_ferret_ext/frt_global.h +290 -0
  41. data/ext/isomorfeus_ferret_ext/frt_hash.c +518 -0
  42. data/ext/isomorfeus_ferret_ext/frt_hash.h +466 -0
  43. data/ext/isomorfeus_ferret_ext/frt_hashset.c +191 -0
  44. data/ext/isomorfeus_ferret_ext/frt_hashset.h +206 -0
  45. data/ext/isomorfeus_ferret_ext/frt_helper.c +62 -0
  46. data/ext/isomorfeus_ferret_ext/frt_helper.h +13 -0
  47. data/ext/isomorfeus_ferret_ext/frt_ind.c +353 -0
  48. data/ext/isomorfeus_ferret_ext/frt_ind.h +54 -0
  49. data/ext/isomorfeus_ferret_ext/frt_index.c +6377 -0
  50. data/ext/isomorfeus_ferret_ext/frt_index.h +880 -0
  51. data/ext/isomorfeus_ferret_ext/frt_lang.c +104 -0
  52. data/ext/isomorfeus_ferret_ext/frt_lang.h +44 -0
  53. data/ext/isomorfeus_ferret_ext/frt_mempool.c +87 -0
  54. data/ext/isomorfeus_ferret_ext/frt_mempool.h +33 -0
  55. data/ext/isomorfeus_ferret_ext/frt_multimapper.c +349 -0
  56. data/ext/isomorfeus_ferret_ext/frt_multimapper.h +52 -0
  57. data/ext/isomorfeus_ferret_ext/frt_posh.c +1006 -0
  58. data/ext/isomorfeus_ferret_ext/frt_posh.h +973 -0
  59. data/ext/isomorfeus_ferret_ext/frt_priorityqueue.c +147 -0
  60. data/ext/isomorfeus_ferret_ext/frt_priorityqueue.h +147 -0
  61. data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +1612 -0
  62. data/ext/isomorfeus_ferret_ext/frt_q_const_score.c +157 -0
  63. data/ext/isomorfeus_ferret_ext/frt_q_filtered_query.c +209 -0
  64. data/ext/isomorfeus_ferret_ext/frt_q_fuzzy.c +281 -0
  65. data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +147 -0
  66. data/ext/isomorfeus_ferret_ext/frt_q_multi_term.c +672 -0
  67. data/ext/isomorfeus_ferret_ext/frt_q_parser.c +3084 -0
  68. data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +1182 -0
  69. data/ext/isomorfeus_ferret_ext/frt_q_prefix.c +98 -0
  70. data/ext/isomorfeus_ferret_ext/frt_q_range.c +665 -0
  71. data/ext/isomorfeus_ferret_ext/frt_q_span.c +2386 -0
  72. data/ext/isomorfeus_ferret_ext/frt_q_term.c +311 -0
  73. data/ext/isomorfeus_ferret_ext/frt_q_wildcard.c +166 -0
  74. data/ext/isomorfeus_ferret_ext/frt_ram_store.c +460 -0
  75. data/ext/isomorfeus_ferret_ext/frt_scanner.c +899 -0
  76. data/ext/isomorfeus_ferret_ext/frt_scanner.h +28 -0
  77. data/ext/isomorfeus_ferret_ext/frt_scanner_mb.c +6705 -0
  78. data/ext/isomorfeus_ferret_ext/frt_scanner_utf8.c +4419 -0
  79. data/ext/isomorfeus_ferret_ext/frt_search.c +1824 -0
  80. data/ext/isomorfeus_ferret_ext/frt_search.h +924 -0
  81. data/ext/isomorfeus_ferret_ext/frt_similarity.c +150 -0
  82. data/ext/isomorfeus_ferret_ext/frt_similarity.h +79 -0
  83. data/ext/isomorfeus_ferret_ext/frt_sort.c +796 -0
  84. data/ext/isomorfeus_ferret_ext/frt_stopwords.c +395 -0
  85. data/ext/isomorfeus_ferret_ext/frt_store.c +680 -0
  86. data/ext/isomorfeus_ferret_ext/frt_store.h +789 -0
  87. data/ext/isomorfeus_ferret_ext/frt_term_vectors.c +72 -0
  88. data/ext/isomorfeus_ferret_ext/frt_threading.h +23 -0
  89. data/ext/isomorfeus_ferret_ext/frt_win32.h +54 -0
  90. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +409 -0
  91. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.h +95 -0
  92. data/ext/isomorfeus_ferret_ext/libstemmer.c +93 -0
  93. data/ext/isomorfeus_ferret_ext/libstemmer.h +73 -0
  94. data/ext/isomorfeus_ferret_ext/q_parser.y +1366 -0
  95. data/ext/isomorfeus_ferret_ext/scanner.h +28 -0
  96. data/ext/isomorfeus_ferret_ext/scanner.in +43 -0
  97. data/ext/isomorfeus_ferret_ext/scanner.rl +84 -0
  98. data/ext/isomorfeus_ferret_ext/scanner_mb.rl +200 -0
  99. data/ext/isomorfeus_ferret_ext/scanner_utf8.rl +85 -0
  100. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_danish.c +324 -0
  101. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_danish.h +7 -0
  102. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_dutch.c +610 -0
  103. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_dutch.h +6 -0
  104. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_english.c +1104 -0
  105. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_english.h +6 -0
  106. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_finnish.c +749 -0
  107. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_finnish.h +7 -0
  108. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_french.c +1233 -0
  109. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_french.h +6 -0
  110. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_german.c +490 -0
  111. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_german.h +6 -0
  112. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_hungarian.c +1217 -0
  113. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_hungarian.h +7 -0
  114. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_italian.c +1052 -0
  115. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_italian.h +6 -0
  116. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_norwegian.c +283 -0
  117. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_norwegian.h +6 -0
  118. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_porter.c +735 -0
  119. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_porter.h +6 -0
  120. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_portuguese.c +1003 -0
  121. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_portuguese.h +7 -0
  122. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_spanish.c +1079 -0
  123. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_spanish.h +6 -0
  124. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_swedish.c +293 -0
  125. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_swedish.h +6 -0
  126. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_2_romanian.c +984 -0
  127. data/ext/isomorfeus_ferret_ext/stem_ISO_8859_2_romanian.h +6 -0
  128. data/ext/isomorfeus_ferret_ext/stem_KOI8_R_russian.c +686 -0
  129. data/ext/isomorfeus_ferret_ext/stem_KOI8_R_russian.h +6 -0
  130. data/ext/isomorfeus_ferret_ext/stem_UTF_8_danish.c +325 -0
  131. data/ext/isomorfeus_ferret_ext/stem_UTF_8_danish.h +6 -0
  132. data/ext/isomorfeus_ferret_ext/stem_UTF_8_dutch.c +620 -0
  133. data/ext/isomorfeus_ferret_ext/stem_UTF_8_dutch.h +6 -0
  134. data/ext/isomorfeus_ferret_ext/stem_UTF_8_english.c +1111 -0
  135. data/ext/isomorfeus_ferret_ext/stem_UTF_8_english.h +6 -0
  136. data/ext/isomorfeus_ferret_ext/stem_UTF_8_finnish.c +754 -0
  137. data/ext/isomorfeus_ferret_ext/stem_UTF_8_finnish.h +6 -0
  138. data/ext/isomorfeus_ferret_ext/stem_UTF_8_french.c +1242 -0
  139. data/ext/isomorfeus_ferret_ext/stem_UTF_8_french.h +6 -0
  140. data/ext/isomorfeus_ferret_ext/stem_UTF_8_german.c +495 -0
  141. data/ext/isomorfeus_ferret_ext/stem_UTF_8_german.h +6 -0
  142. data/ext/isomorfeus_ferret_ext/stem_UTF_8_hungarian.c +1220 -0
  143. data/ext/isomorfeus_ferret_ext/stem_UTF_8_hungarian.h +6 -0
  144. data/ext/isomorfeus_ferret_ext/stem_UTF_8_italian.c +1059 -0
  145. data/ext/isomorfeus_ferret_ext/stem_UTF_8_italian.h +6 -0
  146. data/ext/isomorfeus_ferret_ext/stem_UTF_8_norwegian.c +285 -0
  147. data/ext/isomorfeus_ferret_ext/stem_UTF_8_norwegian.h +6 -0
  148. data/ext/isomorfeus_ferret_ext/stem_UTF_8_porter.c +741 -0
  149. data/ext/isomorfeus_ferret_ext/stem_UTF_8_porter.h +6 -0
  150. data/ext/isomorfeus_ferret_ext/stem_UTF_8_portuguese.c +1009 -0
  151. data/ext/isomorfeus_ferret_ext/stem_UTF_8_portuguese.h +6 -0
  152. data/ext/isomorfeus_ferret_ext/stem_UTF_8_romanian.c +990 -0
  153. data/ext/isomorfeus_ferret_ext/stem_UTF_8_romanian.h +6 -0
  154. data/ext/isomorfeus_ferret_ext/stem_UTF_8_russian.c +680 -0
  155. data/ext/isomorfeus_ferret_ext/stem_UTF_8_russian.h +6 -0
  156. data/ext/isomorfeus_ferret_ext/stem_UTF_8_spanish.c +1083 -0
  157. data/ext/isomorfeus_ferret_ext/stem_UTF_8_spanish.h +6 -0
  158. data/ext/isomorfeus_ferret_ext/stem_UTF_8_swedish.c +294 -0
  159. data/ext/isomorfeus_ferret_ext/stem_UTF_8_swedish.h +6 -0
  160. data/ext/isomorfeus_ferret_ext/stem_UTF_8_turkish.c +2191 -0
  161. data/ext/isomorfeus_ferret_ext/stem_UTF_8_turkish.h +6 -0
  162. data/ext/isomorfeus_ferret_ext/stem_api.c +66 -0
  163. data/ext/isomorfeus_ferret_ext/stem_api.h +26 -0
  164. data/ext/isomorfeus_ferret_ext/stem_header.h +57 -0
  165. data/ext/isomorfeus_ferret_ext/stem_modules.h +190 -0
  166. data/ext/isomorfeus_ferret_ext/stem_modules.txt +50 -0
  167. data/ext/isomorfeus_ferret_ext/stem_utilities.c +478 -0
  168. data/ext/isomorfeus_ferret_ext/test.c +850 -0
  169. data/ext/isomorfeus_ferret_ext/test.h +416 -0
  170. data/ext/isomorfeus_ferret_ext/test_1710.c +63 -0
  171. data/ext/isomorfeus_ferret_ext/test_analysis.c +1221 -0
  172. data/ext/isomorfeus_ferret_ext/test_array.c +272 -0
  173. data/ext/isomorfeus_ferret_ext/test_bitvector.c +600 -0
  174. data/ext/isomorfeus_ferret_ext/test_compound_io.c +170 -0
  175. data/ext/isomorfeus_ferret_ext/test_document.c +156 -0
  176. data/ext/isomorfeus_ferret_ext/test_except.c +244 -0
  177. data/ext/isomorfeus_ferret_ext/test_fields.c +522 -0
  178. data/ext/isomorfeus_ferret_ext/test_file_deleter.c +185 -0
  179. data/ext/isomorfeus_ferret_ext/test_filter.c +331 -0
  180. data/ext/isomorfeus_ferret_ext/test_fs_store.c +25 -0
  181. data/ext/isomorfeus_ferret_ext/test_global.c +299 -0
  182. data/ext/isomorfeus_ferret_ext/test_hash.c +485 -0
  183. data/ext/isomorfeus_ferret_ext/test_hashset.c +288 -0
  184. data/ext/isomorfeus_ferret_ext/test_helper.c +47 -0
  185. data/ext/isomorfeus_ferret_ext/test_highlighter.c +548 -0
  186. data/ext/isomorfeus_ferret_ext/test_index.c +2323 -0
  187. data/ext/isomorfeus_ferret_ext/test_lang.c +74 -0
  188. data/ext/isomorfeus_ferret_ext/test_mempool.c +102 -0
  189. data/ext/isomorfeus_ferret_ext/test_multimapper.c +64 -0
  190. data/ext/isomorfeus_ferret_ext/test_priorityqueue.c +213 -0
  191. data/ext/isomorfeus_ferret_ext/test_q_const_score.c +84 -0
  192. data/ext/isomorfeus_ferret_ext/test_q_filtered.c +61 -0
  193. data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +241 -0
  194. data/ext/isomorfeus_ferret_ext/test_q_parser.c +464 -0
  195. data/ext/isomorfeus_ferret_ext/test_q_span.c +575 -0
  196. data/ext/isomorfeus_ferret_ext/test_ram_store.c +77 -0
  197. data/ext/isomorfeus_ferret_ext/test_search.c +1874 -0
  198. data/ext/isomorfeus_ferret_ext/test_segments.c +167 -0
  199. data/ext/isomorfeus_ferret_ext/test_similarity.c +25 -0
  200. data/ext/isomorfeus_ferret_ext/test_sort.c +333 -0
  201. data/ext/isomorfeus_ferret_ext/test_store.c +591 -0
  202. data/ext/isomorfeus_ferret_ext/test_store.h +3 -0
  203. data/ext/isomorfeus_ferret_ext/test_term.c +351 -0
  204. data/ext/isomorfeus_ferret_ext/test_term_vectors.c +373 -0
  205. data/ext/isomorfeus_ferret_ext/test_test.c +83 -0
  206. data/ext/isomorfeus_ferret_ext/test_threading.c +188 -0
  207. data/ext/isomorfeus_ferret_ext/testhelper.c +561 -0
  208. data/ext/isomorfeus_ferret_ext/testhelper.h +25 -0
  209. data/ext/isomorfeus_ferret_ext/tests_all.h +87 -0
  210. data/ext/isomorfeus_ferret_ext/uchar-ucs4.rl +1854 -0
  211. data/ext/isomorfeus_ferret_ext/uchar-utf8.rl +1999 -0
  212. data/ext/isomorfeus_ferret_ext/url.rl +27 -0
  213. data/ext/isomorfeus_ferret_ext/word_list.h +15156 -0
  214. data/lib/isomorfeus/ferret/document.rb +132 -0
  215. data/lib/isomorfeus/ferret/field_symbol.rb +85 -0
  216. data/lib/isomorfeus/ferret/index/field_infos.rb +48 -0
  217. data/lib/isomorfeus/ferret/index/index.rb +970 -0
  218. data/lib/isomorfeus/ferret/monitor.rb +323 -0
  219. data/lib/isomorfeus/ferret/stdlib_patches.rb +151 -0
  220. data/lib/isomorfeus/ferret/version.rb +5 -0
  221. data/lib/isomorfeus-ferret.rb +8 -0
  222. metadata +307 -0
@@ -0,0 +1,522 @@
1
+ #include "frt_index.h"
2
+ #include "test.h"
3
+
4
+ #define do_field_prop_test(tc, fi, name, boost, is_stored,\
5
+ is_indexed, is_tokenized, omit_norms,\
6
+ store_term_vector, store_positions, store_offsets)\
7
+ field_prop_test(tc, __LINE__, fi, name, boost, is_stored,\
8
+ is_indexed, is_tokenized, omit_norms,\
9
+ store_term_vector, store_positions, store_offsets)
10
+ #define T 1
11
+ #define F 0
12
+
13
+ void field_prop_test(TestCase *tc,
14
+ int line_num,
15
+ FrtFieldInfo *fi,
16
+ FrtSymbol name,
17
+ float boost,
18
+ bool is_stored,
19
+ bool is_indexed,
20
+ bool is_tokenized,
21
+ bool omit_norms,
22
+ bool store_term_vector,
23
+ bool store_positions,
24
+ bool store_offsets)
25
+ {
26
+ tst_ptr_equal(line_num, tc, (void *)name, (void *)fi->name);
27
+ tst_flt_equal(line_num, tc, boost, fi->boost);
28
+ tst_int_equal(line_num, tc, is_stored, fi_is_stored(fi));
29
+ tst_int_equal(line_num, tc, is_indexed, fi_is_indexed(fi));
30
+ tst_int_equal(line_num, tc, is_tokenized, fi_is_tokenized(fi));
31
+ tst_int_equal(line_num, tc, omit_norms, fi_omit_norms(fi));
32
+ tst_int_equal(line_num, tc, store_term_vector, fi_store_term_vector(fi));
33
+ tst_int_equal(line_num, tc, store_positions, fi_store_positions(fi));
34
+ tst_int_equal(line_num, tc, store_offsets, fi_store_offsets(fi));
35
+ }
36
+
37
+ /****************************************************************************
38
+ *
39
+ * FrtFieldInfo
40
+ *
41
+ ****************************************************************************/
42
+
43
+ static void test_fi_new(TestCase *tc, void *data)
44
+ {
45
+ FrtFieldInfo *fi;
46
+ (void)data; /* suppress unused argument warning */
47
+ fi = frt_fi_new(rb_intern("name"), FRT_STORE_NO, FRT_INDEX_NO, FRT_TERM_VECTOR_NO);
48
+ do_field_prop_test(tc, fi, rb_intern("name"), 1.0, F, F, F, F, F, F, F);
49
+ frt_fi_deref(fi);
50
+ fi = frt_fi_new(rb_intern("name"), FRT_STORE_YES, FRT_INDEX_YES, FRT_TERM_VECTOR_YES);
51
+ do_field_prop_test(tc, fi, rb_intern("name"), 1.0, T, T, T, F, T, F, F);
52
+ frt_fi_deref(fi);
53
+ fi = frt_fi_new(rb_intern("name"), FRT_STORE_NO, FRT_INDEX_YES_OMIT_NORMS, FRT_TERM_VECTOR_WITH_OFFSETS);
54
+ do_field_prop_test(tc, fi, rb_intern("name"), 1.0, F, T, T, T, T, F, T);
55
+ frt_fi_deref(fi);
56
+ fi = frt_fi_new(rb_intern("name"), FRT_STORE_NO, FRT_INDEX_UNTOKENIZED_OMIT_NORMS, FRT_TERM_VECTOR_WITH_POSITIONS_OFFSETS);
57
+ fi->boost = 1000.0;
58
+ do_field_prop_test(tc, fi, rb_intern("name"), 1000.0, F, T, F, T, T, T, T);
59
+ frt_fi_deref(fi);
60
+ }
61
+
62
+ /****************************************************************************
63
+ *
64
+ * FrtFieldInfos
65
+ *
66
+ ****************************************************************************/
67
+
68
+ static void test_fis_basic(TestCase *tc, void *data)
69
+ {
70
+ FrtFieldInfos *fis;
71
+ FrtFieldInfo *fi;
72
+ volatile bool arg_error = false;
73
+ (void)data; /* suppress unused argument warning */
74
+
75
+ fis = frt_fis_new(FRT_STORE_NO, FRT_INDEX_NO, FRT_TERM_VECTOR_NO);
76
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("FFFFFFFF"), FRT_STORE_NO, FRT_INDEX_NO, FRT_TERM_VECTOR_NO));
77
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("TFTTFTFF"), FRT_STORE_YES, FRT_INDEX_YES, FRT_TERM_VECTOR_YES));
78
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("TTTFFTTF"), FRT_STORE_YES, FRT_INDEX_UNTOKENIZED, FRT_TERM_VECTOR_WITH_POSITIONS));
79
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("FFTTTTFT"), FRT_STORE_NO, FRT_INDEX_YES_OMIT_NORMS, FRT_TERM_VECTOR_WITH_OFFSETS));
80
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("FFTFTTTT"), FRT_STORE_NO, FRT_INDEX_UNTOKENIZED_OMIT_NORMS, FRT_TERM_VECTOR_WITH_POSITIONS_OFFSETS));
81
+
82
+ fi = frt_fi_new(rb_intern("FFTFTTTT"), FRT_STORE_NO, FRT_INDEX_UNTOKENIZED_OMIT_NORMS, FRT_TERM_VECTOR_WITH_POSITIONS_OFFSETS);
83
+ FRT_TRY
84
+ Apnull(frt_fis_add_field(fis, fi));
85
+ case FRT_ARG_ERROR:
86
+ arg_error = true;
87
+ FRT_HANDLED();
88
+ FRT_XENDTRY
89
+ Assert(arg_error, "exception should have been thrown");
90
+
91
+ frt_fi_deref(fi);
92
+
93
+ Apequal(frt_fis_get_field(fis, rb_intern("FFFFFFFF")), fis->fields[0]);
94
+ Apequal(frt_fis_get_field(fis, rb_intern("TFTTFTFF")), fis->fields[1]);
95
+ Apequal(frt_fis_get_field(fis, rb_intern("TTTFFTTF")), fis->fields[2]);
96
+ Apequal(frt_fis_get_field(fis, rb_intern("FFTTTTFT")), fis->fields[3]);
97
+ Apequal(frt_fis_get_field(fis, rb_intern("FFTFTTTT")), fis->fields[4]);
98
+
99
+ Aiequal(0, frt_fis_get_field(fis, rb_intern("FFFFFFFF"))->number);
100
+ Aiequal(1, frt_fis_get_field(fis, rb_intern("TFTTFTFF"))->number);
101
+ Aiequal(2, frt_fis_get_field(fis, rb_intern("TTTFFTTF"))->number);
102
+ Aiequal(3, frt_fis_get_field(fis, rb_intern("FFTTTTFT"))->number);
103
+ Aiequal(4, frt_fis_get_field(fis, rb_intern("FFTFTTTT"))->number);
104
+
105
+ Asequal("FFFFFFFF", rb_id2name(fis->fields[0]->name));
106
+ Asequal("TFTTFTFF", rb_id2name(fis->fields[1]->name));
107
+ Asequal("TTTFFTTF", rb_id2name(fis->fields[2]->name));
108
+ Asequal("FFTTTTFT", rb_id2name(fis->fields[3]->name));
109
+ Asequal("FFTFTTTT", rb_id2name(fis->fields[4]->name));
110
+
111
+ fis->fields[1]->boost = 2.0;
112
+ fis->fields[2]->boost = 3.0;
113
+ fis->fields[3]->boost = 4.0;
114
+ fis->fields[4]->boost = 5.0;
115
+
116
+ do_field_prop_test(tc, fis->fields[0], rb_intern("FFFFFFFF"), 1.0, F, F, F, F, F, F, F);
117
+ do_field_prop_test(tc, fis->fields[1], rb_intern("TFTTFTFF"), 2.0, T, T, T, F, T, F, F);
118
+ do_field_prop_test(tc, fis->fields[2], rb_intern("TTTFFTTF"), 3.0, T, T, F, F, T, T, F);
119
+ do_field_prop_test(tc, fis->fields[3], rb_intern("FFTTTTFT"), 4.0, F, T, T, T, T, F, T);
120
+ do_field_prop_test(tc, fis->fields[4], rb_intern("FFTFTTTT"), 5.0, F, T, F, T, T, T, T);
121
+
122
+ frt_fis_deref(fis);
123
+ }
124
+
125
+ static void test_fis_with_default(TestCase *tc, void *data)
126
+ {
127
+ FrtFieldInfos *fis;
128
+ (void)data; /* suppress unused argument warning */
129
+
130
+ fis = frt_fis_new(FRT_STORE_NO, FRT_INDEX_NO, FRT_TERM_VECTOR_NO);
131
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("name")), rb_intern("name"), 1.0, F, F, F, F, F, F, F);
132
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("dave")), rb_intern("dave"), 1.0, F, F, F, F, F, F, F);
133
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("wert")), rb_intern("wert"), 1.0, F, F, F, F, F, F, F);
134
+ do_field_prop_test(tc, fis->fields[0], rb_intern("name"), 1.0, F, F, F, F, F, F, F);
135
+ do_field_prop_test(tc, fis->fields[1], rb_intern("dave"), 1.0, F, F, F, F, F, F, F);
136
+ do_field_prop_test(tc, fis->fields[2], rb_intern("wert"), 1.0, F, F, F, F, F, F, F);
137
+ Apnull(frt_fis_get_field(fis, rb_intern("random")));
138
+ frt_fis_deref(fis);
139
+
140
+ fis = frt_fis_new(FRT_STORE_YES, FRT_INDEX_YES, FRT_TERM_VECTOR_YES);
141
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("name")), rb_intern("name"), 1.0, T, T, T, F, T, F, F);
142
+ frt_fis_deref(fis);
143
+ fis = frt_fis_new(FRT_STORE_YES, FRT_INDEX_UNTOKENIZED, FRT_TERM_VECTOR_WITH_POSITIONS);
144
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("name")), rb_intern("name"), 1.0, T, T, F, F, T, T, F);
145
+ frt_fis_deref(fis);
146
+ fis = frt_fis_new(FRT_STORE_NO, FRT_INDEX_YES_OMIT_NORMS, FRT_TERM_VECTOR_WITH_OFFSETS);
147
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("name")), rb_intern("name"), 1.0, F, T, T, T, T, F, T);
148
+ frt_fis_deref(fis);
149
+ fis = frt_fis_new(FRT_STORE_NO, FRT_INDEX_UNTOKENIZED_OMIT_NORMS, FRT_TERM_VECTOR_WITH_POSITIONS_OFFSETS);
150
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("name")), rb_intern("name"), 1.0, F, T, F, T, T, T, T);
151
+ frt_fis_deref(fis);
152
+ }
153
+
154
+ static void test_fis_rw(TestCase *tc, void *data)
155
+ {
156
+ char *str;
157
+ FrtFieldInfos *fis;
158
+ FrtStore *store = frt_open_ram_store();
159
+ FrtInStream *is;
160
+ FrtOutStream *os;
161
+ (void)data; /* suppress unused argument warning */
162
+
163
+ fis = frt_fis_new(FRT_STORE_YES, FRT_INDEX_UNTOKENIZED_OMIT_NORMS,
164
+ FRT_TERM_VECTOR_WITH_POSITIONS_OFFSETS);
165
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("FFFFFFFF"), FRT_STORE_NO, FRT_INDEX_NO, FRT_TERM_VECTOR_NO));
166
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("TFTTFTFF"), FRT_STORE_YES, FRT_INDEX_YES, FRT_TERM_VECTOR_YES));
167
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("FFTTTTFT"), FRT_STORE_NO, FRT_INDEX_YES_OMIT_NORMS, FRT_TERM_VECTOR_WITH_OFFSETS));
168
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("FFTFTTTT"), FRT_STORE_NO, FRT_INDEX_UNTOKENIZED_OMIT_NORMS, FRT_TERM_VECTOR_WITH_POSITIONS_OFFSETS));
169
+ fis->fields[0]->boost = 2.0;
170
+ fis->fields[1]->boost = 3.0;
171
+ fis->fields[2]->boost = 4.0;
172
+ fis->fields[3]->boost = 5.0;
173
+ os = store->new_output(store, "fields");
174
+ frt_fis_write(fis, os);
175
+ frt_os_close(os);
176
+
177
+ /* these fields won't be saved be will added again later */
178
+ Aiequal(4, fis->size);
179
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("new_field")), rb_intern("new_field"), 1.0, T, T, F, T, T, T, T);
180
+ Aiequal(5, fis->size);
181
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("another")), rb_intern("another"), 1.0, T, T, F, T, T, T, T);
182
+ Aiequal(6, fis->size);
183
+
184
+ frt_fis_deref(fis);
185
+
186
+ is = store->open_input(store, "fields");
187
+ fis = frt_fis_read(is);
188
+ frt_is_close(is);
189
+ Aiequal(FRT_STORE_YES, fis->store);
190
+ Aiequal(FRT_INDEX_UNTOKENIZED_OMIT_NORMS, fis->index);
191
+ Aiequal(FRT_TERM_VECTOR_WITH_POSITIONS_OFFSETS, fis->term_vector);
192
+
193
+ do_field_prop_test(tc, fis->fields[0], rb_intern("FFFFFFFF"), 2.0, F, F, F, F, F, F, F);
194
+ do_field_prop_test(tc, fis->fields[1], rb_intern("TFTTFTFF"), 3.0, T, T, T, F, T, F, F);
195
+ do_field_prop_test(tc, fis->fields[2], rb_intern("FFTTTTFT"), 4.0, F, T, T, T, T, F, T);
196
+ do_field_prop_test(tc, fis->fields[3], rb_intern("FFTFTTTT"), 5.0, F, T, F, T, T, T, T);
197
+ Aiequal(4, fis->size);
198
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("new_field")), rb_intern("new_field"), 1.0, T, T, F, T, T, T, T);
199
+ Aiequal(5, fis->size);
200
+ do_field_prop_test(tc, frt_fis_get_or_add_field(fis, rb_intern("another")), rb_intern("another"), 1.0, T, T, F, T, T, T, T);
201
+ Aiequal(6, fis->size);
202
+ str = frt_fis_to_s(fis);
203
+ Asequal("default:\n"
204
+ " store: :yes\n"
205
+ " index: :untokenized_omit_norms\n"
206
+ " term_vector: :with_positions_offsets\n"
207
+ "fields:\n"
208
+ " FFFFFFFF:\n"
209
+ " boost: 2.000000\n"
210
+ " store: :no\n"
211
+ " index: :no\n"
212
+ " term_vector: :no\n"
213
+ " TFTTFTFF:\n"
214
+ " boost: 3.000000\n"
215
+ " store: :yes\n"
216
+ " index: :yes\n"
217
+ " term_vector: :yes\n"
218
+ " FFTTTTFT:\n"
219
+ " boost: 4.000000\n"
220
+ " store: :no\n"
221
+ " index: :omit_norms\n"
222
+ " term_vector: :with_offsets\n"
223
+ " FFTFTTTT:\n"
224
+ " boost: 5.000000\n"
225
+ " store: :no\n"
226
+ " index: :untokenized_omit_norms\n"
227
+ " term_vector: :with_positions_offsets\n"
228
+ " new_field:\n"
229
+ " boost: 1.000000\n"
230
+ " store: :yes\n"
231
+ " index: :untokenized_omit_norms\n"
232
+ " term_vector: :with_positions_offsets\n"
233
+ " another:\n"
234
+ " boost: 1.000000\n"
235
+ " store: :yes\n"
236
+ " index: :untokenized_omit_norms\n"
237
+ " term_vector: :with_positions_offsets\n", str);
238
+ free(str);
239
+ frt_fis_deref(fis);
240
+ frt_store_deref(store);
241
+ }
242
+
243
+ /****************************************************************************
244
+ *
245
+ * FrtFieldsReader/FieldsWriter
246
+ *
247
+ ****************************************************************************/
248
+
249
+ #define BIN_DATA_LEN 1234
250
+
251
+ static char *prepare_bin_data(int len)
252
+ {
253
+ int i;
254
+ char *bin_data = FRT_ALLOC_N(char, len);
255
+ for (i = 0; i < len; i++) {
256
+ bin_data[i] = i;
257
+ }
258
+ return bin_data;
259
+ }
260
+
261
+ #define check_df_data(df, index, mdata)\
262
+ do {\
263
+ Aiequal(strlen(mdata), df->lengths[index]);\
264
+ Asequal(mdata, df->data[index]);\
265
+ } while (0)
266
+
267
+ #define check_df_bin_data(df, index, mdata, mlen)\
268
+ do {\
269
+ Aiequal(mlen, df->lengths[index]);\
270
+ Assert(memcmp(mdata, df->data[index], mlen) == 0, "Data should be equal");\
271
+ } while (0)
272
+
273
+ static FrtDocument *prepare_doc()
274
+ {
275
+ FrtDocument *doc = frt_doc_new();
276
+ FrtDocField *df;
277
+ char *bin_data = prepare_bin_data(BIN_DATA_LEN);
278
+
279
+ frt_doc_add_field(doc, frt_df_add_data(frt_df_new(rb_intern("ignored")), (char *)"this fld's ignored"));
280
+ frt_doc_add_field(doc, frt_df_add_data(frt_df_new(rb_intern("unstored")), (char *)"unstored ignored"));
281
+ frt_doc_add_field(doc, frt_df_add_data(frt_df_new(rb_intern("stored")), (char *)"Yay, a stored field"));
282
+ df = frt_doc_add_field(doc, frt_df_add_data(frt_df_new(rb_intern("stored_array")), (char *)"one"));
283
+ df->destroy_data = false;
284
+ frt_df_add_data(df, (char *)"two");
285
+ frt_df_add_data(df, (char *)"three");
286
+ frt_df_add_data(df, (char *)"four");
287
+ frt_df_add_data_len(df, bin_data, BIN_DATA_LEN);
288
+ frt_doc_add_field(doc, frt_df_add_data_len(frt_df_new(rb_intern("binary")), bin_data,
289
+ BIN_DATA_LEN))->destroy_data = true;
290
+ df = frt_doc_add_field(doc, frt_df_add_data(frt_df_new(rb_intern("array")), (char *)"ichi"));
291
+ frt_df_add_data(df, (char *)"ni");
292
+ frt_df_add_data(df, (char *)"san");
293
+ frt_df_add_data(df, (char *)"yon");
294
+ frt_df_add_data(df, (char *)"go");
295
+
296
+ return doc;
297
+ }
298
+
299
+ static FrtFieldInfos *prepare_fis()
300
+ {
301
+ FrtFieldInfos *fis = frt_fis_new(FRT_STORE_YES, FRT_INDEX_YES, FRT_TERM_VECTOR_NO);
302
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("ignored"), FRT_STORE_NO, FRT_INDEX_NO, FRT_TERM_VECTOR_NO));
303
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("unstored"), FRT_STORE_NO, FRT_INDEX_YES, FRT_TERM_VECTOR_WITH_POSITIONS_OFFSETS));
304
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("stored"), FRT_STORE_YES, FRT_INDEX_YES, FRT_TERM_VECTOR_YES));
305
+ frt_fis_add_field(fis, frt_fi_new(rb_intern("stored_array"), FRT_STORE_YES, FRT_INDEX_UNTOKENIZED, FRT_TERM_VECTOR_NO));
306
+ return fis;
307
+ }
308
+
309
+ static void test_fields_rw_single(TestCase *tc, void *data)
310
+ {
311
+ FrtStore *store = frt_open_ram_store();
312
+ char *bin_data = prepare_bin_data(BIN_DATA_LEN);
313
+ FrtDocument *doc = prepare_doc();
314
+ FrtFieldInfos *fis = prepare_fis();
315
+ FrtFieldsWriter *fw;
316
+ FrtFieldsReader *fr;
317
+ FrtDocField *df;
318
+ (void)data;
319
+
320
+ Aiequal(4, fis->size);
321
+ Aiequal(6, doc->size);
322
+
323
+ fw = frt_fw_open(store, "_0", fis);
324
+ frt_fw_add_doc(fw, doc);
325
+ frt_fw_write_tv_index(fw);
326
+ frt_fw_close(fw);
327
+ frt_doc_destroy(doc);
328
+
329
+ Aiequal(6, fis->size);
330
+ do_field_prop_test(tc, frt_fis_get_field(fis, rb_intern("binary")), rb_intern("binary"), 1.0, T, T, T, F, F, F, F);
331
+ do_field_prop_test(tc, frt_fis_get_field(fis, rb_intern("array")), rb_intern("array"), 1.0, T, T, T, F, F, F, F);
332
+
333
+ fr = frt_fr_open(store, "_0", fis);
334
+ doc = frt_fr_get_doc(fr, 0);
335
+ frt_fr_close(fr);
336
+
337
+ Aiequal(4, doc->size);
338
+
339
+ Apnull(frt_doc_get_field(doc, rb_intern("ignored")));
340
+ Apnull(frt_doc_get_field(doc, rb_intern("unstored")));
341
+
342
+ df = frt_doc_get_field(doc, rb_intern("stored"));
343
+ Aiequal(1, df->size);
344
+ check_df_data(df, 0, "Yay, a stored field");
345
+
346
+ df = frt_doc_get_field(doc, rb_intern("stored_array"));
347
+ Aiequal(5, df->size);
348
+ check_df_data(df, 0, "one");
349
+ check_df_data(df, 1, "two");
350
+ check_df_data(df, 2, "three");
351
+ check_df_data(df, 3, "four");
352
+ check_df_bin_data(df, 4, bin_data, BIN_DATA_LEN);
353
+
354
+ df = frt_doc_get_field(doc, rb_intern("binary"));
355
+ Aiequal(1, df->size);
356
+ check_df_bin_data(df, 0, bin_data, BIN_DATA_LEN);
357
+
358
+ df = frt_doc_get_field(doc, rb_intern("array"));
359
+ Aiequal(5, df->size);
360
+ check_df_data(df, 0, "ichi");
361
+ check_df_data(df, 1, "ni");
362
+ check_df_data(df, 2, "san");
363
+ check_df_data(df, 3, "yon");
364
+ check_df_data(df, 4, "go");
365
+
366
+ free(bin_data);
367
+ frt_store_deref(store);
368
+ frt_doc_destroy(doc);
369
+ frt_fis_deref(fis);
370
+ }
371
+
372
+ static void test_fields_rw_multi(TestCase *tc, void *data)
373
+ {
374
+ int i;
375
+ FrtStore *store = frt_open_ram_store();
376
+ char *bin_data = prepare_bin_data(BIN_DATA_LEN);
377
+ FrtDocument *doc;
378
+ FrtFieldInfos *fis = prepare_fis();
379
+ FrtFieldsWriter *fw;
380
+ FrtFieldsReader *fr;
381
+ FrtDocField *df;
382
+ (void)data;
383
+
384
+ fw = frt_fw_open(store, "_as3", fis);
385
+ for (i = 0; i < 100; i++) {
386
+ char buf[100];
387
+ char *bufc;
388
+ sprintf(buf, "<<%d>>", i);
389
+ bufc = frt_estrdup(buf);
390
+ doc = frt_doc_new();
391
+ frt_doc_add_field(doc, frt_df_add_data(frt_df_new(rb_intern(bufc)), bufc));
392
+ frt_fw_add_doc(fw, doc);
393
+ frt_fw_write_tv_index(fw);
394
+ frt_doc_destroy(doc);
395
+ }
396
+
397
+ doc = prepare_doc();
398
+ frt_fw_add_doc(fw, doc);
399
+ frt_fw_write_tv_index(fw);
400
+ frt_doc_destroy(doc);
401
+ frt_fw_close(fw);
402
+
403
+ Aiequal(106, fis->size);
404
+ do_field_prop_test(tc, frt_fis_get_field(fis, rb_intern("binary")), rb_intern("binary"), 1.0, T, T, T, F, F, F, F);
405
+ do_field_prop_test(tc, frt_fis_get_field(fis, rb_intern("array")), rb_intern("array"), 1.0, T, T, T, F, F, F, F);
406
+ for (i = 0; i < 100; i++) {
407
+ char buf[100];
408
+ sprintf(buf, "<<%d>>", i);
409
+ do_field_prop_test(tc, frt_fis_get_field(fis, rb_intern(buf)), rb_intern(buf), 1.0, T, T, T, F, F, F, F);
410
+ }
411
+
412
+ fr = frt_fr_open(store, "_as3", fis);
413
+ doc = frt_fr_get_doc(fr, 100);
414
+ frt_fr_close(fr);
415
+
416
+ Aiequal(4, doc->size);
417
+
418
+ Apnull(frt_doc_get_field(doc, rb_intern("ignored")));
419
+ Apnull(frt_doc_get_field(doc, rb_intern("unstored")));
420
+
421
+ df = frt_doc_get_field(doc, rb_intern("stored"));
422
+ Aiequal(1, df->size);
423
+ check_df_data(df, 0, "Yay, a stored field");
424
+
425
+ df = frt_doc_get_field(doc, rb_intern("stored_array"));
426
+ Aiequal(5, df->size);
427
+ check_df_data(df, 0, "one");
428
+ check_df_data(df, 1, "two");
429
+ check_df_data(df, 2, "three");
430
+ check_df_data(df, 3, "four");
431
+ check_df_bin_data(df, 4, bin_data, BIN_DATA_LEN);
432
+
433
+ df = frt_doc_get_field(doc, rb_intern("binary"));
434
+ Aiequal(1, df->size);
435
+ check_df_bin_data(df, 0, bin_data, BIN_DATA_LEN);
436
+
437
+ df = frt_doc_get_field(doc, rb_intern("array"));
438
+ Aiequal(5, df->size);
439
+ check_df_data(df, 0, "ichi");
440
+ check_df_data(df, 1, "ni");
441
+ check_df_data(df, 2, "san");
442
+ check_df_data(df, 3, "yon");
443
+ check_df_data(df, 4, "go");
444
+
445
+ free(bin_data);
446
+ frt_store_deref(store);
447
+ frt_doc_destroy(doc);
448
+ frt_fis_deref(fis);
449
+ }
450
+
451
+ static void test_lazy_field_loading(TestCase *tc, void *data)
452
+ {
453
+ FrtStore *store = frt_open_ram_store();
454
+ FrtDocument *doc;
455
+ FrtFieldInfos *fis = prepare_fis();
456
+ FrtFieldsWriter *fw;
457
+ FrtFieldsReader *fr;
458
+ FrtDocField *df;
459
+ FrtLazyDoc *lazy_doc;
460
+ FrtLazyDocField *lazy_df;
461
+ char *text, buf[1000];
462
+ (void)data;
463
+
464
+ fw = frt_fw_open(store, "_as3", fis);
465
+ doc = frt_doc_new();
466
+ df = frt_df_new(rb_intern("stored"));
467
+ frt_df_add_data(df, (char *)"this is a stored field");
468
+ frt_df_add_data(df, (char *)"to be or not to be");
469
+ frt_df_add_data(df, (char *)"a stitch in time, saves nine");
470
+ frt_df_add_data(df, (char *)"the quick brown fox jumped over the lazy dog");
471
+ frt_df_add_data(df, (char *)"that's it folks");
472
+ frt_doc_add_field(doc, df);
473
+ frt_fw_add_doc(fw, doc);
474
+ frt_fw_write_tv_index(fw);
475
+ frt_doc_destroy(doc);
476
+ frt_fw_close(fw);
477
+
478
+ fr = frt_fr_open(store, "_as3", fis);
479
+ lazy_doc = frt_fr_get_lazy_doc(fr, 0);
480
+ frt_fr_close(fr);
481
+ frt_fis_deref(fis);
482
+ frt_store_deref(store);
483
+
484
+ lazy_df = frt_lazy_doc_get(lazy_doc, rb_intern("stored"));
485
+ Apnull(lazy_doc->fields[0]->data[0].text);
486
+ Asequal("this is a stored field", text = frt_lazy_df_get_data(lazy_df, 0));
487
+ Asequal("this is a stored field", lazy_doc->fields[0]->data[0].text);
488
+ Apequal(text, frt_lazy_df_get_data(lazy_df, 0));
489
+
490
+ Apnull(lazy_doc->fields[0]->data[4].text);
491
+ Asequal("that's it folks", text = frt_lazy_df_get_data(lazy_df, 4));
492
+ Asequal("that's it folks", lazy_doc->fields[0]->data[4].text);
493
+ Apequal(text, frt_lazy_df_get_data(lazy_df, 4));
494
+
495
+ frt_lazy_df_get_bytes(lazy_df, buf, 17, 8);
496
+ buf[8] = 0;
497
+ Asequal("field to", buf);
498
+ frt_lazy_df_get_bytes(lazy_df, buf, 126, 5);
499
+ buf[5] = 0;
500
+ Asequal("folks", buf);
501
+ frt_lazy_df_get_bytes(lazy_df, buf, 0, 131);
502
+ buf[131] = 0;
503
+ Asequal("this is a stored field to be or not to be a stitch in time, "
504
+ "saves nine the quick brown fox jumped over the lazy dog "
505
+ "that's it folks", buf);
506
+
507
+ frt_lazy_doc_close(lazy_doc);
508
+ }
509
+
510
+ TestSuite *ts_fields(TestSuite *suite)
511
+ {
512
+ suite = ADD_SUITE(suite);
513
+ tst_run_test(suite, test_fi_new, NULL);
514
+ tst_run_test(suite, test_fis_basic, NULL);
515
+ tst_run_test(suite, test_fis_with_default, NULL);
516
+ tst_run_test(suite, test_fis_rw, NULL);
517
+ tst_run_test(suite, test_fields_rw_single, NULL);
518
+ tst_run_test(suite, test_fields_rw_multi, NULL);
519
+ tst_run_test(suite, test_lazy_field_loading, NULL);
520
+
521
+ return suite;
522
+ }