xd009642 / tarpaulin

A code coverage tool for Rust projects
https://crates.io/crates/cargo-tarpaulin
Apache License 2.0
2.5k stars 180 forks source link

Help: call for testing projects #533

Closed xd009642 closed 3 years ago

xd009642 commented 4 years ago

I'm going to be working on some substantial changes to tarpaulin (described here: https://github.com/xd009642/tarpaulin/issues/516#issuecomment-665938418) which should:

  1. Significantly speed it up for projects with a lot of dependencies or quite heavy dependencies
  2. Fix numerous linker issues from FFI code
  3. Improve accuracy of coverage.

So all in all this should impact the following issues:

126 #340 #351 #496 #516 #517

But because of this big change I'm also looking for a variety of projects which:

  1. Demonstrate usage of different language features (stable or nightly)
  2. Don't currently work with tarpaulin
  3. Are slow with tarpaulin
  4. Have varying levels of dependencies or tests
  5. Work on Linux and x64

I'll be using these to work out differences in performance and accuracy and preventing any regressions as the search space of potential issues is fairly large. If people could suggest projects that would be a great help.

So far I'll be using:

agersant commented 4 years ago

Not sure if this one can help, I have a small library which:

Links:

Of note, it has false positives for lines defining type alias within functions, which I don't see listed as a known issue in #351.

xd009642 commented 4 years ago

Yeah that's good, small makes it easier for me to look at all the source :+1:

AngelOnFira commented 4 years ago

I'd be happy to help get Veloren in on this :smile:

xd009642 commented 4 years ago

Oh veloren should be good for gauging performance change between the two, cloned and in the testing folder :heart:

ralpha commented 4 years ago

I came across this because of #517. (which can be closed I think, and I don't think is really related to this issue) The code base I'm working on could also be used for testing.

Code is opensource and on GitLab: https://gitlab.com/df_storyteller/df-storyteller Rocket might also be a good candidate.

xd009642 commented 4 years ago

This has been stalled slightly. I implemented my approach and found that without replicating the partial evaluation steps in the compiler I couldn't reliably mark lines that "are able to be hit". But removing -C link-dead-code did fix linker issues on a variety of projects.

My next step was to try and get it working with cargo rustc as that lets me apply linker flags to just the crate being compiled. But it only works on the package level not the workspace level (there's an issue for that now https://github.com/rust-lang/cargo/issues/8651). I tried some other stuff anyone interested can see in the issue but to no avail.

Now I was ultimately hoping this could work alongside my ptrace based coverage or https://github.com/xd009642/tarpaulin/issues/549 and be part of the gradual mitigation as until llvm coverage is stable. But it might just be a case of waiting for a bit and being patient

jhpratt commented 4 years ago

The time crate (time-rs/time) has decent coverage (~95% on the main crate), and is roughly 5k lines of source code. Its dependencies are minimal ("standard" proc macro dependencies, a couple of macros for progressive enhancement, and system APIs). It definitely works on x86!

From manually looking at the coverage, it looks like there's a fair number of false negatives.

silvanshade commented 4 years ago

Another project you could use is wasm-lsp/wasm-language-server.

The code base isn't too large yet but the project is fairly complex and coverage is high (~99.5%). There were several false negatives earlier having to do with multi-line method chaining but I just reformatted the code to resolve those.

In order to check coverage you would want to invoke:

cargo xtask tarpaulin --rest='--features wasm-language-server/corpus --features wasm-language-server-parsers/corpus'
rubik commented 4 years ago

@xd009642 I can submit a recent crate of mine for testing:

rubik/lobster - v0.2.0 on crates.io

Let me know if there's more I can do to help, Tarpaulin is a great and very useful project. Thanks for your time.

xd009642 commented 3 years ago

So I'm just going to close this for now, to aid with testing I've created tater and added most of the repos here into the repo list as well as some other projects I got via some list of important rust projects and other users.

I'll be aiming to use this to spot out regressions and changes in coverage behaviour. Although the laptop I've been using it with can't quite handle it so will have to wait till I have access to my desktop again or consider some cloud compute instances :sweat_smile: