mudasobwa
Creator of Cure
Thanks to Brian @bglusman who provided a very valuable PR to this library, I am to introduce the mutation-testing library for BEAM languages named Muex.
Why another one, when we already have Darwin and Exavier? Well, because I like to write code (more formal comparison can be found here.)
This library is also a part of the Language Agnostic Code Audit SaaS effort, MIT-license. Here is the repo:
https://github.com/Oeditus/muex
Example outcome:
❯ mix muex --files "examples/cart/lib/cart/*.ex" --verbose
Loading files from examples/cart/lib/cart/*.ex...
Found 2 file(s)
Analyzing files for mutation testing suitability...
✓ examples/cart/lib/cart/product.ex (score: 100)
✓ examples/cart/lib/cart/shopping_cart.ex (score: 100)
Selected 2 file(s), skipped 0 file(s)
Generating mutations...
Applying mutation optimization...
Original mutations: 1541
Optimized mutations: 31
Reduction: 1510 (-98.0%)
Average impact score: 6.9
Testing 31 mutation(s)
Analyzing test dependencies...
Running tests...
×××·×××××·×××
---×××·×××××××××××
Mutation Testing Results
==================================================
Total mutants: 31
Killed: 3 (caught by tests)
Survived: 25 (not caught by tests)
Invalid: 3 (compilation errors)
Timeout: 0
==================================================
Mutation Score: 9.68%
Survived Mutations:
--------------------------------------------------
examples/cart/lib/cart/product.ex:144
Boolean: and to or
…
** (Mix) Mutation score 9.68% is below threshold 100%
Trending in Announcing
Flop is an Elixir library that applies filtering, ordering and pagination parameters to your Ecto queries.
offset-based pagination with...
New
I needed to reuse React components from my Chrome extension in my Phoenix/LiveView backend. I noticed that for Svelte/Vue, there are live...
New
I released Doggo, a collection of unstyled Phoenix components.
https://github.com/woylie/doggo
Features
Unstyled Phoenix components....
New
Edit: 2026 May 15 - This post is archived.
Mob is alive!!
Main docs: mob v0.7.11 — Documentation
A bit of explanation for the slightly c...
New
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
Hi everyone,
I’ve been working on this protobuf library for 3 years. We use it in the company I work for, EasyMile, to communicate with ...
New
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Other Trending Topics
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Hi everyone!
The first release candidate for the Expert language server project is now available!
We’ve published a press release detai...
New
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main conc...
New
This showed up on my feed.. anyone heard of it? Just hype?
Ox Alpha is a reasoning model designed for coding, sustained ag...
New
Hey folks,
I just published a post about Hologram’s funding and where the project goes next - the short version:
Curiosum as Main Spons...
New
A little off-topic, but I feel like people here have a good head on their shoulders.
I used to be quite good at making software. Was luc...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #ai
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #elixirconf-eu
- #metaprogramming
- #hex










Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
krisleech
Thanks for open sourcing this, I’m playing with it now. It great to have this in Elixir.
mudasobwa
v0.6.0is out, all kudos go to @bglusmanFixes:
:invalid, not:killedStatementDeletion&ReturnValuemutatorsFeatures:
lud
Very interesting project! Thank you. I left an issue on Github because it seems to have problem compiling my project that uses macros.
mudasobwa
Yeah, thanks! I am on it already.
lud
I had Claude Code left you a comment too, which may or may not be useful
mudasobwa
Nah, the thing is I overestimated my ability to deal with a dozen of projects faster than my AI assistant (I am kinda competing with her on that matter
)
Yesterday I messed up merging new features and in a rush I did not validate it 102%. Stay tuned, the working version is to be there soon.
mudasobwa
v0.6.1is out, thanks @lud for testing and reporting the bug.Fixes:
Code.compile_string/2lud
I’ll try as soon as possible
lud
Hello,
So I let it run with
mix muex --optimize --optimize-level aggressive --verboseand it still takes a lot of time. I believe JSV was a very bad match because there are 7000 tests. I’ll try to move the tests so I can target only the right subset (for now I have agenerated/tests directory insidetest/jsv/so I cannot target "all files except those in generated. But it could be nice to be able to pass exclusion flags tomix testto exclude a@moduletag`.Then about the results I’m not so sure how to interpret them.
If I return nil from the function defined I have 52 test failures when running manually.
This is a
@doc group @doc_group. I also have results about removing a@doc falsestatement. Those should be ignored.I’m not sure what is statement 36:
Some results file:line point to a
defstructstatement. The app does not compile if I remove them.So in the end it’s not really helpful for now with all those
delete statement X of Ybecause I don’t know what that is. It could be really helpful to have a report file with patches so we can see what was the mutation, reproduce it, write a test to invalidate.I’m trying to see if the html report has this, but I can’t find a file to generate actual mutations. I set a “limit 30” but it only generates “invalid mutations”. I’ll try to re-run the full output (still with aggressive though) later.
But it was already helpful in some way, so far I know that I have to test a
@derive {Inspect, ...statement that is not tested at all.So I believe this is promising but you need a way to make prioritize the mutations in some way.
mudasobwa
Yes. And this is unavoidable. We (@bglusman and myself) put a lot of effort to the sophisticated optimization, but Elixir is still a compiled language.
That’s exactly what’s planned next.
Absolutely! Thanks for helping to test it!