minimap2 0.2.25.0 → 0.2.25.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -3
  3. data/ext/minimap2/Makefile +6 -2
  4. data/ext/minimap2/NEWS.md +38 -0
  5. data/ext/minimap2/README.md +9 -3
  6. data/ext/minimap2/align.c +5 -3
  7. data/ext/minimap2/cookbook.md +2 -2
  8. data/ext/minimap2/format.c +7 -4
  9. data/ext/minimap2/kalloc.c +20 -1
  10. data/ext/minimap2/kalloc.h +13 -2
  11. data/ext/minimap2/ksw2.h +1 -0
  12. data/ext/minimap2/ksw2_extd2_sse.c +1 -1
  13. data/ext/minimap2/ksw2_exts2_sse.c +79 -40
  14. data/ext/minimap2/ksw2_extz2_sse.c +1 -1
  15. data/ext/minimap2/lchain.c +15 -16
  16. data/ext/minimap2/lib/simde/CONTRIBUTING.md +114 -0
  17. data/ext/minimap2/lib/simde/COPYING +20 -0
  18. data/ext/minimap2/lib/simde/README.md +333 -0
  19. data/ext/minimap2/lib/simde/amalgamate.py +58 -0
  20. data/ext/minimap2/lib/simde/meson.build +33 -0
  21. data/ext/minimap2/lib/simde/netlify.toml +20 -0
  22. data/ext/minimap2/lib/simde/simde/arm/neon/float32x2.h +140 -0
  23. data/ext/minimap2/lib/simde/simde/arm/neon/float32x4.h +137 -0
  24. data/ext/minimap2/lib/simde/simde/arm/neon/float64x1.h +142 -0
  25. data/ext/minimap2/lib/simde/simde/arm/neon/float64x2.h +145 -0
  26. data/ext/minimap2/lib/simde/simde/arm/neon/int16x4.h +140 -0
  27. data/ext/minimap2/lib/simde/simde/arm/neon/int16x8.h +145 -0
  28. data/ext/minimap2/lib/simde/simde/arm/neon/int32x2.h +140 -0
  29. data/ext/minimap2/lib/simde/simde/arm/neon/int32x4.h +143 -0
  30. data/ext/minimap2/lib/simde/simde/arm/neon/int64x1.h +137 -0
  31. data/ext/minimap2/lib/simde/simde/arm/neon/int64x2.h +141 -0
  32. data/ext/minimap2/lib/simde/simde/arm/neon/int8x16.h +147 -0
  33. data/ext/minimap2/lib/simde/simde/arm/neon/int8x8.h +141 -0
  34. data/ext/minimap2/lib/simde/simde/arm/neon/uint16x4.h +134 -0
  35. data/ext/minimap2/lib/simde/simde/arm/neon/uint16x8.h +138 -0
  36. data/ext/minimap2/lib/simde/simde/arm/neon/uint32x2.h +134 -0
  37. data/ext/minimap2/lib/simde/simde/arm/neon/uint32x4.h +137 -0
  38. data/ext/minimap2/lib/simde/simde/arm/neon/uint64x1.h +131 -0
  39. data/ext/minimap2/lib/simde/simde/arm/neon/uint64x2.h +135 -0
  40. data/ext/minimap2/lib/simde/simde/arm/neon/uint8x16.h +141 -0
  41. data/ext/minimap2/lib/simde/simde/arm/neon/uint8x8.h +135 -0
  42. data/ext/minimap2/lib/simde/simde/arm/neon.h +97 -0
  43. data/ext/minimap2/lib/simde/simde/check.h +267 -0
  44. data/ext/minimap2/lib/simde/simde/debug-trap.h +83 -0
  45. data/ext/minimap2/lib/simde/simde/hedley.h +1899 -0
  46. data/ext/minimap2/lib/simde/simde/simde-arch.h +445 -0
  47. data/ext/minimap2/lib/simde/simde/simde-common.h +697 -0
  48. data/ext/minimap2/lib/simde/simde/x86/avx.h +5385 -0
  49. data/ext/minimap2/lib/simde/simde/x86/avx2.h +2402 -0
  50. data/ext/minimap2/lib/simde/simde/x86/avx512bw.h +391 -0
  51. data/ext/minimap2/lib/simde/simde/x86/avx512f.h +3389 -0
  52. data/ext/minimap2/lib/simde/simde/x86/avx512vl.h +112 -0
  53. data/ext/minimap2/lib/simde/simde/x86/fma.h +659 -0
  54. data/ext/minimap2/lib/simde/simde/x86/mmx.h +2210 -0
  55. data/ext/minimap2/lib/simde/simde/x86/sse.h +3696 -0
  56. data/ext/minimap2/lib/simde/simde/x86/sse2.h +5991 -0
  57. data/ext/minimap2/lib/simde/simde/x86/sse3.h +343 -0
  58. data/ext/minimap2/lib/simde/simde/x86/sse4.1.h +1783 -0
  59. data/ext/minimap2/lib/simde/simde/x86/sse4.2.h +105 -0
  60. data/ext/minimap2/lib/simde/simde/x86/ssse3.h +1053 -0
  61. data/ext/minimap2/lib/simde/simde/x86/svml.h +543 -0
  62. data/ext/minimap2/lib/simde/test/CMakeLists.txt +166 -0
  63. data/ext/minimap2/lib/simde/test/arm/meson.build +4 -0
  64. data/ext/minimap2/lib/simde/test/arm/neon/meson.build +23 -0
  65. data/ext/minimap2/lib/simde/test/arm/neon/skel.c +871 -0
  66. data/ext/minimap2/lib/simde/test/arm/neon/test-neon-internal.h +134 -0
  67. data/ext/minimap2/lib/simde/test/arm/neon/test-neon.c +39 -0
  68. data/ext/minimap2/lib/simde/test/arm/neon/test-neon.h +10 -0
  69. data/ext/minimap2/lib/simde/test/arm/neon/vadd.c +1260 -0
  70. data/ext/minimap2/lib/simde/test/arm/neon/vdup_n.c +873 -0
  71. data/ext/minimap2/lib/simde/test/arm/neon/vmul.c +1084 -0
  72. data/ext/minimap2/lib/simde/test/arm/neon/vsub.c +1260 -0
  73. data/ext/minimap2/lib/simde/test/arm/test-arm-internal.h +18 -0
  74. data/ext/minimap2/lib/simde/test/arm/test-arm.c +20 -0
  75. data/ext/minimap2/lib/simde/test/arm/test-arm.h +8 -0
  76. data/ext/minimap2/lib/simde/test/cmake/AddCompilerFlags.cmake +171 -0
  77. data/ext/minimap2/lib/simde/test/cmake/ExtraWarningFlags.cmake +68 -0
  78. data/ext/minimap2/lib/simde/test/meson.build +64 -0
  79. data/ext/minimap2/lib/simde/test/munit/COPYING +21 -0
  80. data/ext/minimap2/lib/simde/test/munit/Makefile +55 -0
  81. data/ext/minimap2/lib/simde/test/munit/README.md +54 -0
  82. data/ext/minimap2/lib/simde/test/munit/example.c +351 -0
  83. data/ext/minimap2/lib/simde/test/munit/meson.build +37 -0
  84. data/ext/minimap2/lib/simde/test/munit/munit.c +2055 -0
  85. data/ext/minimap2/lib/simde/test/munit/munit.h +535 -0
  86. data/ext/minimap2/lib/simde/test/run-tests.c +20 -0
  87. data/ext/minimap2/lib/simde/test/run-tests.h +260 -0
  88. data/ext/minimap2/lib/simde/test/x86/avx.c +13752 -0
  89. data/ext/minimap2/lib/simde/test/x86/avx2.c +9977 -0
  90. data/ext/minimap2/lib/simde/test/x86/avx512bw.c +2664 -0
  91. data/ext/minimap2/lib/simde/test/x86/avx512f.c +10416 -0
  92. data/ext/minimap2/lib/simde/test/x86/avx512vl.c +210 -0
  93. data/ext/minimap2/lib/simde/test/x86/fma.c +2557 -0
  94. data/ext/minimap2/lib/simde/test/x86/meson.build +33 -0
  95. data/ext/minimap2/lib/simde/test/x86/mmx.c +2878 -0
  96. data/ext/minimap2/lib/simde/test/x86/skel.c +2984 -0
  97. data/ext/minimap2/lib/simde/test/x86/sse.c +5121 -0
  98. data/ext/minimap2/lib/simde/test/x86/sse2.c +9860 -0
  99. data/ext/minimap2/lib/simde/test/x86/sse3.c +486 -0
  100. data/ext/minimap2/lib/simde/test/x86/sse4.1.c +3446 -0
  101. data/ext/minimap2/lib/simde/test/x86/sse4.2.c +101 -0
  102. data/ext/minimap2/lib/simde/test/x86/ssse3.c +2084 -0
  103. data/ext/minimap2/lib/simde/test/x86/svml.c +1545 -0
  104. data/ext/minimap2/lib/simde/test/x86/test-avx.h +16 -0
  105. data/ext/minimap2/lib/simde/test/x86/test-avx512.h +25 -0
  106. data/ext/minimap2/lib/simde/test/x86/test-mmx.h +13 -0
  107. data/ext/minimap2/lib/simde/test/x86/test-sse.h +13 -0
  108. data/ext/minimap2/lib/simde/test/x86/test-sse2.h +13 -0
  109. data/ext/minimap2/lib/simde/test/x86/test-x86-internal.h +196 -0
  110. data/ext/minimap2/lib/simde/test/x86/test-x86.c +48 -0
  111. data/ext/minimap2/lib/simde/test/x86/test-x86.h +8 -0
  112. data/ext/minimap2/main.c +13 -6
  113. data/ext/minimap2/map.c +0 -5
  114. data/ext/minimap2/minimap.h +40 -31
  115. data/ext/minimap2/minimap2.1 +19 -5
  116. data/ext/minimap2/misc/paftools.js +545 -24
  117. data/ext/minimap2/options.c +1 -1
  118. data/ext/minimap2/pyproject.toml +2 -0
  119. data/ext/minimap2/python/mappy.pyx +3 -1
  120. data/ext/minimap2/seed.c +1 -1
  121. data/ext/minimap2/setup.py +32 -22
  122. data/lib/minimap2/version.rb +1 -1
  123. metadata +100 -3
@@ -0,0 +1,535 @@
1
+ /* µnit Testing Framework
2
+ * Copyright (c) 2013-2017 Evan Nemerson <evan@nemerson.com>
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person
5
+ * obtaining a copy of this software and associated documentation
6
+ * files (the "Software"), to deal in the Software without
7
+ * restriction, including without limitation the rights to use, copy,
8
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
9
+ * of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be
13
+ * included in all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+
25
+ #if !defined(MUNIT_H)
26
+ #define MUNIT_H
27
+
28
+ #include <stdarg.h>
29
+ #include <stdlib.h>
30
+
31
+ #define MUNIT_VERSION(major, minor, revision) \
32
+ (((major) << 16) | ((minor) << 8) | (revision))
33
+
34
+ #define MUNIT_CURRENT_VERSION MUNIT_VERSION(0, 4, 1)
35
+
36
+ #if defined(_MSC_VER) && (_MSC_VER < 1600)
37
+ # define munit_int8_t __int8
38
+ # define munit_uint8_t unsigned __int8
39
+ # define munit_int16_t __int16
40
+ # define munit_uint16_t unsigned __int16
41
+ # define munit_int32_t __int32
42
+ # define munit_uint32_t unsigned __int32
43
+ # define munit_int64_t __int64
44
+ # define munit_uint64_t unsigned __int64
45
+ #else
46
+ # include <stdint.h>
47
+ # define munit_int8_t int8_t
48
+ # define munit_uint8_t uint8_t
49
+ # define munit_int16_t int16_t
50
+ # define munit_uint16_t uint16_t
51
+ # define munit_int32_t int32_t
52
+ # define munit_uint32_t uint32_t
53
+ # define munit_int64_t int64_t
54
+ # define munit_uint64_t uint64_t
55
+ #endif
56
+
57
+ #if defined(_MSC_VER) && (_MSC_VER < 1800)
58
+ # if !defined(PRIi8)
59
+ # define PRIi8 "i"
60
+ # endif
61
+ # if !defined(PRIi16)
62
+ # define PRIi16 "i"
63
+ # endif
64
+ # if !defined(PRIi32)
65
+ # define PRIi32 "i"
66
+ # endif
67
+ # if !defined(PRIi64)
68
+ # define PRIi64 "I64i"
69
+ # endif
70
+ # if !defined(PRId8)
71
+ # define PRId8 "d"
72
+ # endif
73
+ # if !defined(PRId16)
74
+ # define PRId16 "d"
75
+ # endif
76
+ # if !defined(PRId32)
77
+ # define PRId32 "d"
78
+ # endif
79
+ # if !defined(PRId64)
80
+ # define PRId64 "I64d"
81
+ # endif
82
+ # if !defined(PRIx8)
83
+ # define PRIx8 "x"
84
+ # endif
85
+ # if !defined(PRIx16)
86
+ # define PRIx16 "x"
87
+ # endif
88
+ # if !defined(PRIx32)
89
+ # define PRIx32 "x"
90
+ # endif
91
+ # if !defined(PRIx64)
92
+ # define PRIx64 "I64x"
93
+ # endif
94
+ # if !defined(PRIu8)
95
+ # define PRIu8 "u"
96
+ # endif
97
+ # if !defined(PRIu16)
98
+ # define PRIu16 "u"
99
+ # endif
100
+ # if !defined(PRIu32)
101
+ # define PRIu32 "u"
102
+ # endif
103
+ # if !defined(PRIu64)
104
+ # define PRIu64 "I64u"
105
+ # endif
106
+ #else
107
+ # include <inttypes.h>
108
+ #endif
109
+
110
+ #if !defined(munit_bool)
111
+ # if defined(bool)
112
+ # define munit_bool bool
113
+ # elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
114
+ # define munit_bool _Bool
115
+ # else
116
+ # define munit_bool int
117
+ # endif
118
+ #endif
119
+
120
+ #if defined(__cplusplus)
121
+ extern "C" {
122
+ #endif
123
+
124
+ #if defined(__GNUC__)
125
+ # define MUNIT_LIKELY(expr) (__builtin_expect ((expr), 1))
126
+ # define MUNIT_UNLIKELY(expr) (__builtin_expect ((expr), 0))
127
+ # define MUNIT_UNUSED __attribute__((__unused__))
128
+ #else
129
+ # define MUNIT_LIKELY(expr) (expr)
130
+ # define MUNIT_UNLIKELY(expr) (expr)
131
+ # define MUNIT_UNUSED
132
+ #endif
133
+
134
+ #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__PGI)
135
+ # define MUNIT_ARRAY_PARAM(name) name
136
+ #else
137
+ # define MUNIT_ARRAY_PARAM(name)
138
+ #endif
139
+
140
+ #if !defined(_WIN32)
141
+ # define MUNIT_SIZE_MODIFIER "z"
142
+ # define MUNIT_CHAR_MODIFIER "hh"
143
+ # define MUNIT_SHORT_MODIFIER "h"
144
+ #else
145
+ # if defined(_M_X64) || defined(__amd64__)
146
+ # define MUNIT_SIZE_MODIFIER "I64"
147
+ # else
148
+ # define MUNIT_SIZE_MODIFIER ""
149
+ # endif
150
+ # define MUNIT_CHAR_MODIFIER ""
151
+ # define MUNIT_SHORT_MODIFIER ""
152
+ #endif
153
+
154
+ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
155
+ # define MUNIT_NO_RETURN _Noreturn
156
+ #elif defined(__GNUC__)
157
+ # define MUNIT_NO_RETURN __attribute__((__noreturn__))
158
+ #elif defined(_MSC_VER)
159
+ # define MUNIT_NO_RETURN __declspec(noreturn)
160
+ #else
161
+ # define MUNIT_NO_RETURN
162
+ #endif
163
+
164
+ #if defined(_MSC_VER) && (_MSC_VER >= 1500)
165
+ # define MUNIT__PUSH_DISABLE_MSVC_C4127 __pragma(warning(push)) __pragma(warning(disable:4127))
166
+ # define MUNIT__POP_DISABLE_MSVC_C4127 __pragma(warning(pop))
167
+ #else
168
+ # define MUNIT__PUSH_DISABLE_MSVC_C4127
169
+ # define MUNIT__POP_DISABLE_MSVC_C4127
170
+ #endif
171
+
172
+ typedef enum {
173
+ MUNIT_LOG_DEBUG,
174
+ MUNIT_LOG_INFO,
175
+ MUNIT_LOG_WARNING,
176
+ MUNIT_LOG_ERROR
177
+ } MunitLogLevel;
178
+
179
+ #if defined(__GNUC__) && !defined(__MINGW32__)
180
+ # define MUNIT_PRINTF(string_index, first_to_check) __attribute__((format (printf, string_index, first_to_check)))
181
+ #else
182
+ # define MUNIT_PRINTF(string_index, first_to_check)
183
+ #endif
184
+
185
+ MUNIT_PRINTF(4, 5)
186
+ void munit_logf_ex(MunitLogLevel level, const char* filename, int line, const char* format, ...);
187
+
188
+ #define munit_logf(level, format, ...) \
189
+ munit_logf_ex(level, __FILE__, __LINE__, format, __VA_ARGS__)
190
+
191
+ #define munit_log(level, msg) \
192
+ munit_logf(level, "%s", msg)
193
+
194
+ MUNIT_NO_RETURN
195
+ MUNIT_PRINTF(3, 4)
196
+ void munit_errorf_ex(const char* filename, int line, const char* format, ...);
197
+
198
+ #define munit_errorf(format, ...) \
199
+ munit_errorf_ex(__FILE__, __LINE__, format, __VA_ARGS__)
200
+
201
+ #define munit_error(msg) \
202
+ munit_errorf("%s", msg)
203
+
204
+ #define munit_assert(expr) \
205
+ do { \
206
+ if (!MUNIT_LIKELY(expr)) { \
207
+ munit_error("assertion failed: " #expr); \
208
+ } \
209
+ MUNIT__PUSH_DISABLE_MSVC_C4127 \
210
+ } while (0) \
211
+ MUNIT__POP_DISABLE_MSVC_C4127
212
+
213
+ #define munit_assert_true(expr) \
214
+ do { \
215
+ if (!MUNIT_LIKELY(expr)) { \
216
+ munit_error("assertion failed: " #expr " is not true"); \
217
+ } \
218
+ MUNIT__PUSH_DISABLE_MSVC_C4127 \
219
+ } while (0) \
220
+ MUNIT__POP_DISABLE_MSVC_C4127
221
+
222
+ #define munit_assert_false(expr) \
223
+ do { \
224
+ if (!MUNIT_LIKELY(!(expr))) { \
225
+ munit_error("assertion failed: " #expr " is not false"); \
226
+ } \
227
+ MUNIT__PUSH_DISABLE_MSVC_C4127 \
228
+ } while (0) \
229
+ MUNIT__POP_DISABLE_MSVC_C4127
230
+
231
+ #define munit_assert_type_full(prefix, suffix, T, fmt, a, op, b) \
232
+ do { \
233
+ T munit_tmp_a_ = (a); \
234
+ T munit_tmp_b_ = (b); \
235
+ if (!(munit_tmp_a_ op munit_tmp_b_)) { \
236
+ munit_errorf("assertion failed: %s %s %s (" prefix "%" fmt suffix " %s " prefix "%" fmt suffix ")", \
237
+ #a, #op, #b, munit_tmp_a_, #op, munit_tmp_b_); \
238
+ } \
239
+ MUNIT__PUSH_DISABLE_MSVC_C4127 \
240
+ } while (0) \
241
+ MUNIT__POP_DISABLE_MSVC_C4127
242
+
243
+ #define munit_assert_type(T, fmt, a, op, b) \
244
+ munit_assert_type_full("", "", T, fmt, a, op, b)
245
+
246
+ #define munit_assert_char(a, op, b) \
247
+ munit_assert_type_full("'\\x", "'", char, "02" MUNIT_CHAR_MODIFIER "x", a, op, b)
248
+ #define munit_assert_uchar(a, op, b) \
249
+ munit_assert_type_full("'\\x", "'", unsigned char, "02" MUNIT_CHAR_MODIFIER "x", a, op, b)
250
+ #define munit_assert_short(a, op, b) \
251
+ munit_assert_type(short, MUNIT_SHORT_MODIFIER "d", a, op, b)
252
+ #define munit_assert_ushort(a, op, b) \
253
+ munit_assert_type(unsigned short, MUNIT_SHORT_MODIFIER "u", a, op, b)
254
+ #define munit_assert_int(a, op, b) \
255
+ munit_assert_type(int, "d", a, op, b)
256
+ #define munit_assert_uint(a, op, b) \
257
+ munit_assert_type(unsigned int, "u", a, op, b)
258
+ #define munit_assert_long(a, op, b) \
259
+ munit_assert_type(long int, "ld", a, op, b)
260
+ #define munit_assert_ulong(a, op, b) \
261
+ munit_assert_type(unsigned long int, "lu", a, op, b)
262
+ #define munit_assert_llong(a, op, b) \
263
+ munit_assert_type(long long int, "lld", a, op, b)
264
+ #define munit_assert_ullong(a, op, b) \
265
+ munit_assert_type(unsigned long long int, "llu", a, op, b)
266
+
267
+ #define munit_assert_size(a, op, b) \
268
+ munit_assert_type(size_t, MUNIT_SIZE_MODIFIER "u", a, op, b)
269
+
270
+ #define munit_assert_float(a, op, b) \
271
+ munit_assert_type(float, "f", a, op, b)
272
+ #define munit_assert_double(a, op, b) \
273
+ munit_assert_type(double, "g", a, op, b)
274
+ #define munit_assert_ptr(a, op, b) \
275
+ munit_assert_type(const void*, "p", a, op, b)
276
+
277
+ #define munit_assert_int8(a, op, b) \
278
+ munit_assert_type(munit_int8_t, PRIi8, a, op, b)
279
+ #define munit_assert_uint8(a, op, b) \
280
+ munit_assert_type(munit_uint8_t, PRIu8, a, op, b)
281
+ #define munit_assert_int16(a, op, b) \
282
+ munit_assert_type(munit_int16_t, PRIi16, a, op, b)
283
+ #define munit_assert_uint16(a, op, b) \
284
+ munit_assert_type(munit_uint16_t, PRIu16, a, op, b)
285
+ #define munit_assert_int32(a, op, b) \
286
+ munit_assert_type(munit_int32_t, PRIi32, a, op, b)
287
+ #define munit_assert_uint32(a, op, b) \
288
+ munit_assert_type(munit_uint32_t, PRIu32, a, op, b)
289
+ #define munit_assert_int64(a, op, b) \
290
+ munit_assert_type(munit_int64_t, PRIi64, a, op, b)
291
+ #define munit_assert_uint64(a, op, b) \
292
+ munit_assert_type(munit_uint64_t, PRIu64, a, op, b)
293
+
294
+ #define munit_assert_double_equal(a, b, precision) \
295
+ do { \
296
+ const double munit_tmp_a_ = (a); \
297
+ const double munit_tmp_b_ = (b); \
298
+ const double munit_tmp_diff_ = ((munit_tmp_a_ - munit_tmp_b_) < 0) ? \
299
+ -(munit_tmp_a_ - munit_tmp_b_) : \
300
+ (munit_tmp_a_ - munit_tmp_b_); \
301
+ if (MUNIT_UNLIKELY(munit_tmp_diff_ > 1e-##precision)) { \
302
+ munit_errorf("assertion failed: %s == %s (%0." #precision "g == %0." #precision "g)", \
303
+ #a, #b, munit_tmp_a_, munit_tmp_b_); \
304
+ } \
305
+ MUNIT__PUSH_DISABLE_MSVC_C4127 \
306
+ } while (0) \
307
+ MUNIT__POP_DISABLE_MSVC_C4127
308
+
309
+ #include <string.h>
310
+ #define munit_assert_string_equal(a, b) \
311
+ do { \
312
+ const char* munit_tmp_a_ = a; \
313
+ const char* munit_tmp_b_ = b; \
314
+ if (MUNIT_UNLIKELY(strcmp(munit_tmp_a_, munit_tmp_b_) != 0)) { \
315
+ munit_errorf("assertion failed: string %s == %s (\"%s\" == \"%s\")", \
316
+ #a, #b, munit_tmp_a_, munit_tmp_b_); \
317
+ } \
318
+ MUNIT__PUSH_DISABLE_MSVC_C4127 \
319
+ } while (0) \
320
+ MUNIT__POP_DISABLE_MSVC_C4127
321
+
322
+ #define munit_assert_string_not_equal(a, b) \
323
+ do { \
324
+ const char* munit_tmp_a_ = a; \
325
+ const char* munit_tmp_b_ = b; \
326
+ if (MUNIT_UNLIKELY(strcmp(munit_tmp_a_, munit_tmp_b_) == 0)) { \
327
+ munit_errorf("assertion failed: string %s != %s (\"%s\" == \"%s\")", \
328
+ #a, #b, munit_tmp_a_, munit_tmp_b_); \
329
+ } \
330
+ MUNIT__PUSH_DISABLE_MSVC_C4127 \
331
+ } while (0) \
332
+ MUNIT__POP_DISABLE_MSVC_C4127
333
+
334
+ #define munit_assert_memory_equal(size, a, b) \
335
+ do { \
336
+ const unsigned char* munit_tmp_a_ = (const unsigned char*) (a); \
337
+ const unsigned char* munit_tmp_b_ = (const unsigned char*) (b); \
338
+ const size_t munit_tmp_size_ = (size); \
339
+ if (MUNIT_UNLIKELY(memcmp(munit_tmp_a_, munit_tmp_b_, munit_tmp_size_)) != 0) { \
340
+ size_t munit_tmp_pos_; \
341
+ for (munit_tmp_pos_ = 0 ; munit_tmp_pos_ < munit_tmp_size_ ; munit_tmp_pos_++) { \
342
+ if (munit_tmp_a_[munit_tmp_pos_] != munit_tmp_b_[munit_tmp_pos_]) { \
343
+ munit_errorf("assertion failed: memory %s == %s, at offset %" MUNIT_SIZE_MODIFIER "u", \
344
+ #a, #b, munit_tmp_pos_); \
345
+ break; \
346
+ } \
347
+ } \
348
+ } \
349
+ MUNIT__PUSH_DISABLE_MSVC_C4127 \
350
+ } while (0) \
351
+ MUNIT__POP_DISABLE_MSVC_C4127
352
+
353
+ #define munit_assert_memory_not_equal(size, a, b) \
354
+ do { \
355
+ const unsigned char* munit_tmp_a_ = (const unsigned char*) (a); \
356
+ const unsigned char* munit_tmp_b_ = (const unsigned char*) (b); \
357
+ const size_t munit_tmp_size_ = (size); \
358
+ if (MUNIT_UNLIKELY(memcmp(munit_tmp_a_, munit_tmp_b_, munit_tmp_size_)) == 0) { \
359
+ munit_errorf("assertion failed: memory %s != %s (%zu bytes)", \
360
+ #a, #b, munit_tmp_size_); \
361
+ } \
362
+ MUNIT__PUSH_DISABLE_MSVC_C4127 \
363
+ } while (0) \
364
+ MUNIT__POP_DISABLE_MSVC_C4127
365
+
366
+ #define munit_assert_ptr_equal(a, b) \
367
+ munit_assert_ptr(a, ==, b)
368
+ #define munit_assert_ptr_not_equal(a, b) \
369
+ munit_assert_ptr(a, !=, b)
370
+ #define munit_assert_null(ptr) \
371
+ munit_assert_ptr(ptr, ==, NULL)
372
+ #define munit_assert_not_null(ptr) \
373
+ munit_assert_ptr(ptr, !=, NULL)
374
+ #define munit_assert_ptr_null(ptr) \
375
+ munit_assert_ptr(ptr, ==, NULL)
376
+ #define munit_assert_ptr_not_null(ptr) \
377
+ munit_assert_ptr(ptr, !=, NULL)
378
+
379
+ /*** Memory allocation ***/
380
+
381
+ void* munit_malloc_ex(const char* filename, int line, size_t size);
382
+
383
+ #define munit_malloc(size) \
384
+ munit_malloc_ex(__FILE__, __LINE__, (size))
385
+
386
+ #define munit_new(type) \
387
+ ((type*) munit_malloc(sizeof(type)))
388
+
389
+ #define munit_calloc(nmemb, size) \
390
+ munit_malloc((nmemb) * (size))
391
+
392
+ #define munit_newa(type, nmemb) \
393
+ ((type*) munit_calloc((nmemb), sizeof(type)))
394
+
395
+ /*** Random number generation ***/
396
+
397
+ void munit_rand_seed(munit_uint32_t seed);
398
+ munit_uint32_t munit_rand_uint32(void);
399
+ int munit_rand_int_range(int min, int max);
400
+ double munit_rand_double(void);
401
+ void munit_rand_memory(size_t size, munit_uint8_t buffer[MUNIT_ARRAY_PARAM(size)]);
402
+
403
+ /*** Tests and Suites ***/
404
+
405
+ typedef enum {
406
+ /* Test successful */
407
+ MUNIT_OK,
408
+ /* Test failed */
409
+ MUNIT_FAIL,
410
+ /* Test was skipped */
411
+ MUNIT_SKIP,
412
+ /* Test failed due to circumstances not intended to be tested
413
+ * (things like network errors, invalid parameter value, failure to
414
+ * allocate memory in the test harness, etc.). */
415
+ MUNIT_ERROR
416
+ } MunitResult;
417
+
418
+ typedef struct {
419
+ char* name;
420
+ char** values;
421
+ } MunitParameterEnum;
422
+
423
+ typedef struct {
424
+ char* name;
425
+ char* value;
426
+ } MunitParameter;
427
+
428
+ const char* munit_parameters_get(const MunitParameter params[], const char* key);
429
+
430
+ typedef enum {
431
+ MUNIT_TEST_OPTION_NONE = 0,
432
+ MUNIT_TEST_OPTION_SINGLE_ITERATION = 1 << 0,
433
+ MUNIT_TEST_OPTION_TODO = 1 << 1
434
+ } MunitTestOptions;
435
+
436
+ typedef MunitResult (* MunitTestFunc)(const MunitParameter params[], void* user_data_or_fixture);
437
+ typedef void* (* MunitTestSetup)(const MunitParameter params[], void* user_data);
438
+ typedef void (* MunitTestTearDown)(void* fixture);
439
+
440
+ typedef struct {
441
+ char* name;
442
+ MunitTestFunc test;
443
+ MunitTestSetup setup;
444
+ MunitTestTearDown tear_down;
445
+ MunitTestOptions options;
446
+ MunitParameterEnum* parameters;
447
+ } MunitTest;
448
+
449
+ typedef enum {
450
+ MUNIT_SUITE_OPTION_NONE = 0
451
+ } MunitSuiteOptions;
452
+
453
+ typedef struct MunitSuite_ MunitSuite;
454
+
455
+ struct MunitSuite_ {
456
+ char* prefix;
457
+ MunitTest* tests;
458
+ MunitSuite* suites;
459
+ unsigned int iterations;
460
+ MunitSuiteOptions options;
461
+ };
462
+
463
+ int munit_suite_main(const MunitSuite* suite, void* user_data, int argc, char* const argv[MUNIT_ARRAY_PARAM(argc + 1)]);
464
+
465
+ /* Note: I'm not very happy with this API; it's likely to change if I
466
+ * figure out something better. Suggestions welcome. */
467
+
468
+ typedef struct MunitArgument_ MunitArgument;
469
+
470
+ struct MunitArgument_ {
471
+ char* name;
472
+ munit_bool (* parse_argument)(const MunitSuite* suite, void* user_data, int* arg, int argc, char* const argv[MUNIT_ARRAY_PARAM(argc + 1)]);
473
+ void (* write_help)(const MunitArgument* argument, void* user_data);
474
+ };
475
+
476
+ int munit_suite_main_custom(const MunitSuite* suite,
477
+ void* user_data,
478
+ int argc, char* const argv[MUNIT_ARRAY_PARAM(argc + 1)],
479
+ const MunitArgument arguments[]);
480
+
481
+ #if defined(MUNIT_ENABLE_ASSERT_ALIASES)
482
+
483
+ #define assert_true(expr) munit_assert_true(expr)
484
+ #define assert_false(expr) munit_assert_false(expr)
485
+ #define assert_char(a, op, b) munit_assert_char(a, op, b)
486
+ #define assert_uchar(a, op, b) munit_assert_uchar(a, op, b)
487
+ #define assert_short(a, op, b) munit_assert_short(a, op, b)
488
+ #define assert_ushort(a, op, b) munit_assert_ushort(a, op, b)
489
+ #define assert_int(a, op, b) munit_assert_int(a, op, b)
490
+ #define assert_uint(a, op, b) munit_assert_uint(a, op, b)
491
+ #define assert_long(a, op, b) munit_assert_long(a, op, b)
492
+ #define assert_ulong(a, op, b) munit_assert_ulong(a, op, b)
493
+ #define assert_llong(a, op, b) munit_assert_llong(a, op, b)
494
+ #define assert_ullong(a, op, b) munit_assert_ullong(a, op, b)
495
+ #define assert_size(a, op, b) munit_assert_size(a, op, b)
496
+ #define assert_float(a, op, b) munit_assert_float(a, op, b)
497
+ #define assert_double(a, op, b) munit_assert_double(a, op, b)
498
+ #define assert_ptr(a, op, b) munit_assert_ptr(a, op, b)
499
+
500
+ #define assert_int8(a, op, b) munit_assert_int8(a, op, b)
501
+ #define assert_uint8(a, op, b) munit_assert_uint8(a, op, b)
502
+ #define assert_int16(a, op, b) munit_assert_int16(a, op, b)
503
+ #define assert_uint16(a, op, b) munit_assert_uint16(a, op, b)
504
+ #define assert_int32(a, op, b) munit_assert_int32(a, op, b)
505
+ #define assert_uint32(a, op, b) munit_assert_uint32(a, op, b)
506
+ #define assert_int64(a, op, b) munit_assert_int64(a, op, b)
507
+ #define assert_uint64(a, op, b) munit_assert_uint64(a, op, b)
508
+
509
+ #define assert_double_equal(a, b, precision) munit_assert_double_equal(a, b, precision)
510
+ #define assert_string_equal(a, b) munit_assert_string_equal(a, b)
511
+ #define assert_string_not_equal(a, b) munit_assert_string_not_equal(a, b)
512
+ #define assert_memory_equal(size, a, b) munit_assert_memory_equal(size, a, b)
513
+ #define assert_memory_not_equal(size, a, b) munit_assert_memory_not_equal(size, a, b)
514
+ #define assert_ptr_equal(a, b) munit_assert_ptr_equal(a, b)
515
+ #define assert_ptr_not_equal(a, b) munit_assert_ptr_not_equal(a, b)
516
+ #define assert_ptr_null(ptr) munit_assert_null_equal(ptr)
517
+ #define assert_ptr_not_null(ptr) munit_assert_not_null(ptr)
518
+
519
+ #define assert_null(ptr) munit_assert_null(ptr)
520
+ #define assert_not_null(ptr) munit_assert_not_null(ptr)
521
+
522
+ #endif /* defined(MUNIT_ENABLE_ASSERT_ALIASES) */
523
+
524
+ #if defined(__cplusplus)
525
+ }
526
+ #endif
527
+
528
+ #endif /* !defined(MUNIT_H) */
529
+
530
+ #if defined(MUNIT_ENABLE_ASSERT_ALIASES)
531
+ # if defined(assert)
532
+ # undef assert
533
+ # endif
534
+ # define assert(expr) munit_assert(expr)
535
+ #endif
@@ -0,0 +1,20 @@
1
+ #include "munit/munit.h"
2
+ #include "x86/test-x86.h"
3
+ #include "arm/test-arm.h"
4
+ #include "../simde/simde-common.h"
5
+ #include "run-tests.h"
6
+
7
+ #include <math.h>
8
+
9
+ int main(int argc, char* argv[HEDLEY_ARRAY_PARAM(argc + 1)]) {
10
+ static MunitSuite suite = { "", NULL, NULL, 1, MUNIT_SUITE_OPTION_NONE };
11
+ MunitSuite suites[] = {
12
+ *simde_tests_x86_get_suite(),
13
+ *simde_tests_arm_get_suite(),
14
+ { NULL, NULL, NULL, 1, MUNIT_SUITE_OPTION_NONE }
15
+ };
16
+
17
+ suite.suites = suites;
18
+
19
+ return munit_suite_main(&suite, NULL, argc, argv);
20
+ }