Recursive modulators, and fuzz testing

Captain's Log: Stardate 77379.8

So, making Links Linkable has been "exciting." This all introduces so many weird edge cases and I've had to put a lot of thought into what's actually possible to simulate, etc, but it's all coming together. One bonus from working on this is that I've improved the overall fuzz testing apparatus that I have, and that's caught not only bugs in the new Linkable Link implementation but also old bugs that I never noticed before. Especially with regards to some weird undo/redo use cases.

Modulators can now be linked to springs in the UI and all the edge cases are handled. I still haven't implemented the actual simulation code for this, but I think that should be relatively straightforward. Also, I've laid the groundwork for making modulators modulatable (for only one layer of recursion). Finishing that up should also be fairly straightforward at this point. In both cases I'm pretty certain that the simulation should work acceptably.

I'm fairly curious about the modulator->modulator performance. The implementation I'm thinking of will not have as good support for coalesced memory access on the GPU as most of the existing memory accesses. I'll have to do some testing once I've implemented it to see how expensive it is and whether it will work acceptably. The good news is that users won't pay the costs if they don't actually create instruments that have modulated modulators. (Which is probably a pretty common case.)

Captain's Log: Supplemental As an aside, I can't recommend fuzz testing enough. Especially for a system with such a complex data model, with so many tricky constraints and invariants that need to hold, it has been a life saver. It catches so many bugs that otherwise I'd have to find through extremely thorough manual testing, and some of them I am certain would only be caught at the alpha/beta stage by users.

And, once you have built a good fuzz testing framework for the system, you can apply it to all kinds of problems. I use mine to test thread synchronization, undo/redo, serialization/deserialization, and other things.


© 2024 Anukari LLC, All Rights Reserved
Contact Us|Legal