Skip to content

Commit 2722698

Browse files
committed
Add support code for the ASAN CI run
1 parent 5809c70 commit 2722698

File tree

5 files changed

+74
-31
lines changed

5 files changed

+74
-31
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: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,33 @@ if get_option('use_openmp')
44
openmpflags = ['-DXSS_USE_OPENMP=true']
55
endif
66

7+
# Add compile flags when needed for the ASAN CI run
8+
testargs = []
9+
if get_option('asan_ci_dont_validate')
10+
if get_option('fatal_sanitizers')
11+
testargs = ['-DXSS_ASAN_CI_NOCHECK=true']
12+
else
13+
error('asan_ci_dont_validate is only for the ASAN CI, should be false otherwise!')
14+
endif
15+
endif
16+
717
libtests += static_library('tests_qsort',
818
files('test-qsort.cpp', ),
919
dependencies: gtest_dep,
1020
include_directories : [src, lib, utils],
11-
cpp_args : [openmpflags],
21+
cpp_args : [testargs, openmpflags],
1222
)
1323

1424
libtests += static_library('tests_kvsort',
1525
files('test-keyvalue.cpp', ),
1626
dependencies: gtest_dep,
1727
include_directories : [src, lib, utils],
18-
cpp_args : [openmpflags],
28+
cpp_args : [testargs, openmpflags],
1929
)
2030

2131
libtests += static_library('tests_objsort',
2232
files('test-objqsort.cpp', ),
2333
dependencies: gtest_dep,
2434
include_directories : [src, lib, utils],
25-
cpp_args : [openmpflags],
35+
cpp_args : [testargs, openmpflags],
2636
)

tests/test-keyvalue.cpp

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,10 @@ TYPED_TEST_P(simdkvsort, test_kvsort_ascending)
181181
std::vector<T2> val = get_array<T2>(type, size);
182182
std::vector<T1> key_bckp = key;
183183
std::vector<T2> val_bckp = val;
184+
184185
x86simdsort::keyvalue_qsort(
185186
key.data(), val.data(), size, hasnan, false);
187+
#ifndef XSS_ASAN_CI_NOCHECK
186188
xss::scalar::keyvalue_qsort(
187189
key_bckp.data(), val_bckp.data(), size, hasnan, false);
188190

@@ -192,7 +194,7 @@ TYPED_TEST_P(simdkvsort, test_kvsort_ascending)
192194
val_bckp.data(),
193195
size);
194196
ASSERT_EQ(is_kv_sorted_, true);
195-
197+
#endif
196198
key.clear();
197199
val.clear();
198200
key_bckp.clear();
@@ -212,8 +214,10 @@ TYPED_TEST_P(simdkvsort, test_kvsort_descending)
212214
std::vector<T2> val = get_array<T2>(type, size);
213215
std::vector<T1> key_bckp = key;
214216
std::vector<T2> val_bckp = val;
217+
215218
x86simdsort::keyvalue_qsort(
216219
key.data(), val.data(), size, hasnan, true);
220+
#ifndef XSS_ASAN_CI_NOCHECK
217221
xss::scalar::keyvalue_qsort(
218222
key_bckp.data(), val_bckp.data(), size, hasnan, true);
219223

@@ -223,7 +227,7 @@ TYPED_TEST_P(simdkvsort, test_kvsort_descending)
223227
val_bckp.data(),
224228
size);
225229
ASSERT_EQ(is_kv_sorted_, true);
226-
230+
#endif
227231
key.clear();
228232
val.clear();
229233
key_bckp.clear();
@@ -247,12 +251,13 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
247251
std::vector<T1> key_bckp = key;
248252
std::vector<T2> val_bckp = val;
249253

254+
x86simdsort::keyvalue_select(
255+
key.data(), val.data(), k, size, hasnan, false);
256+
#ifndef XSS_ASAN_CI_NOCHECK
250257
xss::scalar::keyvalue_qsort(
251258
key_bckp.data(), val_bckp.data(), size, hasnan, false);
252259

253260
// Test select by using it as part of partial_sort
254-
x86simdsort::keyvalue_select(
255-
key.data(), val.data(), k, size, hasnan, false);
256261
if (size == 0) continue;
257262
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type);
258263
xss::scalar::keyvalue_qsort(
@@ -268,7 +273,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
268273
size,
269274
k);
270275
ASSERT_EQ(is_kv_partialsorted_, true);
271-
276+
#endif
272277
key.clear();
273278
val.clear();
274279
key_bckp.clear();
@@ -292,12 +297,13 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
292297
std::vector<T1> key_bckp = key;
293298
std::vector<T2> val_bckp = val;
294299

300+
x86simdsort::keyvalue_select(
301+
key.data(), val.data(), k, size, hasnan, true);
302+
#ifndef XSS_ASAN_CI_NOCHECK
295303
xss::scalar::keyvalue_qsort(
296304
key_bckp.data(), val_bckp.data(), size, hasnan, true);
297305

