Skip to content

Commit 88d010b

Browse files
committed
Add support code for the ASAN CI run
1 parent fffd60a commit 88d010b

File tree

5 files changed

+75
-28
lines changed

5 files changed

+75
-28
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ test_openmp:
77
cd builddir && ninja
88

99
test_asan:
10-
meson setup -Dbuild_tests=true -Duse_openmp=true -Db_sanitize=address,undefined -Dfatal_sanitizers=true -Db_lundef=false --warnlevel 2 --werror --buildtype debugoptimized builddir
10+
meson setup -Dbuild_tests=true -Duse_openmp=true -Db_sanitize=address,undefined -Dfatal_sanitizers=true -Db_lundef=false -Dasan_ci_dont_validate=true --warnlevel 0 --buildtype debugoptimized builddir
1111
cd builddir && ninja
1212

1313
bench:

meson_options.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ option('lib_type', type : 'string', value : 'shared',
1212
description : 'Library type: shared or static (default: "shared").')
1313
option('fatal_sanitizers', type : 'boolean', value : 'false',
1414
description : 'If sanitizers are enabled, should all issues be considered fatal? (default: "false").')
15+
option('asan_ci_dont_validate', type : 'boolean', value : 'false',
16+
description : 'Only for speeding up ASAN CI, do not turn on otherwise')

tests/meson.build

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,33 @@
11
libtests = []
22

3+
# Add compile flags when needed for the ASAN CI run
4+
testargs = []
5+
if get_option('asan_ci_dont_validate')
6+
if get_option('fatal_sanitizers')
7+
testargs = ['-DXSS_ASAN_CI_NOCHECK=true']
8+
else
9+
error('asan_ci_dont_validate is only for the ASAN CI, should be false otherwise!')
10+
endif
11+
endif
12+
13+
314
libtests += static_library('tests_qsort',
415
files('test-qsort.cpp', ),
516
dependencies: gtest_dep,
617
include_directories : [src, lib, utils],
18+
cpp_args : [testargs],
719
)
820

921
libtests += static_library('tests_kvsort',
1022
files('test-keyvalue.cpp', ),
1123
dependencies: gtest_dep,
1224
include_directories : [src, lib, utils],
25+
cpp_args : [testargs],
1326
)
1427

1528
libtests += static_library('tests_objsort',
1629
files('test-objqsort.cpp', ),
1730
dependencies: gtest_dep,
1831
include_directories : [src, lib, utils],
32+
cpp_args : [testargs],
1933
)

tests/test-keyvalue.cpp

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,10 @@ TYPED_TEST_P(simdkvsort, test_kvsort_ascending)
176176
std::vector<T2> val = get_array<T2>(type, size);
177177
std::vector<T1> key_bckp = key;
178178
std::vector<T2> val_bckp = val;
179+
179180
x86simdsort::keyvalue_qsort(
180181
key.data(), val.data(), size, hasnan, false);
182+
#ifndef XSS_ASAN_CI_NOCHECK
181183
xss::scalar::keyvalue_qsort(
182184
key_bckp.data(), val_bckp.data(), size, hasnan, false);
183185

@@ -187,7 +189,7 @@ TYPED_TEST_P(simdkvsort, test_kvsort_ascending)
187189
val_bckp.data(),
188190
size);
189191
ASSERT_EQ(is_kv_sorted_, true);
190-
192+
#endif
191193
key.clear();
192194
val.clear();
193195
key_bckp.clear();
@@ -207,8 +209,10 @@ TYPED_TEST_P(simdkvsort, test_kvsort_descending)
207209
std::vector<T2> val = get_array<T2>(type, size);
208210
std::vector<T1> key_bckp = key;
209211
std::vector<T2> val_bckp = val;
212+
210213
x86simdsort::keyvalue_qsort(
211214
key.data(), val.data(), size, hasnan, true);
215+
#ifndef XSS_ASAN_CI_NOCHECK
212216
xss::scalar::keyvalue_qsort(
213217
key_bckp.data(), val_bckp.data(), size, hasnan, true);
214218

@@ -218,7 +222,7 @@ TYPED_TEST_P(simdkvsort, test_kvsort_descending)
218222
val_bckp.data(),
219223
size);
220224
ASSERT_EQ(is_kv_sorted_, true);
221-
225+
#endif
222226
key.clear();
223227
val.clear();
224228
key_bckp.clear();
@@ -242,12 +246,13 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
242246
std::vector<T1> key_bckp = key;
243247
std::vector<T2> val_bckp = val;
244248

249+
x86simdsort::keyvalue_select(
250+
key.data(), val.data(), k, size, hasnan, false);
251+
#ifndef XSS_ASAN_CI_NOCHECK
245252
xss::scalar::keyvalue_qsort(
246253
key_bckp.data(), val_bckp.data(), size, hasnan, false);
247254

248255
// Test select by using it as part of partial_sort
249-
x86simdsort::keyvalue_select(
250-
key.data(), val.data(), k, size, hasnan, false);
251256
if (size == 0) continue;
252257
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type);
253258
xss::scalar::keyvalue_qsort(
@@ -263,7 +268,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
263268
size,
264269
k);
265270
ASSERT_EQ(is_kv_partialsorted_, true);
266-
271+
#endif
267272
key.clear();
268273
val.clear();
269274
key_bckp.clear();
@@ -287,12 +292,13 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
287292
std::vector<T1> key_bckp = key;
288293
std::vector<T2> val_bckp = val;
289294

295+
x86simdsort::keyvalue_select(
296+
key.data(), val.data(), k, size, hasnan, true);
297+
#ifndef XSS_ASAN_CI_NOCHECK
290298
xss::scalar::keyvalue_qsort(
291299
key_bckp.data(), val_bckp.data(), size, hasnan, true);
292300

293301
// Test select by using it as part of partial_sort
294-
x86simdsort::keyvalue_select(
295-
key.data(), val.data(), k, size, hasnan, true);
296302
if (size == 0) continue;
297303
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type, true);
298304
xss::scalar::keyvalue_qsort(
@@ -308,7 +314,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
308314
size,
309315
k);
310316
ASSERT_EQ(is_kv_partialsorted_, true);
311-
317+
#endif
312318
key.clear();
313319
val.clear();
314320
key_bckp.clear();
@@ -330,8 +336,10 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
330336
std::vector<T2> val = get_array<T2>(type, size);
331337
std::vector<T1> key_bckp = key;
332338
std::vector<T2> val_bckp = val;
339+
333340
x86simdsort::keyvalue_partial_sort(
334341
key.data(), val.data(), k, size, hasnan, false);
342+
#ifndef XSS_ASAN_CI_NOCHECK
335343
if (size == 0) continue;
336344
xss::scalar::keyvalue_qsort(
337345
key_bckp.data(), val_bckp.data(), size, hasnan, false);
@@ -346,7 +354,7 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
346354
size,
347355
k);
348356
ASSERT_EQ(is_kv_partialsorted_, true);
349-
357+
#endif
350358
key.clear();
351359
val.clear();
352360
key_bckp.clear();
@@ -368,8 +376,10 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
368376
std::vector<T2> val = get_array<T2>(type, size);
369377
std::vector<T1> key_bckp = key;
370378
std::vector<T2> val_bckp = val;
379+
371380
x86simdsort::keyvalue_partial_sort(
372381
key.data(), val.data(), k, size, hasnan, true);
382+
#ifndef XSS_ASAN_CI_NOCHECK
373383
if (size == 0) continue;
374384
xss::scalar::keyvalue_qsort(
375385
key_bckp.data(), val_bckp.data(), size, hasnan, true);
@@ -384,7 +394,7 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
384394
size,
385395
k);
386396
ASSERT_EQ(is_kv_partialsorted_, true);
387-
397+
#endif
388398
key.clear();
389399
val.clear();
390400
key_bckp.clear();

