Skip to content
Ani/Raven edited this page Apr 21, 2022 · 7 revisions

Background

DeepState is a framework that provides C and C++ developers with a common interface to various symbolic execution and fuzzing engines. Users can write one test harness using a Google Test-like API, then execute it using multiple backends without having to learn the complexities of the underlying engines.

RcppDeepState is an R package that makes it easy to use DeepState to fuzz C++ code in R packages using the Rcpp interface.

Related work

Related work in R is limited to R-level fuzzing (not fuzzing compiled/C++ code)

  • fuzzr implements some simple fuzz tests for your R functions, passing in a wide array of inputs and returning a report on how your function reacts.
  • autotest implements automatic mutation testing of R packages. Mutation in the sense of mutating inputs (parameters) to function calls. autotest primarily works by scraping documented examples for all functions, and mutating the parameters input to those functions.

Details of your coding project

  • create a GitHub action which makes it easy to run RcppDeepState on any R package in a GitHub repo.
  • get RcppDeepState on CRAN?

Expected impact

This project will make RcppDeepState much more easy to use, and therefore more subtle bugs in Rcpp code will eventually be identified and fixed.

Mentors

Contributors, please contact mentors below after completing at least one of the tests below.

  • EVALUATING MENTOR: Toby Hocking [email protected] is the author of numerous R packages, and was the PI on the R consortium RcppDeepState grant.
  • Randy Lai [email protected] is a data scientist and is the author of various R packages and R related software.
  • Anirban Chetia [email protected] has domain expertise in GitHub Actions, R and C++, in addition to previous GSoC experience under the R project for statistical computing (2020, 2021) and knowledge on DeepState.

Tests

Contributors, please do one or more of the following tests before contacting the mentors above.

  • Easy: setup a GitHub repo with an R package, and use r-lib/actions to automatically check the package after every commit. Modify your repo's github action so it does something different / non-standard. (maybe print out something that is not usually printed?)
  • Medium: create a new github repo for your Easy action, maybe call it custom-check, and use that new github action on your R package github repo.
  • Hard: download RcppDeepState and run it on a CRAN R package with Rcpp code. Compare your results to those shown on the RcppDeepState test results page. Any differences?

Solutions of tests

Contributors, please post a link to your test results here.