298306
// Test select by using it as part of partial_sort
299-
x86simdsort::keyvalue_select(
300-
key.data(), val.data(), k, size, hasnan, true);
301307
if (size == 0) continue;
302308
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type, true);
303309
xss::scalar::keyvalue_qsort(
@@ -313,7 +319,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
313319
size,
314320
k);
315321
ASSERT_EQ(is_kv_partialsorted_, true);
316-
322+
#endif
317323
key.clear();
318324
val.clear();
319325
key_bckp.clear();
@@ -335,8 +341,10 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
335341
std::vector<T2> val = get_array<T2>(type, size);
336342
std::vector<T1> key_bckp = key;
337343
std::vector<T2> val_bckp = val;
344+
338345
x86simdsort::keyvalue_partial_sort(
339346
key.data(), val.data(), k, size, hasnan, false);
347+
#ifndef XSS_ASAN_CI_NOCHECK
340348
if (size == 0) continue;
341349
xss::scalar::keyvalue_qsort(
342350
key_bckp.data(), val_bckp.data(), size, hasnan, false);
@@ -351,7 +359,7 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
351359
size,
352360
k);
353361
ASSERT_EQ(is_kv_partialsorted_, true);
354-
362+
#endif
355363
key.clear();
356364
val.clear();
357365
key_bckp.clear();
@@ -373,8 +381,10 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
373381
std::vector<T2> val = get_array<T2>(type, size);
374382
std::vector<T1> key_bckp = key;
375383
std::vector<T2> val_bckp = val;
384+
376385
x86simdsort::keyvalue_partial_sort(
377386
key.data(), val.data(), k, size, hasnan, true);
387+
#ifndef XSS_ASAN_CI_NOCHECK
378388
if (size == 0) continue;
379389
xss::scalar::keyvalue_qsort(
380390
key_bckp.data(), val_bckp.data(), size, hasnan, true);
@@ -389,7 +399,7 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
389399
size,
390400
k);
391401
ASSERT_EQ(is_kv_partialsorted_, true);
392-
402+
#endif
393403
key.clear();
394404
val.clear();
395405
key_bckp.clear();

