isomorfeus-ferret 0.17.2 → 0.17.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/isomorfeus_ferret_ext/benchmark.c +9 -20
- data/ext/isomorfeus_ferret_ext/benchmarks_all.h +1 -2
- data/ext/isomorfeus_ferret_ext/bm_hash.c +1 -2
- data/ext/isomorfeus_ferret_ext/brotli_dec_decode.c +4 -2
- data/ext/isomorfeus_ferret_ext/brotli_enc_encode.c +3 -2
- data/ext/isomorfeus_ferret_ext/frb_analysis.c +4 -5
- data/ext/isomorfeus_ferret_ext/frb_field_info.c +3 -4
- data/ext/isomorfeus_ferret_ext/frb_index.c +118 -125
- data/ext/isomorfeus_ferret_ext/frb_lazy_doc.c +14 -16
- data/ext/isomorfeus_ferret_ext/frb_search.c +31 -23
- data/ext/isomorfeus_ferret_ext/frb_store.c +27 -13
- data/ext/isomorfeus_ferret_ext/frb_utils.c +3 -6
- data/ext/isomorfeus_ferret_ext/frt_analysis.c +39 -46
- data/ext/isomorfeus_ferret_ext/frt_analysis.h +9 -9
- data/ext/isomorfeus_ferret_ext/frt_array.c +11 -22
- data/ext/isomorfeus_ferret_ext/frt_bitvector.h +3 -6
- data/ext/isomorfeus_ferret_ext/frt_doc_field.c +87 -0
- data/ext/isomorfeus_ferret_ext/frt_doc_field.h +26 -0
- data/ext/isomorfeus_ferret_ext/frt_document.c +4 -97
- data/ext/isomorfeus_ferret_ext/frt_document.h +2 -27
- data/ext/isomorfeus_ferret_ext/frt_except.c +8 -6
- data/ext/isomorfeus_ferret_ext/frt_except.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_field_index.c +13 -32
- data/ext/isomorfeus_ferret_ext/frt_field_index.h +0 -6
- data/ext/isomorfeus_ferret_ext/frt_field_info.c +69 -0
- data/ext/isomorfeus_ferret_ext/frt_field_info.h +49 -0
- data/ext/isomorfeus_ferret_ext/frt_field_infos.c +196 -0
- data/ext/isomorfeus_ferret_ext/frt_field_infos.h +35 -0
- data/ext/isomorfeus_ferret_ext/frt_global.c +10 -4
- data/ext/isomorfeus_ferret_ext/frt_global.h +11 -15
- data/ext/isomorfeus_ferret_ext/frt_hash.c +8 -8
- data/ext/isomorfeus_ferret_ext/frt_hash.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_hashset.c +20 -40
- data/ext/isomorfeus_ferret_ext/frt_hashset.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_helper.c +7 -15
- data/ext/isomorfeus_ferret_ext/frt_in_stream.c +35 -45
- data/ext/isomorfeus_ferret_ext/frt_in_stream.h +3 -2
- data/ext/isomorfeus_ferret_ext/frt_ind.c +20 -38
- data/ext/isomorfeus_ferret_ext/frt_index.c +292 -790
- data/ext/isomorfeus_ferret_ext/frt_index.h +1 -102
- data/ext/isomorfeus_ferret_ext/frt_lang.c +5 -10
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc.c +3 -3
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc.h +1 -1
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.c +18 -25
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.h +5 -5
- data/ext/isomorfeus_ferret_ext/frt_mdbx_store.c +102 -70
- data/ext/isomorfeus_ferret_ext/frt_mempool.c +8 -16
- data/ext/isomorfeus_ferret_ext/frt_multimapper.c +23 -46
- data/ext/isomorfeus_ferret_ext/frt_multimapper.h +4 -8
- data/ext/isomorfeus_ferret_ext/frt_out_stream.c +31 -43
- data/ext/isomorfeus_ferret_ext/frt_out_stream.h +2 -2
- data/ext/isomorfeus_ferret_ext/frt_posh.c +6 -819
- data/ext/isomorfeus_ferret_ext/frt_posh.h +0 -57
- data/ext/isomorfeus_ferret_ext/frt_priorityqueue.c +11 -22
- data/ext/isomorfeus_ferret_ext/frt_priorityqueue.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +85 -171
- data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +8 -16
- data/ext/isomorfeus_ferret_ext/frt_q_multi_term.c +1 -2
- data/ext/isomorfeus_ferret_ext/frt_q_parser.c +49 -98
- data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +52 -104
- data/ext/isomorfeus_ferret_ext/frt_q_range.c +6 -12
- data/ext/isomorfeus_ferret_ext/frt_q_span.c +113 -226
- data/ext/isomorfeus_ferret_ext/frt_q_wildcard.c +1 -2
- data/ext/isomorfeus_ferret_ext/frt_ram_store.c +134 -85
- data/ext/isomorfeus_ferret_ext/frt_search.c +82 -164
- data/ext/isomorfeus_ferret_ext/frt_similarity.c +11 -22
- data/ext/isomorfeus_ferret_ext/frt_similarity.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_store.c +13 -25
- data/ext/isomorfeus_ferret_ext/frt_store.h +86 -52
- data/ext/isomorfeus_ferret_ext/frt_term_vectors.c +8 -16
- data/ext/isomorfeus_ferret_ext/frt_win32.h +5 -10
- data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +12 -11
- data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.h +11 -13
- data/ext/isomorfeus_ferret_ext/lz4.c +422 -195
- data/ext/isomorfeus_ferret_ext/lz4.h +114 -46
- data/ext/isomorfeus_ferret_ext/lz4frame.c +421 -242
- data/ext/isomorfeus_ferret_ext/lz4frame.h +122 -53
- data/ext/isomorfeus_ferret_ext/lz4hc.c +127 -111
- data/ext/isomorfeus_ferret_ext/lz4hc.h +14 -14
- data/ext/isomorfeus_ferret_ext/lz4xxhash.h +1 -1
- data/ext/isomorfeus_ferret_ext/mdbx.c +3762 -2526
- data/ext/isomorfeus_ferret_ext/mdbx.h +115 -70
- data/ext/isomorfeus_ferret_ext/test.c +40 -87
- data/ext/isomorfeus_ferret_ext/test.h +3 -6
- data/ext/isomorfeus_ferret_ext/test_1710.c +11 -13
- data/ext/isomorfeus_ferret_ext/test_analysis.c +32 -64
- data/ext/isomorfeus_ferret_ext/test_array.c +6 -12
- data/ext/isomorfeus_ferret_ext/test_bitvector.c +12 -24
- data/ext/isomorfeus_ferret_ext/test_document.c +23 -33
- data/ext/isomorfeus_ferret_ext/test_except.c +10 -21
- data/ext/isomorfeus_ferret_ext/test_fields.c +62 -68
- data/ext/isomorfeus_ferret_ext/test_file_deleter.c +15 -23
- data/ext/isomorfeus_ferret_ext/test_filter.c +17 -27
- data/ext/isomorfeus_ferret_ext/test_global.c +14 -29
- data/ext/isomorfeus_ferret_ext/test_hash.c +19 -38
- data/ext/isomorfeus_ferret_ext/test_hashset.c +8 -16
- data/ext/isomorfeus_ferret_ext/test_helper.c +4 -8
- data/ext/isomorfeus_ferret_ext/test_highlighter.c +16 -28
- data/ext/isomorfeus_ferret_ext/test_index.c +277 -487
- data/ext/isomorfeus_ferret_ext/test_lang.c +7 -14
- data/ext/isomorfeus_ferret_ext/test_mdbx_store.c +2 -5
- data/ext/isomorfeus_ferret_ext/test_mempool.c +5 -10
- data/ext/isomorfeus_ferret_ext/test_multimapper.c +3 -6
- data/ext/isomorfeus_ferret_ext/test_priorityqueue.c +9 -18
- data/ext/isomorfeus_ferret_ext/test_q_const_score.c +4 -6
- data/ext/isomorfeus_ferret_ext/test_q_filtered.c +3 -4
- data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +9 -15
- data/ext/isomorfeus_ferret_ext/test_q_parser.c +8 -16
- data/ext/isomorfeus_ferret_ext/test_q_span.c +19 -35
- data/ext/isomorfeus_ferret_ext/test_ram_store.c +14 -13
- data/ext/isomorfeus_ferret_ext/test_search.c +60 -109
- data/ext/isomorfeus_ferret_ext/test_segments.c +8 -13
- data/ext/isomorfeus_ferret_ext/test_similarity.c +2 -4
- data/ext/isomorfeus_ferret_ext/test_sort.c +14 -24
- data/ext/isomorfeus_ferret_ext/test_store.c +96 -115
- data/ext/isomorfeus_ferret_ext/test_term.c +9 -15
- data/ext/isomorfeus_ferret_ext/test_term_vectors.c +9 -14
- data/ext/isomorfeus_ferret_ext/test_test.c +4 -8
- data/ext/isomorfeus_ferret_ext/test_threading.c +14 -20
- data/ext/isomorfeus_ferret_ext/testhelper.c +11 -21
- data/ext/isomorfeus_ferret_ext/testhelper.h +1 -1
- data/ext/isomorfeus_ferret_ext/tests_all.h +1 -2
- data/lib/isomorfeus/ferret/index/index.rb +1 -1
- data/lib/isomorfeus/ferret/version.rb +1 -1
- metadata +24 -4
@@ -77,10 +77,10 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
77
77
|
|
78
78
|
#if defined(__riscv) || defined(__riscv__) || defined(__RISCV) || \
|
79
79
|
defined(__RISCV__)
|
80
|
-
#warning The RISC-V architecture is intentionally insecure by design. \
|
80
|
+
#warning "The RISC-V architecture is intentionally insecure by design. \
|
81
81
|
Please delete this admonition at your own risk, \
|
82
82
|
if you make such decision informed and consciously. \
|
83
|
-
Refer to https://clck.ru/32d9xH for more information.
|
83
|
+
Refer to https://clck.ru/32d9xH for more information."
|
84
84
|
#endif /* RISC-V */
|
85
85
|
|
86
86
|
#ifdef _MSC_VER
|
@@ -1926,6 +1926,15 @@ enum MDBX_error_t {
|
|
1926
1926
|
/** Overlapping read and write transactions for the current thread */
|
1927
1927
|
MDBX_TXN_OVERLAPPING = -30415,
|
1928
1928
|
|
1929
|
+
/** Internal error returned in case of insufficient free pages
|
1930
|
+
* during GC update. Used as a debugging aid.
|
1931
|
+
* \note From the user's point of view, semantically
|
1932
|
+
* is equivalent to \ref MDBX_PROBLEM. */
|
1933
|
+
MDBX_BACKLOG_DEPLETED = -30414,
|
1934
|
+
|
1935
|
+
/** Alternative/Duplicate LCK-file is exists and should be removed manually */
|
1936
|
+
MDBX_DUPLICATED_CLK = -30413,
|
1937
|
+
|
1929
1938
|
/* The last of MDBX-added error codes */
|
1930
1939
|
MDBX_LAST_ADDED_ERRCODE = MDBX_TXN_OVERLAPPING,
|
1931
1940
|
|
@@ -2220,6 +2229,39 @@ enum MDBX_option_t {
|
|
2220
2229
|
* to 50% (half empty) which corresponds to the range from 8192 and to 32768
|
2221
2230
|
* in units respectively. */
|
2222
2231
|
MDBX_opt_merge_threshold_16dot16_percent,
|
2232
|
+
|
2233
|
+
/** \brief Controls the choosing between use write-through disk writes and
|
2234
|
+
* usual ones with followed flush by the `fdatasync()` syscall.
|
2235
|
+
* \details Depending on the operating system, storage subsystem
|
2236
|
+
* characteristics and the use case, higher performance can be achieved by
|
2237
|
+
* either using write-through or a serie of usual/lazy writes followed by
|
2238
|
+
* the flush-to-disk.
|
2239
|
+
*
|
2240
|
+
* Basically for N chunks the latency/cost of write-through is:
|
2241
|
+
* latency = N * (emit + round-trip-to-storage + storage-execution);
|
2242
|
+
* And for serie of lazy writes with flush is:
|
2243
|
+
* latency = N * (emit + storage-execution) + flush + round-trip-to-storage.
|
2244
|
+
*
|
2245
|
+
* So, for large N and/or noteable round-trip-to-storage the write+flush
|
2246
|
+
* approach is win. But for small N and/or near-zero NVMe-like latency
|
2247
|
+
* the write-through is better.
|
2248
|
+
*
|
2249
|
+
* To solve this issue libmdbx provide `MDBX_opt_writethrough_threshold`:
|
2250
|
+
* - when N described above less or equal specified threshold,
|
2251
|
+
* a write-through approach will be used;
|
2252
|
+
* - otherwise, when N great than specified threshold,
|
2253
|
+
* a write-and-flush approach will be used.
|
2254
|
+
*
|
2255
|
+
* \note MDBX_opt_writethrough_threshold affects only \ref MDBX_SYNC_DURABLE
|
2256
|
+
* mode without \ref MDBX_WRITEMAP, and not supported on Windows.
|
2257
|
+
* On Windows a write-through is used always but \ref MDBX_NOMETASYNC could
|
2258
|
+
* be used for switching to write-and-flush. */
|
2259
|
+
MDBX_opt_writethrough_threshold,
|
2260
|
+
|
2261
|
+
/** \brief Controls prevention of page-faults of reclaimed and allocated pages
|
2262
|
+
* in the \ref MDBX_WRITEMAP mode by clearing ones through file handle before
|
2263
|
+
* touching. */
|
2264
|
+
MDBX_opt_prefault_write_enable,
|
2223
2265
|
};
|
2224
2266
|
#ifndef __cplusplus
|
2225
2267
|
/** \ingroup c_settings */
|
@@ -2555,16 +2597,18 @@ struct MDBX_envinfo {
|
|
2555
2597
|
* first process opened the database after everyone had previously closed it).
|
2556
2598
|
*/
|
2557
2599
|
struct {
|
2558
|
-
uint64_t newly;
|
2559
|
-
uint64_t cow;
|
2560
|
-
uint64_t clone;
|
2561
|
-
|
2562
|
-
uint64_t split;
|
2563
|
-
uint64_t merge;
|
2564
|
-
uint64_t spill;
|
2565
|
-
uint64_t unspill;
|
2566
|
-
uint64_t wops;
|
2567
|
-
|
2600
|
+
uint64_t newly; /**< Quantity of a new pages added */
|
2601
|
+
uint64_t cow; /**< Quantity of pages copied for update */
|
2602
|
+
uint64_t clone; /**< Quantity of parent's dirty pages clones
|
2603
|
+
for nested transactions */
|
2604
|
+
uint64_t split; /**< Page splits */
|
2605
|
+
uint64_t merge; /**< Page merges */
|
2606
|
+
uint64_t spill; /**< Quantity of spilled dirty pages */
|
2607
|
+
uint64_t unspill; /**< Quantity of unspilled/reloaded pages */
|
2608
|
+
uint64_t wops; /**< Number of explicit write operations (not a pages)
|
2609
|
+
to a disk */
|
2610
|
+
uint64_t prefault; /**< Number of prefault write operations (not a pages) */
|
2611
|
+
uint64_t mincore; /**< Number of mincore() calls */
|
2568
2612
|
uint64_t
|
2569
2613
|
msync; /**< Number of explicit msync-to-disk operations (not a pages) */
|
2570
2614
|
uint64_t
|
@@ -3735,75 +3779,69 @@ struct MDBX_commit_latency {
|
|
3735
3779
|
/** \brief User-mode CPU time spent on GC update. */
|
3736
3780
|
uint32_t gc_cputime;
|
3737
3781
|
|
3738
|
-
/** \brief
|
3739
|
-
* \note
|
3740
|
-
*
|
3741
|
-
*
|
3742
|
-
* \ref MDBX_ENABLE_PROFGC.
|
3743
|
-
*
|
3744
|
-
*
|
3782
|
+
/** \brief Information for profiling GC performance.
|
3783
|
+
* \note Statistics is common for all processes working with one
|
3784
|
+
* database file and is stored in the LCK file. Data is accumulated when fixing all
|
3785
|
+
* transactions, but only in libmdbx builds with the option set
|
3786
|
+
* \ref MDBX_ENABLE_PROFGC. Collected statistics are returned to any process
|
3787
|
+
* when using \ref mdbx_txn_commit_ex() and reset to zero at the same time
|
3788
|
+
* when completing top-level transactions (not nested). */
|
3745
3789
|
struct {
|
3746
|
-
/** \brief
|
3747
|
-
*
|
3790
|
+
/** \brief Number of GC update iterations,
|
3791
|
+
* more than 1 if there were repetitions/restarts. */
|
3748
3792
|
uint32_t wloops;
|
3749
|
-
/** \brief
|
3793
|
+
/** \brief Number of iterations to merge GC records. */
|
3750
3794
|
uint32_t coalescences;
|
3751
|
-
/** \brief
|
3752
|
-
*
|
3795
|
+
/** \brief Number of previous reliable/sustainable kills
|
3796
|
+
* fixation points when working in the mode \ref MDBX_UTTERLY_NOSYNC. */
|
3753
3797
|
uint32_t wipes;
|
3754
|
-
/** \brief
|
3755
|
-
*
|
3798
|
+
/** \brief Number of forced commits per disk
|
3799
|
+
* in order to avoid incrementing the database when working outside the mode
|
3756
3800
|
* \ref MDBX_UTTERLY_NOSYNC. */
|
3757
3801
|
uint32_t flushes;
|
3758
|
-
/** \brief
|
3759
|
-
*
|
3802
|
+
/** \brief Number of calls to the mechanism Handle-Slow-Readers
|
3803
|
+
* to avoid database increment.
|
3760
3804
|
* \see MDBX_hsr_func */
|
3761
3805
|
uint32_t kicks;
|
3762
3806
|
|
3763
|
-
/** \brief
|
3764
|
-
* GC
|
3807
|
+
/** \brief Slow path execution counter
|
3808
|
+
* GC for user data. */
|
3765
3809
|
uint32_t work_counter;
|
3766
|
-
/** \brief
|
3767
|
-
* GC
|
3810
|
+
/** \brief The "by wall clock" time spent reading and searching within
|
3811
|
+
* GC for user data. */
|
3768
3812
|
uint32_t work_rtime_monotonic;
|
3769
|
-
/** \brief
|
3770
|
-
*
|
3771
|
-
*
|
3772
|
-
uint32_t
|
3773
|
-
/** \brief
|
3774
|
-
*
|
3775
|
-
uint32_t work_rtime_cpu;
|
3776
|
-
/** \brief Количество итераций поиска внутри GC при выделении страниц
|
3777
|
-
* ради данных пользователя. */
|
3813
|
+
/** \brief CPU time in user mode spent
|
3814
|
+
* to prepare pages retrieved from GC for user data,
|
3815
|
+
* including paging from disk. */
|
3816
|
+
uint32_t work_xtime_cpu;
|
3817
|
+
/** \brief Number of search iterations within the GC when selecting pages
|
3818
|
+
* For the sake of user data. */
|
3778
3819
|
uint32_t work_rsteps;
|
3779
|
-
/** \brief
|
3780
|
-
*
|
3820
|
+
/** \brief Number of queries to allocate page sequences
|
3821
|
+
* For the sake of user data. */
|
3781
3822
|
uint32_t work_xpages;
|
3782
|
-
/** \brief
|
3783
|
-
*
|
3823
|
+
/** \brief Number of page faults within GC.
|
3824
|
+
* when selecting and preparing pages for user data. */
|
3784
3825
|
uint32_t work_majflt;
|
3785
3826
|
|
3786
|
-
/** \brief
|
3787
|
-
*
|
3827
|
+
/** \brief Slow path execution count
|
3828
|
+
* GC for the purpose of maintaining and updating the GC itself. */
|
3788
3829
|
uint32_t self_counter;
|
3789
|
-
/** \brief
|
3790
|
-
*
|
3830
|
+
/** \brief The "by wall clock" time spent reading and searching inside
|
3831
|
+
* GC for the purpose of maintaining and updating the GC itself. */
|
3791
3832
|
uint32_t self_rtime_monotonic;
|
3792
|
-
/** \brief
|
3793
|
-
*
|
3794
|
-
*
|
3795
|
-
uint32_t
|
3796
|
-
/** \brief
|
3797
|
-
*
|
3798
|
-
uint32_t self_rtime_cpu;
|
3799
|
-
/** \brief Количество итераций поиска внутри GC при выделении страниц
|
3800
|
-
* для целей поддержки и обновления самой GC. */
|
3833
|
+
/** \brief CPU time in user mode spent on preparing
|
3834
|
+
* pages retrieved from GC for the purpose of maintaining and updating GC itself,
|
3835
|
+
* including paging from disk. */
|
3836
|
+
uint32_t self_xtime_cpu;
|
3837
|
+
/** \brief Number of search iterations within the GC when highlighting pages
|
3838
|
+
* for the purpose of maintaining and updating the GC itself. */
|
3801
3839
|
uint32_t self_rsteps;
|
3802
|
-
/** \brief
|
3803
|
-
*
|
3840
|
+
/** \brief Number of requests for page sequences allocation
|
3841
|
+
* for GC itself. */
|
3804
3842
|
uint32_t self_xpages;
|
3805
|
-
/** \brief
|
3806
|
-
*
|
3843
|
+
/** \brief Number of page faults inside the GC.
|
3844
|
+
* when selecting and preparing pages for the GC itself. */
|
3807
3845
|
uint32_t self_majflt;
|
3808
3846
|
} gc_prof;
|
3809
3847
|
};
|
@@ -4128,6 +4166,8 @@ typedef int(MDBX_cmp_func)(const MDBX_val *a,
|
|
4128
4166
|
* by current thread. */
|
4129
4167
|
LIBMDBX_API int mdbx_dbi_open(MDBX_txn *txn, const char *name,
|
4130
4168
|
MDBX_db_flags_t flags, MDBX_dbi *dbi);
|
4169
|
+
LIBMDBX_API int mdbx_dbi_open2(MDBX_txn *txn, const MDBX_val *name,
|
4170
|
+
MDBX_db_flags_t flags, MDBX_dbi *dbi);
|
4131
4171
|
|
4132
4172
|
/** \deprecated Please
|
4133
4173
|
* \ref avoid_custom_comparators "avoid using custom comparators" and use
|
@@ -4147,6 +4187,9 @@ LIBMDBX_API int mdbx_dbi_open(MDBX_txn *txn, const char *name,
|
|
4147
4187
|
MDBX_DEPRECATED LIBMDBX_API int
|
4148
4188
|
mdbx_dbi_open_ex(MDBX_txn *txn, const char *name, MDBX_db_flags_t flags,
|
4149
4189
|
MDBX_dbi *dbi, MDBX_cmp_func *keycmp, MDBX_cmp_func *datacmp);
|
4190
|
+
MDBX_DEPRECATED LIBMDBX_API int
|
4191
|
+
mdbx_dbi_open_ex2(MDBX_txn *txn, const MDBX_val *name, MDBX_db_flags_t flags,
|
4192
|
+
MDBX_dbi *dbi, MDBX_cmp_func *keycmp, MDBX_cmp_func *datacmp);
|
4150
4193
|
|
4151
4194
|
/** \defgroup value2key Value-to-Key functions
|
4152
4195
|
* \brief Value-to-Key functions to
|
@@ -5444,18 +5487,20 @@ typedef enum MDBX_page_type_t MDBX_page_type_t;
|
|
5444
5487
|
#endif
|
5445
5488
|
|
5446
5489
|
/** \brief Pseudo-name for MainDB */
|
5447
|
-
#define MDBX_PGWALK_MAIN ((
|
5490
|
+
#define MDBX_PGWALK_MAIN ((void *)((ptrdiff_t)0))
|
5448
5491
|
/** \brief Pseudo-name for GarbageCollectorDB */
|
5449
|
-
#define MDBX_PGWALK_GC ((
|
5492
|
+
#define MDBX_PGWALK_GC ((void *)((ptrdiff_t)-1))
|
5450
5493
|
/** \brief Pseudo-name for MetaPages */
|
5451
|
-
#define MDBX_PGWALK_META ((
|
5494
|
+
#define MDBX_PGWALK_META ((void *)((ptrdiff_t)-2))
|
5452
5495
|
|
5453
5496
|
/** \brief Callback function for traverse the b-tree. \see mdbx_env_pgwalk() */
|
5454
|
-
typedef int
|
5455
|
-
|
5456
|
-
|
5457
|
-
|
5458
|
-
|
5497
|
+
typedef int
|
5498
|
+
MDBX_pgvisitor_func(const uint64_t pgno, const unsigned number, void *const ctx,
|
5499
|
+
const int deep, const MDBX_val *dbi_name,
|
5500
|
+
const size_t page_size, const MDBX_page_type_t type,
|
5501
|
+
const MDBX_error_t err, const size_t nentries,
|
5502
|
+
const size_t payload_bytes, const size_t header_bytes,
|
5503
|
+
const size_t unused_bytes) MDBX_CXX17_NOEXCEPT;
|
5459
5504
|
|
5460
5505
|
/** \brief B-tree traversal function. */
|
5461
5506
|
LIBMDBX_API int mdbx_env_pgwalk(MDBX_txn *txn, MDBX_pgvisitor_func *visitor,
|
@@ -45,8 +45,7 @@ static char *msg_buf;
|
|
45
45
|
static char *msg_bufp;
|
46
46
|
|
47
47
|
/* Determine if the test should be run at all */
|
48
|
-
static bool should_test_run(const char *testname)
|
49
|
-
{
|
48
|
+
static bool should_test_run(const char *testname) {
|
50
49
|
if (list_tests == true) {
|
51
50
|
/* when listing tests, don't run any of them */
|
52
51
|
return false;
|
@@ -60,16 +59,14 @@ static void reset_stats(void) {
|
|
60
59
|
f_cnt = 0;
|
61
60
|
}
|
62
61
|
|
63
|
-
static void reset_status(void)
|
64
|
-
{
|
62
|
+
static void reset_status(void) {
|
65
63
|
curr_char = 0;
|
66
64
|
}
|
67
65
|
|
68
66
|
/* Basically this just deletes the previous character and replaces it with the
|
69
67
|
* next character in the ticker array. If the tests run slowly enough it will
|
70
68
|
* look like a spinning bar. */
|
71
|
-
static void update_status(void)
|
72
|
-
{
|
69
|
+
static void update_status(void) {
|
73
70
|
if (!quiet) {
|
74
71
|
curr_char = (curr_char + 1) % TST_STAT_SIZE;
|
75
72
|
fprintf(stdout, "\b%c", status[curr_char]);
|
@@ -81,8 +78,7 @@ static void update_status(void)
|
|
81
78
|
/*
|
82
79
|
* Ends the test suite by writing SUCCESS or FAILED at the end of the test
|
83
80
|
* results in the diagnostics. */
|
84
|
-
static void end_suite(TestSuite *suite)
|
85
|
-
{
|
81
|
+
static void end_suite(TestSuite *suite) {
|
86
82
|
if (suite != NULL) {
|
87
83
|
TestSubSuite *last = suite->tail;
|
88
84
|
if (!quiet) {
|
@@ -92,8 +88,7 @@ static void end_suite(TestSuite *suite)
|
|
92
88
|
if (last->failed == 0) {
|
93
89
|
fprintf(stdout, " -> SUCCESS\n");
|
94
90
|
fflush(stdout);
|
95
|
-
}
|
96
|
-
else {
|
91
|
+
} else {
|
97
92
|
fprintf(stdout, " -> FAILED %d of %d\n", last->failed,
|
98
93
|
last->num_test);
|
99
94
|
fflush(stdout);
|
@@ -101,8 +96,7 @@ static void end_suite(TestSuite *suite)
|
|
101
96
|
}
|
102
97
|
}
|
103
98
|
|
104
|
-
TestSuite *tst_add_suite(TestSuite *suite, const char *suite_name_full)
|
105
|
-
{
|
99
|
+
TestSuite *tst_add_suite(TestSuite *suite, const char *suite_name_full) {
|
106
100
|
TestSubSuite *subsuite;
|
107
101
|
char *p;
|
108
102
|
const char *suite_name;
|
@@ -127,8 +121,7 @@ TestSuite *tst_add_suite(TestSuite *suite, const char *suite_name_full)
|
|
127
121
|
suite_name = strrchr(suite_name_full, '/');
|
128
122
|
if (suite_name) {
|
129
123
|
suite_name++;
|
130
|
-
}
|
131
|
-
else {
|
124
|
+
} else {
|
132
125
|
suite_name = suite_name_full;
|
133
126
|
}
|
134
127
|
/* strip extension */
|
@@ -153,8 +146,7 @@ TestSuite *tst_add_suite(TestSuite *suite, const char *suite_name_full)
|
|
153
146
|
suite = (TestSuite *)malloc(sizeof(*suite));
|
154
147
|
suite->head = subsuite;
|
155
148
|
suite->tail = subsuite;
|
156
|
-
}
|
157
|
-
else {
|
149
|
+
} else {
|
158
150
|
/* Add the current suite to the tail of the suite linked list */
|
159
151
|
suite->tail->next = subsuite;
|
160
152
|
suite->tail = subsuite;
|
@@ -174,8 +166,7 @@ TestSuite *tst_add_suite(TestSuite *suite, const char *suite_name_full)
|
|
174
166
|
return suite;
|
175
167
|
}
|
176
168
|
|
177
|
-
void tst_run_test_with_name(TestSuite *ts, test_func f, void *value, const char *func_name)
|
178
|
-
{
|
169
|
+
void tst_run_test_with_name(TestSuite *ts, test_func f, void *value, const char *func_name) {
|
179
170
|
TestCase tc;
|
180
171
|
TestSubSuite *ss;
|
181
172
|
|
@@ -199,24 +190,20 @@ void tst_run_test_with_name(TestSuite *ts, test_func f, void *value, const char
|
|
199
190
|
ss->failed++;
|
200
191
|
if (quiet) {
|
201
192
|
printf("F");
|
202
|
-
}
|
203
|
-
else {
|
193
|
+
} else {
|
204
194
|
printf("\bF_");
|
205
195
|
}
|
206
|
-
}
|
207
|
-
else {
|
196
|
+
} else {
|
208
197
|
if (quiet) {
|
209
198
|
printf(".");
|
210
|
-
}
|
211
|
-
else {
|
199
|
+
} else {
|
212
200
|
printf("\b._");
|
213
201
|
}
|
214
202
|
}
|
215
203
|
update_status();
|
216
204
|
}
|
217
205
|
|
218
|
-
static int report(TestSuite *suite)
|
219
|
-
{
|
206
|
+
static int report(TestSuite *suite) {
|
220
207
|
int count = 0;
|
221
208
|
TestSubSuite *dptr;
|
222
209
|
|
@@ -260,8 +247,7 @@ static int report(TestSuite *suite)
|
|
260
247
|
static const char *curr_err_func = "";
|
261
248
|
|
262
249
|
#define MSG_BUF_HAVE MAX_MSG_SIZE - (msg_bufp - msg_buf) - 1
|
263
|
-
static void vappend_to_msg_buf(const char *fmt, va_list args)
|
264
|
-
{
|
250
|
+
static void vappend_to_msg_buf(const char *fmt, va_list args) {
|
265
251
|
int v = vsnprintf(msg_bufp, MSG_BUF_HAVE, fmt, args);
|
266
252
|
if (v < 0) {
|
267
253
|
rb_raise(rb_eStandardError, "Error: can't write to test message buffer\n");
|
@@ -270,8 +256,7 @@ static void vappend_to_msg_buf(const char *fmt, va_list args)
|
|
270
256
|
}
|
271
257
|
}
|
272
258
|
|
273
|
-
static void append_to_msg_buf(const char *fmt, ...)
|
274
|
-
{
|
259
|
+
static void append_to_msg_buf(const char *fmt, ...) {
|
275
260
|
va_list args;
|
276
261
|
|
277
262
|
va_start(args, fmt);
|
@@ -279,15 +264,13 @@ static void append_to_msg_buf(const char *fmt, ...)
|
|
279
264
|
va_end(args);
|
280
265
|
}
|
281
266
|
|
282
|
-
static void vTmsg_nf(const char *fmt, va_list args)
|
283
|
-
{
|
267
|
+
static void vTmsg_nf(const char *fmt, va_list args) {
|
284
268
|
if (verbose) {
|
285
269
|
vappend_to_msg_buf(fmt, args);
|
286
270
|
}
|
287
271
|
}
|
288
272
|
|
289
|
-
void vTmsg(const char *fmt, va_list args)
|
290
|
-
{
|
273
|
+
void vTmsg(const char *fmt, va_list args) {
|
291
274
|
if (verbose) {
|
292
275
|
append_to_msg_buf("\t");
|
293
276
|
vappend_to_msg_buf(fmt, args);
|
@@ -296,8 +279,7 @@ void vTmsg(const char *fmt, va_list args)
|
|
296
279
|
}
|
297
280
|
}
|
298
281
|
|
299
|
-
void Tmsg(const char *fmt, ...)
|
300
|
-
{
|
282
|
+
void Tmsg(const char *fmt, ...) {
|
301
283
|
va_list args;
|
302
284
|
|
303
285
|
va_start(args, fmt);
|
@@ -305,8 +287,7 @@ void Tmsg(const char *fmt, ...)
|
|
305
287
|
va_end(args);
|
306
288
|
}
|
307
289
|
|
308
|
-
void Tmsg_nf(const char *fmt, ...)
|
309
|
-
{
|
290
|
+
void Tmsg_nf(const char *fmt, ...) {
|
310
291
|
va_list args;
|
311
292
|
|
312
293
|
va_start(args, fmt);
|
@@ -314,8 +295,7 @@ void Tmsg_nf(const char *fmt, ...)
|
|
314
295
|
va_end(args);
|
315
296
|
}
|
316
297
|
|
317
|
-
void tst_msg(const char *func, const char *fname, int line_num, const char *fmt, ...)
|
318
|
-
{
|
298
|
+
void tst_msg(const char *func, const char *fname, int line_num, const char *fmt, ...) {
|
319
299
|
int i;
|
320
300
|
va_list args;
|
321
301
|
|
@@ -338,8 +318,7 @@ void tst_msg(const char *func, const char *fname, int line_num, const char *fmt,
|
|
338
318
|
}
|
339
319
|
|
340
320
|
bool tst_raise(int line_num, TestCase *tc, const int err_code,
|
341
|
-
void (*func)(void *args), void *args)
|
342
|
-
{
|
321
|
+
void (*func)(void *args), void *args) {
|
343
322
|
volatile bool was_raised = false;
|
344
323
|
a_cnt++;
|
345
324
|
update_status();
|
@@ -353,8 +332,7 @@ bool tst_raise(int line_num, TestCase *tc, const int err_code,
|
|
353
332
|
default:
|
354
333
|
if (err_code == xcontext.excode) {
|
355
334
|
was_raised = true;
|
356
|
-
}
|
357
|
-
else {
|
335
|
+
} else {
|
358
336
|
tc->failed = true;
|
359
337
|
tst_msg(tc->name, tc->suite->name, line_num,
|
360
338
|
"exception %d raised unexpectedly with msg;\n\"\"\"\n%s\n\"\"\"\n",
|
@@ -371,16 +349,14 @@ bool tst_raise(int line_num, TestCase *tc, const int err_code,
|
|
371
349
|
}
|
372
350
|
if (tc->failed) {
|
373
351
|
return false;
|
374
|
-
}
|
375
|
-
else {
|
352
|
+
} else {
|
376
353
|
return true;
|
377
354
|
}
|
378
355
|
}
|
379
356
|
|
380
357
|
#define I64_PFX POSH_I64_PRINTF_PREFIX
|
381
358
|
bool tst_int_equal(int line_num, TestCase *tc, const frt_u64 expected,
|
382
|
-
const frt_u64 actual)
|
383
|
-
{
|
359
|
+
const frt_u64 actual) {
|
384
360
|
a_cnt++;
|
385
361
|
update_status();
|
386
362
|
if (tc->failed && !force) {
|
@@ -399,8 +375,7 @@ bool tst_int_equal(int line_num, TestCase *tc, const frt_u64 expected,
|
|
399
375
|
}
|
400
376
|
|
401
377
|
bool tst_flt_delta_equal(int line_num, TestCase *tc, const double expected,
|
402
|
-
const double actual, const double delta)
|
403
|
-
{
|
378
|
+
const double actual, const double delta) {
|
404
379
|
double diff;
|
405
380
|
a_cnt++;
|
406
381
|
update_status();
|
@@ -426,14 +401,12 @@ bool tst_flt_delta_equal(int line_num, TestCase *tc, const double expected,
|
|
426
401
|
}
|
427
402
|
|
428
403
|
bool tst_flt_equal(int line_num, TestCase *tc, const double expected,
|
429
|
-
const double actual)
|
430
|
-
{
|
404
|
+
const double actual) {
|
431
405
|
return tst_flt_delta_equal(line_num, tc, expected, actual, 0.00001);
|
432
406
|
}
|
433
407
|
|
434
408
|
bool tst_str_equal(int line_num, TestCase *tc, const char *expected,
|
435
|
-
const char *actual)
|
436
|
-
{
|
409
|
+
const char *actual) {
|
437
410
|
a_cnt++;
|
438
411
|
update_status();
|
439
412
|
if (tc->failed && !force) {
|
@@ -454,8 +427,7 @@ bool tst_str_equal(int line_num, TestCase *tc, const char *expected,
|
|
454
427
|
}
|
455
428
|
|
456
429
|
bool tst_strstr(int line_num, TestCase *tc, const char *haystack,
|
457
|
-
const char *needle)
|
458
|
-
{
|
430
|
+
const char *needle) {
|
459
431
|
a_cnt++;
|
460
432
|
update_status();
|
461
433
|
if (tc->failed && !force) {
|
@@ -476,8 +448,7 @@ bool tst_strstr(int line_num, TestCase *tc, const char *haystack,
|
|
476
448
|
}
|
477
449
|
|
478
450
|
bool tst_arr_int_equal(int line_num, TestCase *tc, const int *expected,
|
479
|
-
const int *actual, int size)
|
480
|
-
{
|
451
|
+
const int *actual, int size) {
|
481
452
|
a_cnt++;
|
482
453
|
update_status();
|
483
454
|
if (tc->failed && !force) {
|
@@ -503,8 +474,7 @@ bool tst_arr_int_equal(int line_num, TestCase *tc, const int *expected,
|
|
503
474
|
}
|
504
475
|
|
505
476
|
bool tst_arr_str_equal(int line_num, TestCase *tc, const char **expected,
|
506
|
-
const char **actual, int size)
|
507
|
-
{
|
477
|
+
const char **actual, int size) {
|
508
478
|
a_cnt++;
|
509
479
|
update_status();
|
510
480
|
if (tc->failed && !force) {
|
@@ -530,8 +500,7 @@ bool tst_arr_str_equal(int line_num, TestCase *tc, const char **expected,
|
|
530
500
|
}
|
531
501
|
|
532
502
|
bool tst_str_nequal(int line_num, TestCase *tc, const char *expected,
|
533
|
-
const char *actual, size_t n)
|
534
|
-
{
|
503
|
+
const char *actual, size_t n) {
|
535
504
|
char *buf1;
|
536
505
|
char *buf2;
|
537
506
|
|
@@ -557,8 +526,7 @@ bool tst_str_nequal(int line_num, TestCase *tc, const char *expected,
|
|
557
526
|
return false;
|
558
527
|
}
|
559
528
|
|
560
|
-
bool tst_ptr_null(int line_num, TestCase *tc, const void *ptr)
|
561
|
-
{
|
529
|
+
bool tst_ptr_null(int line_num, TestCase *tc, const void *ptr) {
|
562
530
|
a_cnt++;
|
563
531
|
update_status();
|
564
532
|
if (tc->failed && !force) {
|
@@ -574,8 +542,7 @@ bool tst_ptr_null(int line_num, TestCase *tc, const void *ptr)
|
|
574
542
|
return false;
|
575
543
|
}
|
576
544
|
|
577
|
-
bool tst_ptr_notnull(int line_num, TestCase *tc, const void *ptr)
|
578
|
-
{
|
545
|
+
bool tst_ptr_notnull(int line_num, TestCase *tc, const void *ptr) {
|
579
546
|
a_cnt++;
|
580
547
|
update_status();
|
581
548
|
if (tc->failed && !force) {
|
@@ -592,8 +559,7 @@ bool tst_ptr_notnull(int line_num, TestCase *tc, const void *ptr)
|
|
592
559
|
}
|
593
560
|
|
594
561
|
bool tst_ptr_equal(int line_num, TestCase *tc, const void *expected,
|
595
|
-
const void *actual)
|
596
|
-
{
|
562
|
+
const void *actual) {
|
597
563
|
a_cnt++;
|
598
564
|
update_status();
|
599
565
|
if (tc->failed && !force) {
|
@@ -610,8 +576,7 @@ bool tst_ptr_equal(int line_num, TestCase *tc, const void *expected,
|
|
610
576
|
return false;
|
611
577
|
}
|
612
578
|
|
613
|
-
bool tst_fail(int line_num, TestCase *tc, const char *fmt, ...)
|
614
|
-
{
|
579
|
+
bool tst_fail(int line_num, TestCase *tc, const char *fmt, ...) {
|
615
580
|
va_list args;
|
616
581
|
a_cnt++;
|
617
582
|
update_status();
|
@@ -626,8 +591,7 @@ bool tst_fail(int line_num, TestCase *tc, const char *fmt, ...)
|
|
626
591
|
return false;
|
627
592
|
}
|
628
593
|
|
629
|
-
bool tst_assert(int line_num, TestCase *tc, int condition, const char *fmt, ...)
|
630
|
-
{
|
594
|
+
bool tst_assert(int line_num, TestCase *tc, int condition, const char *fmt, ...) {
|
631
595
|
va_list args;
|
632
596
|
a_cnt++;
|
633
597
|
update_status();
|
@@ -647,8 +611,7 @@ bool tst_assert(int line_num, TestCase *tc, int condition, const char *fmt, ...)
|
|
647
611
|
return false;
|
648
612
|
}
|
649
613
|
|
650
|
-
bool tst_true(int line_num, TestCase *tc, int condition)
|
651
|
-
{
|
614
|
+
bool tst_true(int line_num, TestCase *tc, int condition) {
|
652
615
|
a_cnt++;
|
653
616
|
update_status();
|
654
617
|
if (tc->failed && !force) {
|
@@ -666,8 +629,7 @@ bool tst_true(int line_num, TestCase *tc, int condition)
|
|
666
629
|
return false;
|
667
630
|
}
|
668
631
|
|
669
|
-
bool tst_not_impl(int line_num, TestCase *tc, const char *message)
|
670
|
-
{
|
632
|
+
bool tst_not_impl(int line_num, TestCase *tc, const char *message) {
|
671
633
|
a_cnt++;
|
672
634
|
update_status();
|
673
635
|
|
@@ -677,12 +639,10 @@ bool tst_not_impl(int line_num, TestCase *tc, const char *message)
|
|
677
639
|
}
|
678
640
|
|
679
641
|
#ifndef FRT_HAS_VARARGS
|
680
|
-
bool Assert(int condition, const char *fmt, ...)
|
681
|
-
{
|
642
|
+
bool Assert(int condition, const char *fmt, ...) {
|
682
643
|
if (condition) {
|
683
644
|
return true;
|
684
|
-
}
|
685
|
-
else {
|
645
|
+
} else {
|
686
646
|
va_list args;
|
687
647
|
Tmsg("\n ?)");
|
688
648
|
Tmsg("Assertion failed");
|
@@ -756,12 +716,6 @@ static VALUE frb_ts_term_vectors(VALUE v) { return INT2FIX(execute_test(32)); }
|
|
756
716
|
static VALUE frb_ts_test(VALUE v) { return INT2FIX(execute_test(33)); }
|
757
717
|
static VALUE frb_ts_threading(VALUE v) { return INT2FIX(execute_test(34)); }
|
758
718
|
|
759
|
-
static VALUE frb_ts_posh(VALUE v) {
|
760
|
-
const char *posh = POSH_GetArchString();
|
761
|
-
printf("\n%s\n", posh);
|
762
|
-
return Qnil;
|
763
|
-
}
|
764
|
-
|
765
719
|
static VALUE frb_ts_run_all(VALUE v) {
|
766
720
|
int i, test_count;
|
767
721
|
int rv = 0;
|
@@ -832,6 +786,5 @@ void Init_Test(void) {
|
|
832
786
|
rb_define_singleton_method(mTest, "term_vectors", frb_ts_term_vectors, 0);
|
833
787
|
rb_define_singleton_method(mTest, "test", frb_ts_test, 0);
|
834
788
|
rb_define_singleton_method(mTest, "threading", frb_ts_threading, 0);
|
835
|
-
rb_define_singleton_method(mTest, "posh", frb_ts_posh, 0);
|
836
789
|
rb_define_singleton_method(mTest, "run_all", frb_ts_run_all, 0);
|
837
790
|
}
|