isomorfeus-ferret 0.17.2 → 0.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
}
|