tests/test-qsort.cpp

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,14 @@ TYPED_TEST_P(simdsort, test_qsort_ascending)
4747
// Ascending order
4848
std::vector<TypeParam> arr = basearr;
4949
std::vector<TypeParam> sortedarr = arr;
50+
51+
x86simdsort::qsort(arr.data(), arr.size(), hasnan);
52+
#ifndef XSS_ASAN_CI_NOCHECK
5053
std::sort(sortedarr.begin(),
5154
sortedarr.end(),
5255
compare<TypeParam, std::less<TypeParam>>());
53-
x86simdsort::qsort(arr.data(), arr.size(), hasnan);
5456
IS_SORTED(sortedarr, arr, type);
55-
57+
#endif
5658
arr.clear();
5759
sortedarr.clear();
5860
}
@@ -69,12 +71,14 @@ TYPED_TEST_P(simdsort, test_qsort_descending)
6971
// Descending order
7072
std::vector<TypeParam> arr = basearr;
7173
std::vector<TypeParam> sortedarr = arr;
74+
75+
x86simdsort::qsort(arr.data(), arr.size(), hasnan, true);
76+
#ifndef XSS_ASAN_CI_NOCHECK
7277
std::sort(sortedarr.begin(),
7378
sortedarr.end(),
7479
compare<TypeParam, std::greater<TypeParam>>());
75-
x86simdsort::qsort(arr.data(), arr.size(), hasnan, true);
7680
IS_SORTED(sortedarr, arr, type);
77-
81+
#endif
7882
arr.clear();
7983
sortedarr.clear();
8084
}
@@ -88,11 +92,14 @@ TYPED_TEST_P(simdsort, test_argsort_ascending)
8892
for (auto size : this->arrsize) {
8993
std::vector<TypeParam> arr = get_array<TypeParam>(type, size);
9094
std::vector<TypeParam> sortedarr = arr;
95+
96+
auto arg = x86simdsort::argsort(arr.data(), arr.size(), hasnan);
97+
#ifndef XSS_ASAN_CI_NOCHECK
9198
std::sort(sortedarr.begin(),
9299
sortedarr.end(),
93100
compare<TypeParam, std::less<TypeParam>>());
94-
auto arg = x86simdsort::argsort(arr.data(), arr.size(), hasnan);
95101
IS_ARG_SORTED(sortedarr, arr, arg, type);
102+
#endif
96103
arr.clear();
97104
arg.clear();
98105
}
@@ -106,12 +113,15 @@ TYPED_TEST_P(simdsort, test_argsort_descending)
106113
for (auto size : this->arrsize) {
107114
std::vector<TypeParam> arr = get_array<TypeParam>(type, size);
108115
std::vector<TypeParam> sortedarr = arr;
116+
117+
auto arg = x86simdsort::argsort(
118+
arr.data(), arr.size(), hasnan, true);
119+
#ifndef XSS_ASAN_CI_NOCHECK
109120
std::sort(sortedarr.begin(),
110121
sortedarr.end(),
111122
compare<TypeParam, std::greater<TypeParam>>());
112-
auto arg = x86simdsort::argsort(
113-
arr.data(), arr.size(), hasnan, true);
114123
IS_ARG_SORTED(sortedarr, arr, arg, type);
124+
#endif
115125
arr.clear();
116126
arg.clear();
117127
}
@@ -129,14 +139,16 @@ TYPED_TEST_P(simdsort, test_qselect_ascending)
129139
// Ascending order
130140
std::vector<TypeParam> arr = basearr;
131141
std::vector<TypeParam> sortedarr = arr;
142+
143+
x86simdsort::qselect(arr.data(), k, arr.size(), hasnan);
144+
#ifndef XSS_ASAN_CI_NOCHECK
132145
std::nth_element(sortedarr.begin(),
133146
sortedarr.begin() + k,
134147
sortedarr.end(),
135148
compare<TypeParam, std::less<TypeParam>>());
136-
x86simdsort::qselect(arr.data(), k, arr.size(), hasnan);
137149
if (size == 0) continue;
138150
IS_ARR_PARTITIONED(arr, k, sortedarr[k], type);
139-
151+
#endif
140152
arr.clear();
141153
sortedarr.clear();
142154
}
@@ -154,14 +166,16 @@ TYPED_TEST_P(simdsort, test_qselect_descending)
154166
// Descending order
155167
std::vector<TypeParam> arr = basearr;
156168
std::vector<TypeParam> sortedarr = arr;
169+
170+
x86simdsort::qselect(arr.data(), k, arr.size(), hasnan, true);
171+
#ifndef XSS_ASAN_CI_NOCHECK
157172
std::nth_element(sortedarr.begin(),
158173
sortedarr.begin() + k,
159174
sortedarr.end(),
160175
compare<TypeParam, std::greater<TypeParam>>());
161-
x86simdsort::qselect(arr.data(), k, arr.size(), hasnan, true);
162176
if (size == 0) continue;
163177
IS_ARR_PARTITIONED(arr, k, sortedarr[k], type, true);
164-
178+
#endif
165179
arr.clear();
166180
sortedarr.clear();
167181
}
@@ -176,13 +190,16 @@ TYPED_TEST_P(simdsort, test_argselect)
176190
size_t k = size != 0 ? rand() % size : 0;
177191
std::vector<TypeParam> arr = get_array<TypeParam>(type, size);
178192
std::vector<TypeParam> sortedarr = arr;
193+
194+
auto arg
195+
= x86simdsort::argselect(arr.data(), k, arr.size(), hasnan);
196+
#ifndef XSS_ASAN_CI_NOCHECK
179197
std::sort(sortedarr.begin(),
180198
sortedarr.end(),
181199
compare<TypeParam, std::less<TypeParam>>());
182-
auto arg
183-
= x86simdsort::argselect(arr.data(), k, arr.size(), hasnan);
184200
if (size == 0) continue;
185201
IS_ARG_PARTITIONED(arr, arg, sortedarr[k], k, type);
202+
#endif
186203
arr.clear();
187204
sortedarr.clear();
188205
}
@@ -200,13 +217,15 @@ TYPED_TEST_P(simdsort, test_partial_qsort_ascending)
200217
// Ascending order
201218
std::vector<TypeParam> arr = basearr;
202219
std::vector<TypeParam> sortedarr = arr;
220+
221+
x86simdsort::partial_qsort(arr.data(), k, arr.size(), hasnan);
222+
#ifndef XSS_ASAN_CI_NOCHECK
203223
std::sort(sortedarr.begin(),
204224
sortedarr.end(),
205225
compare<TypeParam, std::less<TypeParam>>());
206-
x86simdsort::partial_qsort(arr.data(), k, arr.size(), hasnan);
207226
if (size == 0) continue;
208227
IS_ARR_PARTIALSORTED(arr, k, sortedarr, type);
209-
228+
#endif
210229
arr.clear();
211230
sortedarr.clear();
212231
}
@@ -224,13 +243,15 @@ TYPED_TEST_P(simdsort, test_partial_qsort_descending)
224243
// Descending order
225244
std::vector<TypeParam> arr = basearr;
226245
std::vector<TypeParam> sortedarr = arr;
246+
247+
x86simdsort::partial_qsort(arr.data(), k, arr.size(), hasnan, true);
248+
#ifndef XSS_ASAN_CI_NOCHECK
227249
std::sort(sortedarr.begin(),
228250
sortedarr.end(),
229251
compare<TypeParam, std::greater<TypeParam>>());
230-
x86simdsort::partial_qsort(arr.data(), k, arr.size(), hasnan, true);
231252
if (size == 0) continue;
232253
IS_ARR_PARTIALSORTED(arr, k, sortedarr, type);
233-
254+
#endif
234255
arr.clear();
235256
sortedarr.clear();
236257
}

0 commit comments

Comments
 (0)