tests/test-qsort.cpp

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@ TYPED_TEST_P(simdsort, test_qsort_ascending)
3838
// Ascending order
3939
std::vector<TypeParam> arr = basearr;
4040
std::vector<TypeParam> sortedarr = arr;
41+
42+
x86simdsort::qsort(arr.data(), arr.size(), hasnan);
43+
#ifndef XSS_ASAN_CI_NOCHECK
4144
std::sort(sortedarr.begin(),
4245
sortedarr.end(),
4346
compare<TypeParam, std::less<TypeParam>>());
44-
x86simdsort::qsort(arr.data(), arr.size(), hasnan);
4547
IS_SORTED(sortedarr, arr, type);
46-
48+
#endif
4749
arr.clear();
4850
sortedarr.clear();
4951
}
@@ -60,12 +62,14 @@ TYPED_TEST_P(simdsort, test_qsort_descending)
6062
// Descending order
6163
std::vector<TypeParam> arr = basearr;
6264
std::vector<TypeParam> sortedarr = arr;
65+
66+
x86simdsort::qsort(arr.data(), arr.size(), hasnan, true);
67+
#ifndef XSS_ASAN_CI_NOCHECK
6368
std::sort(sortedarr.begin(),
6469
sortedarr.end(),
6570
compare<TypeParam, std::greater<TypeParam>>());
66-
x86simdsort::qsort(arr.data(), arr.size(), hasnan, true);
6771
IS_SORTED(sortedarr, arr, type);
68-
72+
#endif
6973
arr.clear();
7074
sortedarr.clear();
7175
}
@@ -79,11 +83,14 @@ TYPED_TEST_P(simdsort, test_argsort_ascending)
7983
for (auto size : this->arrsize) {
8084
std::vector<TypeParam> arr = get_array<TypeParam>(type, size);
8185
std::vector<TypeParam> sortedarr = arr;
86+
87+
auto arg = x86simdsort::argsort(arr.data(), arr.size(), hasnan);
88+
#ifndef XSS_ASAN_CI_NOCHECK
8289
std::sort(sortedarr.begin(),
8390
sortedarr.end(),
8491
compare<TypeParam, std::less<TypeParam>>());
85-
auto arg = x86simdsort::argsort(arr.data(), arr.size(), hasnan);
8692
IS_ARG_SORTED(sortedarr, arr, arg, type);
93+
#endif
8794
arr.clear();
8895
arg.clear();
8996
}
@@ -97,12 +104,15 @@ TYPED_TEST_P(simdsort, test_argsort_descending)
97104
for (auto size : this->arrsize) {
98105
std::vector<TypeParam> arr = get_array<TypeParam>(type, size);
99106
std::vector<TypeParam> sortedarr = arr;
107+
108+
auto arg = x86simdsort::argsort(
109+
arr.data(), arr.size(), hasnan, true);
110+
#ifndef XSS_ASAN_CI_NOCHECK
100111
std::sort(sortedarr.begin(),
101112
sortedarr.end(),
102113
compare<TypeParam, std::greater<TypeParam>>());
103-
auto arg = x86simdsort::argsort(
104-
arr.data(), arr.size(), hasnan, true);
105114
IS_ARG_SORTED(sortedarr, arr, arg, type);
115+
#endif
106116
arr.clear();
107117
arg.clear();
108118
}
@@ -120,14 +130,16 @@ TYPED_TEST_P(simdsort, test_qselect_ascending)
120130
// Ascending order
121131
std::vector<TypeParam> arr = basearr;
122132
std::vector<TypeParam> sortedarr = arr;
133+
134+
x86simdsort::qselect(arr.data(), k, arr.size(), hasnan);
135+
#ifndef XSS_ASAN_CI_NOCHECK
123136
std::nth_element(sortedarr.begin(),
124137
sortedarr.begin() + k,
125138
sortedarr.end(),
126139
compare<TypeParam, std::less<TypeParam>>());
127-
x86simdsort::qselect(arr.data(), k, arr.size(), hasnan);
128140
if (size == 0) continue;
129141
IS_ARR_PARTITIONED(arr, k, sortedarr[k], type);
130-
142+
#endif
131143
arr.clear();
132144
sortedarr.clear();
133145
}
@@ -145,14 +157,16 @@ TYPED_TEST_P(simdsort, test_qselect_descending)
145157
// Descending order
146158
std::vector<TypeParam> arr = basearr;
147159
std::vector<TypeParam> sortedarr = arr;
160+
161+
x86simdsort::qselect(arr.data(), k, arr.size(), hasnan, true);
162+
#ifndef XSS_ASAN_CI_NOCHECK
148163
std::nth_element(sortedarr.begin(),
149164
sortedarr.begin() + k,
150165
sortedarr.end(),
151166
compare<TypeParam, std::greater<TypeParam>>());
152-
x86simdsort::qselect(arr.data(), k, arr.size(), hasnan, true);
153167
if (size == 0) continue;
154168
IS_ARR_PARTITIONED(arr, k, sortedarr[k], type, true);
155-
169+
#endif
156170
arr.clear();
157171
sortedarr.clear();
158172
}
@@ -167,13 +181,16 @@ TYPED_TEST_P(simdsort, test_argselect)
167181
size_t k = size != 0 ? rand() % size : 0;
168182
std::vector<TypeParam> arr = get_array<TypeParam>(type, size);
169183
std::vector<TypeParam> sortedarr = arr;
184+
185+
auto arg
186+
= x86simdsort::argselect(arr.data(), k, arr.size(), hasnan);
187+
#ifndef XSS_ASAN_CI_NOCHECK
170188
std::sort(sortedarr.begin(),
171189
sortedarr.end(),
172190
compare<TypeParam, std::less<TypeParam>>());
173-
auto arg
174-
= x86simdsort::argselect(arr.data(), k, arr.size(), hasnan);
175191
if (size == 0) continue;
176192
IS_ARG_PARTITIONED(arr, arg, sortedarr[k], k, type);
193+
#endif
177194
arr.clear();
178195
sortedarr.clear();
179196
}
@@ -191,13 +208,15 @@ TYPED_TEST_P(simdsort, test_partial_qsort_ascending)
191208
// Ascending order
192209
std::vector<TypeParam> arr = basearr;
193210
std::vector<TypeParam> sortedarr = arr;
211+
212+
x86simdsort::partial_qsort(arr.data(), k, arr.size(), hasnan);
213+
#ifndef XSS_ASAN_CI_NOCHECK
194214
std::sort(sortedarr.begin(),
195215
sortedarr.end(),
196216
compare<TypeParam, std::less<TypeParam>>());
197-
x86simdsort::partial_qsort(arr.data(), k, arr.size(), hasnan);
198217
if (size == 0) continue;
199218
IS_ARR_PARTIALSORTED(arr, k, sortedarr, type);
200-
219+
#endif
201220
arr.clear();
202221
sortedarr.clear();
203222
}
@@ -215,13 +234,15 @@ TYPED_TEST_P(simdsort, test_partial_qsort_descending)
215234
// Descending order
216235
std::vector<TypeParam> arr = basearr;
217236
std::vector<TypeParam> sortedarr = arr;
237+
238+
x86simdsort::partial_qsort(arr.data(), k, arr.size(), hasnan, true);
239+
#ifndef XSS_ASAN_CI_NOCHECK
218240
std::sort(sortedarr.begin(),
219241
sortedarr.end(),
220242
compare<TypeParam, std::greater<TypeParam>>());
221-
x86simdsort::partial_qsort(arr.data(), k, arr.size(), hasnan, true);
222243
if (size == 0) continue;
223244
IS_ARR_PARTIALSORTED(arr, k, sortedarr, type);
224-
245+
#endif
225246
arr.clear();
226247
sortedarr.clear();
227248
}

0 commit comments

Comments
 (0)