Mercurial > hg
annotate tests/test-fuzz-targets.t @ 41247:a89b20a49c13
rust-cpython: using MissingAncestors from Python code
As precedently done with LazyAncestors on cpython.rs, we test for the
presence of the 'rustext' module.
incrementalmissingrevs() has two callers within the Mercurial core:
`setdiscovery.partialdiscovery` and the `only()` revset.
This move shows a significant discovery performance improvement
in cases where the baseline is slow: using perfdiscovery on the PyPy
repos, prepared with `contrib/discovery-helper <repo> 50 100`, we
get averaged medians of 403ms with the Rust version vs 742ms without
(about 45% better).
But there are still indications that performance can be worse in cases
the baseline is fast, possibly due to the conversion from Python to
Rust and back becoming the bottleneck. We could measure this on
mozilla-central in cases were the delta is just a few changesets.
This requires confirmation, but if that's the reason, then an
upcoming `partialdiscovery` fully in Rust should solve the problem.
Differential Revision: https://phab.mercurial-scm.org/D5551
author | Georges Racinet <georges.racinet@octobus.net> |
---|---|
date | Fri, 30 Nov 2018 14:35:57 +0100 |
parents | d9fc51f77cc5 |
children | 39cab871e880 |
rev | line source |
---|---|
38236
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
1 #require test-repo |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
2 |
35670
2b9e2415f5b5
contrib: add some basic scaffolding for some fuzz test targets
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3 $ cd $TESTDIR/../contrib/fuzz |
38236
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
4 |
40726
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
5 which(1) could exit nonzero, but that's fine because we'll still end |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
6 up without a valid executable, so we don't need to check $? here. |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
7 |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
8 $ if which gmake >/dev/null 2>&1; then |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
9 > MAKE=gmake |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
10 > else |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
11 > MAKE=make |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
12 > fi |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
13 |
40727
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
14 $ havefuzz() { |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
15 > cat > $TESTTMP/dummy.cc <<EOF |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
16 > #include <stdlib.h> |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
17 > #include <stdint.h> |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
18 > int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
19 > int main(int argc, char **argv) { |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
20 > const char data[] = "asdf"; |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
21 > return LLVMFuzzerTestOneInput((const uint8_t *)data, 4); |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
22 > } |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
23 > EOF |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
24 > $CXX $TESTTMP/dummy.cc -o $TESTTMP/dummy \ |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
25 > -fsanitize=fuzzer-no-link,address || return 1 |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
26 > } |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
27 |
38236
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
28 #if clang-libfuzzer |
40727
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
29 $ CXX=clang++ havefuzz || exit 80 |
40726
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
30 $ $MAKE -s clean all |
38236
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
31 #endif |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
32 #if no-clang-libfuzzer clang-6.0 |
40727
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40726
diff
changeset
|
33 $ CXX=clang++-6.0 havefuzz || exit 80 |
40726
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38246
diff
changeset
|
34 $ $MAKE -s clean all CC=clang-6.0 CXX=clang++-6.0 |
38236
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
35 #endif |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
36 #if no-clang-libfuzzer no-clang-6.0 |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
37 $ exit 80 |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
38 #endif |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38235
diff
changeset
|
39 |
38172
24cc2969abae
tests: update fuzzer tests to include both fuzzers
Augie Fackler <augie@google.com>
parents:
35670
diff
changeset
|
40 Just run the fuzzers for five seconds each to verify it works at all. |
35670
2b9e2415f5b5
contrib: add some basic scaffolding for some fuzz test targets
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
41 $ ./bdiff -max_total_time 5 |
38246
46dcb9f14900
fuzz: new fuzzer for the mpatch code
Augie Fackler <augie@google.com>
parents:
38236
diff
changeset
|
42 $ ./mpatch -max_total_time 5 |
38172
24cc2969abae
tests: update fuzzer tests to include both fuzzers
Augie Fackler <augie@google.com>
parents:
35670
diff
changeset
|
43 $ ./xdiff -max_total_time 5 |