• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

renatahodovan / grammarinator / 40007899466
82%
master: 83%

Build:
Build:
LAST BUILD BRANCH: lf-memory
DEFAULT BRANCH: master
Ran 23 Oct 2026 07:02PM UTC
Jobs 1
Files 27
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

23 Oct 2026 06:59PM UTC coverage: 81.367% (-0.07%) from 81.433%
40007899466

push

github

renatahodovan
Add new mutators

Add general mutators to both the Python and the C++ tools:
- pump_recursion: the inverse of hoist_rule. Select two nodes of the same
  rule in an ancestor-descendant relationship and repeat the part of the
  tree between them a random number of times, nested into each other.
- replicate_with_variation: like replicate_quantified, but regenerate a
  random rule node in each copy, so that the copies differ.
- copy_local_node: replace a node with a copy of another compatible node
  of the same tree (unlike swap_local_nodes, which exchanges them).
- merge_names: rewrite all tokens of a lexer rule that have the same text
  to another text of the same lexer rule from the same tree (e.g., rename
  an identifier to another one already in use).
- switch_alternative_keep_children: regenerate a rule node so that a
  different alternative is chosen at one of its alternations (keeping
  the choices of the enclosing alternations), and put the old rule
  children of the node in place of the newly generated ones of the same
  rule (e.g., a + b may become a * b or ( a )).

Add subtree pool based mutators to the AFL++ integration:
- replace_quantifier_from_pool: replace a whole quantifier node with a
  compatible one from the pool.
- wrap_from_pool: select a pool subtree that has the rule of a node and
  embeds the same rule again, put it in place of the node, and put the
  node in place of the embedded occurrence.
- regenerate_rare: regenerate like regenerate_rule, but weight the
  alternatives inversely to how many distinct pool subtrees chose them.

To support these, SubTreePopulation marks self-embedding subtrees and
counts the alternatives of the pooled subtrees, and the generate and
regenerate_rule methods of the tools accept a decision model wrapper.

Furthermore, the pool-based mutators now select subtrees by their
expected success rate. grafl records the pool subtrees used by every
emitted mutation, and credits them if the result becomes a new... (continued)

122 of 223 new or added lines in 1 file covered. (54.71%)

99 existing lines in 1 file now uncovered.

2441 of 3000 relevant lines covered (81.37%)

0.81 hits per line

Uncovered Changes

Lines Coverage ∆ File
101
65.42
-0.49% grammarinator/tool/generator.py

Coverage Regressions

Lines Coverage ∆ File
99
65.42
-0.49% grammarinator/tool/generator.py
Jobs
ID Job ID Ran Files Coverage
1 40007899466.1 23 Oct 2026 07:02PM UTC 27
81.37
GitHub Action Run
Source Files on build 40007899466
  • Tree
  • List 27
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • ea9bf286 on github
  • Prev Build on dev (#40003961151)
  • Next Build on dev (#40080941145)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc